youtube-dl - YouTube.com やその他の動画サイトから動画をダウンロードするためのコマンドライン プログラム

(Command-line program to download videos from YouTube.com and other video sites)

Created at: 2010-10-31 22:35:07
Language: Python
License: Unlicense

ビルド ステータス

youtube-dl - youtube.com または他のビデオ プラットフォームからビデオをダウンロードします。

インストール

すべての UNIX ユーザー (Linux、macOS など) にすぐにインストールするには、次のように入力します。

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

curl がない場合は、代わりに最近の wget を使用できます。

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

Windows ユーザーは、.exe ファイルをダウンロードして、 PATH上の任意の場所に置くことができます

%SYSTEMROOT%\System32
(たとえば、.exeを入れない
C:\Windows\System32
でください)。

ピップを使用することもできます:

sudo -H pip install --upgrade youtube-dl

既にインストールされている場合、このコマンドは youtube-dl を更新します。詳細については、pypi ページを参照してください。

macOS ユーザーは、Homebrewで youtube-dl をインストールできます。

brew install youtube-dl

またはMacPortsで:

sudo port install youtube-dl

または、 git リポジトリをチェックアウトして操作する方法については、開発者向けの指示を参照してください。PGP 署名を含むその他のオプションについては、youtube-dl ダウンロード ページを参照してください。

説明

youtube-dlは、YouTube.com やその他のいくつかのサイトから動画をダウンロードするためのコマンドライン プログラムです。Python インタープリターのバージョン 2.6、2.7、または 3.2+ が必要であり、プラットフォーム固有ではありません。Unix ボックス、Windows、または macOS で動作するはずです。パブリック ドメインにリリースされているため、変更、再配布、または好きなように使用できます。

youtube-dl [OPTIONS] URL [URL...]

オプション

-h, --help                           Print this help text and exit
--version                            Print program version and exit
-U, --update                         Update this program to latest version.
                                     Make sure that you have sufficient
                                     permissions (run with sudo if needed)
-i, --ignore-errors                  Continue on download errors, for
                                     example to skip unavailable videos in a
                                     playlist
--abort-on-error                     Abort downloading of further videos (in
                                     the playlist or the command line) if an
                                     error occurs
--dump-user-agent                    Display the current browser
                                     identification
--list-extractors                    List all supported extractors
--extractor-descriptions             Output descriptions of all supported
                                     extractors
--force-generic-extractor            Force extraction to use the generic
                                     extractor
--default-search PREFIX              Use this prefix for unqualified URLs.
                                     For example "gvsearch2:" downloads two
                                     videos from google videos for youtube-
                                     dl "large apple". Use the value "auto"
                                     to let youtube-dl guess ("auto_warning"
                                     to emit a warning when guessing).
                                     "error" just throws an error. The
                                     default value "fixup_error" repairs
                                     broken URLs, but emits an error if this
                                     is not possible instead of searching.
--ignore-config                      Do not read configuration files. When
                                     given in the global configuration file
                                     /etc/youtube-dl.conf: Do not read the
                                     user configuration in
                                     ~/.config/youtube-dl/config
                                     (%APPDATA%/youtube-dl/config.txt on
                                     Windows)
--config-location PATH               Location of the configuration file;
                                     either the path to the config or its
                                     containing directory.
--flat-playlist                      Do not extract the videos of a
                                     playlist, only list them.
--mark-watched                       Mark videos watched (YouTube only)
--no-mark-watched                    Do not mark videos watched (YouTube
                                     only)
--no-color                           Do not emit color codes in output

ネットワーク オプション:

--proxy URL                          Use the specified HTTP/HTTPS/SOCKS
                                     proxy. To enable SOCKS proxy, specify a
                                     proper scheme. For example
                                     socks5://127.0.0.1:1080/. Pass in an
                                     empty string (--proxy "") for direct
                                     connection
--socket-timeout SECONDS             Time to wait before giving up, in
                                     seconds
--source-address IP                  Client-side IP address to bind to
-4, --force-ipv4                     Make all connections via IPv4
-6, --force-ipv6                     Make all connections via IPv6

地理的制限:

--geo-verification-proxy URL         Use this proxy to verify the IP address
                                     for some geo-restricted sites. The
                                     default proxy specified by --proxy (or
                                     none, if the option is not present) is
                                     used for the actual downloading.
--geo-bypass                         Bypass geographic restriction via
                                     faking X-Forwarded-For HTTP header
--no-geo-bypass                      Do not bypass geographic restriction
                                     via faking X-Forwarded-For HTTP header
--geo-bypass-country CODE            Force bypass geographic restriction
                                     with explicitly provided two-letter ISO
                                     3166-2 country code
--geo-bypass-ip-block IP_BLOCK       Force bypass geographic restriction
                                     with explicitly provided IP block in
                                     CIDR notation

ビデオの選択:

--playlist-start NUMBER              Playlist video to start at (default is
                                     1)
--playlist-end NUMBER                Playlist video to end at (default is
                                     last)
--playlist-items ITEM_SPEC           Playlist video items to download.
                                     Specify indices of the videos in the
                                     playlist separated by commas like: "--
                                     playlist-items 1,2,5,8" if you want to
                                     download videos indexed 1, 2, 5, 8 in
                                     the playlist. You can specify range: "
                                     --playlist-items 1-3,7,10-13", it will
                                     download the videos at index 1, 2, 3,
                                     7, 10, 11, 12 and 13.
--match-title REGEX                  Download only matching titles (regex or
                                     caseless sub-string)
--reject-title REGEX                 Skip download for matching titles
                                     (regex or caseless sub-string)
--max-downloads NUMBER               Abort after downloading NUMBER files
--min-filesize SIZE                  Do not download any videos smaller than
                                     SIZE (e.g. 50k or 44.6m)
--max-filesize SIZE                  Do not download any videos larger than
                                     SIZE (e.g. 50k or 44.6m)
--date DATE                          Download only videos uploaded in this
                                     date
--datebefore DATE                    Download only videos uploaded on or
                                     before this date (i.e. inclusive)
--dateafter DATE                     Download only videos uploaded on or
                                     after this date (i.e. inclusive)
--min-views COUNT                    Do not download any videos with less
                                     than COUNT views
--max-views COUNT                    Do not download any videos with more
                                     than COUNT views
--match-filter FILTER                Generic video filter. Specify any key
                                     (see the "OUTPUT TEMPLATE" for a list
                                     of available keys) to match if the key
                                     is present, !key to check if the key is
                                     not present, key > NUMBER (like
                                     "comment_count > 12", also works with
                                     >=, <, <=, !=, =) to compare against a
                                     number, key = 'LITERAL' (like "uploader
                                     = 'Mike Smith'", also works with !=) to
                                     match against a string literal and & to
                                     require multiple matches. Values which
                                     are not known are excluded unless you
                                     put a question mark (?) after the
                                     operator. For example, to only match
                                     videos that have been liked more than
                                     100 times and disliked less than 50
                                     times (or the dislike functionality is
                                     not available at the given service),
                                     but who also have a description, use
                                     --match-filter "like_count > 100 &
                                     dislike_count <? 50 & description" .
--no-playlist                        Download only the video, if the URL
                                     refers to a video and a playlist.
--yes-playlist                       Download the playlist, if the URL
                                     refers to a video and a playlist.
--age-limit YEARS                    Download only videos suitable for the
                                     given age
--download-archive FILE              Download only videos not listed in the
                                     archive file. Record the IDs of all
                                     downloaded videos in it.
--include-ads                        Download advertisements as well
                                     (experimental)

ダウンロード オプション:

-r, --limit-rate RATE                Maximum download rate in bytes per
                                     second (e.g. 50K or 4.2M)
-R, --retries RETRIES                Number of retries (default is 10), or
                                     "infinite".
--fragment-retries RETRIES           Number of retries for a fragment
                                     (default is 10), or "infinite" (DASH,
                                     hlsnative and ISM)
--skip-unavailable-fragments         Skip unavailable fragments (DASH,
                                     hlsnative and ISM)
--abort-on-unavailable-fragment      Abort downloading when some fragment is
                                     not available
--keep-fragments                     Keep downloaded fragments on disk after
                                     downloading is finished; fragments are
                                     erased by default
--buffer-size SIZE                   Size of download buffer (e.g. 1024 or
                                     16K) (default is 1024)
--no-resize-buffer                   Do not automatically adjust the buffer
                                     size. By default, the buffer size is
                                     automatically resized from an initial
                                     value of SIZE.
--http-chunk-size SIZE               Size of a chunk for chunk-based HTTP
                                     downloading (e.g. 10485760 or 10M)
                                     (default is disabled). May be useful
                                     for bypassing bandwidth throttling
                                     imposed by a webserver (experimental)
--playlist-reverse                   Download playlist videos in reverse
                                     order
--playlist-random                    Download playlist videos in random
                                     order
--xattr-set-filesize                 Set file xattribute ytdl.filesize with
                                     expected file size
--hls-prefer-native                  Use the native HLS downloader instead
                                     of ffmpeg
--hls-prefer-ffmpeg                  Use ffmpeg instead of the native HLS
                                     downloader
--hls-use-mpegts                     Use the mpegts container for HLS
                                     videos, allowing to play the video
                                     while downloading (some players may not
                                     be able to play it)
--external-downloader COMMAND        Use the specified external downloader.
                                     Currently supports aria2c,avconv,axel,c
                                     url,ffmpeg,httpie,wget
--external-downloader-args ARGS      Give these arguments to the external
                                     downloader

ファイルシステム オプション:

-a, --batch-file FILE                File containing URLs to download ('-'
                                     for stdin), one URL per line. Lines
                                     starting with '#', ';' or ']' are
                                     considered as comments and ignored.
--id                                 Use only video ID in file name
-o, --output TEMPLATE                Output filename template, see the
                                     "OUTPUT TEMPLATE" for all the info
--output-na-placeholder PLACEHOLDER  Placeholder value for unavailable meta
                                     fields in output filename template
                                     (default is "NA")
--autonumber-start NUMBER            Specify the start value for
                                     %(autonumber)s (default is 1)
--restrict-filenames                 Restrict filenames to only ASCII
                                     characters, and avoid "&" and spaces in
                                     filenames
-w, --no-overwrites                  Do not overwrite files
-c, --continue                       Force resume of partially downloaded
                                     files. By default, youtube-dl will
                                     resume downloads if possible.
--no-continue                        Do not resume partially downloaded
                                     files (restart from beginning)
--no-part                            Do not use .part files - write directly
                                     into output file
--no-mtime                           Do not use the Last-modified header to
                                     set the file modification time
--write-description                  Write video description to a
                                     .description file
--write-info-json                    Write video metadata to a .info.json
                                     file
--write-annotations                  Write video annotations to a
                                     .annotations.xml file
--load-info-json FILE                JSON file containing the video
                                     information (created with the "--write-
                                     info-json" option)
--cookies FILE                       File to read cookies from and dump
                                     cookie jar in
--cache-dir DIR                      Location in the filesystem where
                                     youtube-dl can store some downloaded
                                     information permanently. By default
                                     $XDG_CACHE_HOME/youtube-dl or
                                     ~/.cache/youtube-dl . At the moment,
                                     only YouTube player files (for videos
                                     with obfuscated signatures) are cached,
                                     but that may change.
--no-cache-dir                       Disable filesystem caching
--rm-cache-dir                       Delete all filesystem cache files

サムネイル オプション:

--write-thumbnail                    Write thumbnail image to disk
--write-all-thumbnails               Write all thumbnail image formats to
                                     disk
--list-thumbnails                    Simulate and list all available
                                     thumbnail formats

冗長性/シミュレーション オプション:

-q, --quiet                          Activate quiet mode
--no-warnings                        Ignore warnings
-s, --simulate                       Do not download the video and do not
                                     write anything to disk
--skip-download                      Do not download the video
-g, --get-url                        Simulate, quiet but print URL
-e, --get-title                      Simulate, quiet but print title
--get-id                             Simulate, quiet but print id
--get-thumbnail                      Simulate, quiet but print thumbnail URL
--get-description                    Simulate, quiet but print video
                                     description
--get-duration                       Simulate, quiet but print video length
--get-filename                       Simulate, quiet but print output
                                     filename
--get-format                         Simulate, quiet but print output format
-j, --dump-json                      Simulate, quiet but print JSON
                                     information. See the "OUTPUT TEMPLATE"
                                     for a description of available keys.
-J, --dump-single-json               Simulate, quiet but print JSON
                                     information for each command-line
                                     argument. If the URL refers to a
                                     playlist, dump the whole playlist
                                     information in a single line.
--print-json                         Be quiet and print the video
                                     information as JSON (video is still
                                     being downloaded).
--newline                            Output progress bar as new lines
--no-progress                        Do not print progress bar
--console-title                      Display progress in console titlebar
-v, --verbose                        Print various debugging information
--dump-pages                         Print downloaded pages encoded using
                                     base64 to debug problems (very verbose)
--write-pages                        Write downloaded intermediary pages to
                                     files in the current directory to debug
                                     problems
--print-traffic                      Display sent and read HTTP traffic
-C, --call-home                      Contact the youtube-dl server for
                                     debugging
--no-call-home                       Do NOT contact the youtube-dl server
                                     for debugging

回避策:

--encoding ENCODING                  Force the specified encoding
                                     (experimental)
--no-check-certificate               Suppress HTTPS certificate validation
--prefer-insecure                    Use an unencrypted connection to
                                     retrieve information about the video.
                                     (Currently supported only for YouTube)
--user-agent UA                      Specify a custom user agent
--referer URL                        Specify a custom referer, use if the
                                     video access is restricted to one
                                     domain
--add-header FIELD:VALUE             Specify a custom HTTP header and its
                                     value, separated by a colon ':'. You
                                     can use this option multiple times
--bidi-workaround                    Work around terminals that lack
                                     bidirectional text support. Requires
                                     bidiv or fribidi executable in PATH
--sleep-interval SECONDS             Number of seconds to sleep before each
                                     download when used alone or a lower
                                     bound of a range for randomized sleep
                                     before each download (minimum possible
                                     number of seconds to sleep) when used
                                     along with --max-sleep-interval.
--max-sleep-interval SECONDS         Upper bound of a range for randomized
                                     sleep before each download (maximum
                                     possible number of seconds to sleep).
                                     Must only be used along with --min-
                                     sleep-interval.

ビデオ形式オプション:

-f, --format FORMAT                  Video format code, see the "FORMAT
                                     SELECTION" for all the info
--all-formats                        Download all available video formats
--prefer-free-formats                Prefer free video formats unless a
                                     specific one is requested
-F, --list-formats                   List all available formats of requested
                                     videos
--youtube-skip-dash-manifest         Do not download the DASH manifests and
                                     related data on YouTube videos
--merge-output-format FORMAT         If a merge is required (e.g.
                                     bestvideo+bestaudio), output to given
                                     container format. One of mkv, mp4, ogg,
                                     webm, flv. Ignored if no merge is
                                     required

字幕オプション:

--write-sub                          Write subtitle file
--write-auto-sub                     Write automatically generated subtitle
                                     file (YouTube only)
--all-subs                           Download all the available subtitles of
                                     the video
--list-subs                          List all available subtitles for the
                                     video
--sub-format FORMAT                  Subtitle format, accepts formats
                                     preference, for example: "srt" or
                                     "ass/srt/best"
--sub-lang LANGS                     Languages of the subtitles to download
                                     (optional) separated by commas, use
                                     --list-subs for available language tags

認証オプション:

-u, --username USERNAME              Login with this account ID
-p, --password PASSWORD              Account password. If this option is
                                     left out, youtube-dl will ask
                                     interactively.
-2, --twofactor TWOFACTOR            Two-factor authentication code
-n, --netrc                          Use .netrc authentication data
--video-password PASSWORD            Video password (vimeo, youku)

アドビ パスのオプション:

--ap-mso MSO                         Adobe Pass multiple-system operator (TV
                                     provider) identifier, use --ap-list-mso
                                     for a list of available MSOs
--ap-username USERNAME               Multiple-system operator account login
--ap-password PASSWORD               Multiple-system operator account
                                     password. If this option is left out,
                                     youtube-dl will ask interactively.
--ap-list-mso                        List all supported multiple-system
                                     operators

後処理オプション:

-x, --extract-audio                  Convert video files to audio-only files
                                     (requires ffmpeg/avconv and
                                     ffprobe/avprobe)
--audio-format FORMAT                Specify audio format: "best", "aac",
                                     "flac", "mp3", "m4a", "opus", "vorbis",
                                     or "wav"; "best" by default; No effect
                                     without -x
--audio-quality QUALITY              Specify ffmpeg/avconv audio quality,
                                     insert a value between 0 (better) and 9
                                     (worse) for VBR or a specific bitrate
                                     like 128K (default 5)
--recode-video FORMAT                Encode the video to another format if
                                     necessary (currently supported:
                                     mp4|flv|ogg|webm|mkv|avi)
--postprocessor-args ARGS            Give these arguments to the
                                     postprocessor
-k, --keep-video                     Keep the video file on disk after the
                                     post-processing; the video is erased by
                                     default
--no-post-overwrites                 Do not overwrite post-processed files;
                                     the post-processed files are
                                     overwritten by default
--embed-subs                         Embed subtitles in the video (only for
                                     mp4, webm and mkv videos)
--embed-thumbnail                    Embed thumbnail in the audio as cover
                                     art
--add-metadata                       Write metadata to the video file
--metadata-from-title FORMAT         Parse additional metadata like song
                                     title / artist from the video title.
                                     The format syntax is the same as
                                     --output. Regular expression with named
                                     capture groups may also be used. The
                                     parsed parameters replace existing
                                     values. Example: --metadata-from-title
                                     "%(artist)s - %(title)s" matches a
                                     title like "Coldplay - Paradise".
                                     Example (regex): --metadata-from-title
                                     "(?P<artist>.+?) - (?P<title>.+)"
--xattrs                             Write metadata to the video file's
                                     xattrs (using dublin core and xdg
                                     standards)
--fixup POLICY                       Automatically correct known faults of
                                     the file. One of never (do nothing),
                                     warn (only emit a warning),
                                     detect_or_warn (the default; fix file
                                     if we can, warn otherwise)
--prefer-avconv                      Prefer avconv over ffmpeg for running
                                     the postprocessors
--prefer-ffmpeg                      Prefer ffmpeg over avconv for running
                                     the postprocessors (default)
--ffmpeg-location PATH               Location of the ffmpeg/avconv binary;
                                     either the path to the binary or its
                                     containing directory.
--exec CMD                           Execute a command on the file after
                                     downloading and post-processing,
                                     similar to find's -exec syntax.
                                     Example: --exec 'adb push {}
                                     /sdcard/Music/ && rm {}'
--convert-subs FORMAT                Convert the subtitles to other format
                                     (currently supported: srt|ass|vtt|lrc)

構成

サポートされているコマンド ライン オプションを構成ファイルに配置することで、youtube-dl を構成できます。Linux および macOS では、システム全体の構成ファイルは に

/etc/youtube-dl.conf
あり、ユーザー全体の構成ファイルは にあります
~/.config/youtube-dl/config
。Windows では、ユーザー全体の構成ファイルの場所は
%APPDATA%\youtube-dl\config.txt
または
C:\Users\<user name>\youtube-dl.conf
です。デフォルトでは構成ファイルが存在しない可能性があるため、自分で作成する必要がある場合があることに注意してください。

たとえば、次の構成ファイルを使用すると、youtube-dl は常に音声を抽出し、mtime をコピーせず、プロキシを使用

Movies
し、ホーム ディレクトリのディレクトリの下にすべての動画を保存します。

# Lines starting with # are comments

# Always extract audio
-x

# Do not copy the mtime
--no-mtime

# Use this proxy
--proxy 127.0.0.1:3128

# Save all videos under Movies directory in your home directory
-o ~/Movies/%(title)s.%(ext)s

構成ファイルのオプションは、通常のコマンド ライン呼び出しで使用されるスイッチとまったく同じオプションであるため、orの後に空白があってはならないことに注意してください。

-
--
-o
--proxy
- o
-- proxy

--ignore-config
特定の youtube-dl 実行の構成ファイルを無効にする場合に使用できます。

--config-location
特定の youtube-dl 実行にカスタム構成ファイルを使用する場合にも使用できます。

.netrc
ファイルによる認証

youtube-dl の実行ごとにコマンド ライン引数として資格情報を渡さないようにし、シェル コマンド履歴でプレーン テキストのパスワードを追跡しないようにするために、認証をサポートするエクストラクタの自動資格情報ストレージを構成することもできます (および でログインとパスワードを提供することにより

--username
) 。
--password
. これは、エクストラクタごとに
.netrc
ファイル
を使用して実現できます。そのためには、
.netrc
ファイルを作成し、
$HOME
読み取り/書き込み権限を自分だけに制限する必要があります。

touch $HOME/.netrc
chmod a-rwx,u+rw $HOME/.netrc

その後、次の形式でエクストラクタの資格情報を追加できます。ここで、エクストラクタは小文字のエクストラクタの名前です。

machine <extractor> login <login> password <password>

例えば:

machine youtube login myaccount@gmail.com password my_youtube_password
machine twitch login my_twitch_account_name password my_twitch_password

ファイルで認証を有効にするには、youtube-dl に

.netrc
渡すか、構成ファイルに配置する必要があります。
--netrc

%HOME%
Windows では、環境変数を手動で設定する必要がある場合もあります。例えば:

set HOME=%USERPROFILE%

出力テンプレート

この

-o
オプションにより、ユーザーは出力ファイル名のテンプレートを指定できます。

tl;dr: 例に移動します

のように、単一のファイルをダウンロードするときにテンプレート引数を設定しないのが基本的な使用方法です

youtube-dl -o funny_video.flv "https://some/video"
。ただし、各ビデオをダウンロードするときに置き換えられる特別なシーケンスが含まれている場合があります。特別なシーケンスは、 Python 文字列の書式設定操作に従って書式設定できます。たとえば、
%(NAME)s
または
%(NAME)05d
. 明確にするために、これはパーセント記号の後に括弧で囲まれた名前が続き、その後に書式設定操作が続きます。許可される名前とシーケンス タイプは次のとおりです。

  • id
    (文字列): 動画識別子
  • title
    (文字列): 動画のタイトル
  • url
    (文字列): 動画の URL
  • ext
    (文字列): ビデオのファイル名拡張子
  • alt_title
    (文字列): 動画のサブタイトル
  • display_id
    (文字列): 動画の代替識別子
  • uploader
    (文字列): 動画アップローダーの氏名
  • license
    (文字列): ビデオがライセンスされているライセンス名
  • creator
    (文字列): 動画の作成者
  • release_date
    (文字列): 動画が公開された日付 (YYYYMMDD)
  • timestamp
    (数値): ビデオが利用可能になった瞬間の UNIX タイムスタンプ
  • upload_date
    (文字列): 動画のアップロード日 (YYYYMMDD)
  • uploader_id
    (文字列): 動画アップローダーのニックネームまたは ID
  • channel
    (文字列): 動画がアップロードされたチャンネルの完全な名前
  • channel_id
    (文字列): チャンネルの ID
  • location
    (文字列): ビデオが撮影された物理的な場所
  • duration
    (数値): 動画の長さ (秒単位)
  • view_count
    (数値): プラットフォームで動画を視聴したユーザー数
  • like_count
    (数値): 動画の肯定的な評価の数
  • dislike_count
    (数値): 動画の否定的な評価の数
  • repost_count
    (数値): 動画の再投稿数
  • average_rating
    (数値): ユーザーによる平均評価。使用される尺度は Web ページによって異なります。
  • comment_count
    (数値): 動画のコメント数
  • age_limit
    (数値): 動画の年齢制限 (年)
  • is_live
    (boolean): この動画がライブ ストリームか固定長の動画か
  • start_time
    (数値): URL で指定された、再生を開始する時間 (秒単位)
  • end_time
    (数値): URL で指定された、再生が終了するまでの時間 (秒)
  • format
    (文字列): 人間が読める形式の説明
  • format_id
    (string): で指定された書式コード
    --format
  • format_note
    (文字列): 形式に関する追加情報
  • width
    (数値): ビデオの幅
  • height
    (数値): 動画の高さ
  • resolution
    (文字列): 幅と高さのテキストによる説明
  • tbr
    (数値): オーディオとビデオの平均ビットレート (KBit/s)
  • abr
    (数値): 平均オーディオ ビットレート (KBit/s)
  • acodec
    (文字列): 使用中のオーディオ コーデックの名前
  • asr
    (数値): ヘルツ単位のオーディオ サンプリング レート
  • vbr
    (数値): 平均ビデオ ビットレート (KBit/s)
  • fps
    (数値): フレームレート
  • vcodec
    (文字列): 使用中のビデオ コーデックの名前
  • container
    (文字列): コンテナ形式の名前
  • filesize
    (数値): バイト数 (事前にわかっている場合)
  • filesize_approx
    (数値): バイト数の見積もり
  • protocol
    (文字列): 実際のダウンロードに使用されるプロトコル
  • extractor
    (文字列): エクストラクタの名前
  • extractor_key
    (文字列): エクストラクタのキー名
  • epoch
    (数値): ファイル作成時の Unix エポック
  • autonumber
    (数値): ダウンロードごとに増加する数値。
    --autonumber-start
  • playlist
    (文字列): 動画を含むプレイリストの名前または ID
  • playlist_index
    (数値): プレイリストの全長に応じて先行ゼロが埋め込まれたプレイリスト内のビデオのインデックス
  • playlist_id
    (文字列): プレイリスト識別子
  • playlist_title
    (文字列): プレイリストのタイトル
  • playlist_uploader
    (文字列): プレイリスト アップローダーのフル ネーム
  • playlist_uploader_id
    (文字列): プレイリスト アップローダーのニックネームまたは ID

論理的なチャプターまたはセクションに属するビデオで使用できます。

  • chapter
    (文字列): ビデオが属するチャプターの名前またはタイトル
  • chapter_number
    (数値): ビデオが属するチャプターの番号
  • chapter_id
    (文字列): ビデオが属するチャプターの ID

一部のシリーズまたは番組のエピソードであるビデオで利用可能:

  • series
    (文字列): ビデオ エピソードが属するシリーズまたは番組のタイトル
  • season
    (文字列): ビデオ エピソードが属するシーズンのタイトル
  • season_number
    (数値): ビデオ エピソードが属するシーズンの番号
  • season_id
    (文字列): ビデオ エピソードが属するシーズンの ID
  • episode
    (文字列): ビデオ エピソードのタイトル
  • episode_number
    (数値): シーズン内のビデオ エピソードの数
  • episode_id
    (文字列): 動画エピソードの ID

トラックまたは音楽アルバムの一部であるメディアで利用可能:

  • track
    (string): トラックのタイトル
  • track_number
    (数値): アルバムまたはディスク内のトラックの番号
  • track_id
    (文字列): トラックの ID
  • artist
    (文字列): トラックのアーティスト
  • genre
    (string): トラックのジャンル
  • album
    (文字列): トラックが属するアルバムのタイトル
  • album_type
    (string): アルバムの種類
  • album_artist
    (文字列): アルバムに登場するすべてのアーティストのリスト
  • disc_number
    (数値): トラックが属するディスクまたはその他の物理メディアの番号
  • release_year
    (数値): アルバムがリリースされた年(YYYY)

前述の各シーケンスは、出力テンプレートで参照されると、シーケンス名に対応する実際の値に置き換えられます。一部のシーケンスは、特定のエクストラクタによって取得されたメタデータに依存するため、存在が保証されないことに注意してください。

--output-na-placeholder
このようなシーケンスは、 (
NA
デフォルトで)で提供されるプレースホルダー値に置き換えられます。

たとえば、 titleと id

-o %(title)s-%(id)s.%(ext)s
を持つ mp4 ビデオの場合、現在のディレクトリにファイルが作成されます。
youtube-dl test video
BaW_jenozKcj
youtube-dl test video-BaW_jenozKcj.mp4

数値シーケンスの場合、数値関連の書式設定を使用できます。たとえば、 の

%(view_count)05d
ように、最大​​ 5 文字のゼロで埋められたビュー カウントを持つ文字列になります
00042

出力テンプレートには、任意の階層パスを含めることもできます。たとえば

-o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s'
、このパス テンプレートに対応するディレクトリに各ビデオをダウンロードします。不足しているディレクトリは自動的に作成されます。

出力テンプレートでパーセント リテラルを使用するには、 を使用します

%%
。stdout に出力するには、 を使用します
-o -

現在のデフォルトのテンプレートは

%(title)s-%(id)s.%(ext)s
です。

場合によっては、ダウンロードしたファイル名を Windows システムに転送したり、8 ビットの安全でないチャネルを介してファイル名を転送したりする場合など、中、スペース、& などの特殊文字が必要ないことがあります。このような場合は、フラグを追加し

--restrict-filenames
て短いタイトルを取得します。

出力テンプレートと Windows バッチ ファイル

Windows バッチ ファイル内で出力テンプレートを使用している場合は、単純なパーセント文字 (

%
) を 2 倍にしてエスケープする
-o "%(title)s-%(id)s.%(ext)s"
必要があるため、
-o "%%(title)s-%%(id)s.%%(ext)s"
. ただし
%
、単純な文字ではない 's には触れないでください。たとえば、展開用の環境変数はそのままにしておく必要があります
-o "C:\%HOMEPATH%\Desktop\%%(title)s.%%(ext)s"

出力テンプレートの例

Windows では、一重引用符ではなく二重引用符を使用する必要がある場合があることに注意してください。

$ youtube-dl --get-filename -o '%(title)s.%(ext)s' BaW_jenozKc
youtube-dl test video ''_ä↭𝕐.mp4    # All kinds of weird characters

$ youtube-dl --get-filename -o '%(title)s.%(ext)s' BaW_jenozKc --restrict-filenames
youtube-dl_test_video_.mp4          # A simple file name

# Download YouTube playlist videos in separate directory indexed by video order in a playlist
$ youtube-dl -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re

# Download all playlists of YouTube channel/user keeping each playlist in separate directory:
$ youtube-dl -o '%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/user/TheLinuxFoundation/playlists

# Download Udemy course keeping each chapter in separate directory under MyVideos directory in your home
$ youtube-dl -u user -p password -o '~/MyVideos/%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s' https://www.udemy.com/java-tutorial/

# Download entire series season keeping each series and each season in separate directory under C:/MyVideos
$ youtube-dl -o "C:/MyVideos/%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s" https://videomore.ru/kino_v_detalayah/5_sezon/367617

# Stream the video being downloaded to stdout
$ youtube-dl -o - BaW_jenozKc

フォーマットの選択

デフォルトでは、youtube-dl は利用可能な最高の品質をダウンロードしようとします。つまり、特別なオプションを渡す必要がない最高の品質が必要な場合、youtube-dl はデフォルトでそれを推測します。

ただし、接続が遅い場合や断続的な場合など、別の形式でダウンロードしたい場合があります。これを達成するための重要なメカニズムは、いわゆるフォーマット選択です。これに基づいて、目的のフォーマットを明示的に指定したり、いくつかの基準に基づいてフォーマットを選択したり、優先順位を設定したりできます。

形式を選択するための一般的な構文は

--format FORMAT
、以下のとおりです
-f FORMAT
。ここ
FORMAT
で、 はセレクター式、つまり、ダウンロードする形式または形式を説明する式です。

tl;dr: 例に移動します

最も単純なケースは、特定の形式を要求する場合です。たとえば、

-f 22
形式コードが 22 の形式をダウンロードできます。
--list-formats
またはを使用して、特定のビデオで使用可能な形式コードのリストを取得できます
-F
。これらの形式コードはエクストラクタ固有であることに注意してください。

ファイル拡張子 (現在

3gp
aac
flv
m4a
mp3
mp4
、がサポートされています) を使用して
ogg
、単一のファイルとして提供される特定のファイル拡張子の最高品質の形式をダウンロードすることもできます。たとえば、拡張子が として提供される最高品質の形式をダウンロードします単一のファイル。
wav
webm
-f webm
webm

特別な名前を使用して、特定のエッジ ケース フォーマットを選択することもできます。

  • best
    : ビデオとオーディオを含む 1 つのファイルで表される最高品質の形式を選択します。
  • worst
    : ビデオとオーディオを含む 1 つのファイルで表される最低品質の形式を選択します。
  • bestvideo
    : 最高品質のビデオのみの形式 (DASH ビデオなど) を選択します。利用できない場合があります。
  • worstvideo
    : 最低品質のビデオのみの形式を選択します。利用できない場合があります。
  • bestaudio
    : 最高品質のオーディオのみの形式を選択します。利用できない場合があります。
  • worstaudio
    : 最低品質のオーディオのみのフォーマットを選択します。利用できない場合があります。

たとえば、最低品質のビデオのみの形式をダウンロードするには、

-f worstvideo
.

複数のビデオをダウンロードしたいが、同じ形式が利用できない場合は、スラッシュを使用して優先順位を指定できます。スラッシュは左結合であることに注意してください。つまり、左側の形式が優先されます。たとえば、

-f 22/17/18
利用可能な場合は形式 22 をダウンロードし、そうでない場合は形式 17 をダウンロードし、そうでない場合は形式 18 をダウンロードします。ダウンロードできる適切なフォーマットがないと文句を言うでしょう。

同じビデオの複数のフォーマットをダウンロードしたい場合は、カンマを区切りとして使用します。たとえば、

-f 22,17,18
これら 3 つのフォーマットがすべて利用可能であればダウンロードされます。または、優先順位機能と組み合わせたより洗練された例:
-f 136/137/mp4/bestvideo,140/m4a/bestaudio
.

-f "best[height=720]"
(または)のように条件を括弧で囲んで、ビデオ形式をフィルタリングすることもできます
-f "[filesize>10M]"

次の数値メタ フィールドは、比較、、、、、

<
(等しい)、
<=
(等しくない)
>
で使用できます。
>=
=
!=

  • filesize
    : バイト数 (事前にわかっている場合)
  • width
    : ビデオの幅 (わかっている場合)
  • height
    : 動画の高さ (わかっている場合)
  • tbr
    : オーディオとビデオの平均ビットレート (KBit/s)
  • abr
    : 平均オーディオ ビットレート (KBit/s)
  • vbr
    : 平均ビデオ ビットレート (KBit/s)
  • asr
    : オーディオ サンプリング レート (ヘルツ)
  • fps
    : フレームレート

また、比較

=
(等しい)、
^=
(開始)、
$=
(終了)、
*=
(含む) および次の文字列メタ フィールドのフィルタリング作業:

  • ext
    : ファイル拡張子
  • acodec
    : 使用しているオーディオ コーデックの名前
  • vcodec
    : 使用しているビデオ コーデックの名前
  • container
    : コンテナ形式の名前
  • protocol
    : 実際のダウンロードに使用されるプロトコル、小文字 (
    http
    https
    rtsp
    rtmp
    rtmpe
    mms
    f4m
    ism
    、または)
    http_dash_segments
    m3u8
    m3u8_native
  • format_id
    : フォーマットの簡単な説明
  • language
    : 言語コード

!
反対の比較を生成するために、任意の文字列比較の前に否定を付けることができます (例:
!*=
(含まない))。

これは、特定のエクストラクタによって取得されたメタデータ、つまりビデオ ホスタによって提供されたメタデータにのみ依存するため、前述のメタ フィールドのいずれもが存在することが保証されていないことに注意してください。

?
演算子の後に疑問符 ( ) を付けない限り、値が不明な形式は除外されます。フォーマット フィルターを組み合わせることができるため
-f "[height <=? 720][tbr>500]"
、少なくとも 500 KBit/s のビットレートで最大 720p のビデオ (または高さが不明なビデオ) を選択します。

-f <video-format>+<audio-format>
(ffmpeg または avconv がインストールされている必要があります)を使用して、2 つの形式のビデオとオーディオを 1 つのファイルにマージできます
-f bestvideo+bestaudio

形式セレクターは、括弧を使用してグループ化することもできます。たとえば、高さが 480 未満の最適な mp4 および webm 形式をダウンロードする場合は、

-f '(mp4,webm)[height<480]'
.

2015 年 4 月末およびバージョン 2015.04.26 以降、youtube-dl は

-f bestvideo+bestaudio/best
デフォルトのフォーマット選択として を使用します ( #5447#5456を参照)。ffmpeg または avconv がインストールされている場合、ダウンロード
bestvideo
して
bestaudio
個別に多重化し、1 つのファイルにまとめて、全体的に最高の品質を提供します。それ以外の場合はフォールバックし
best
、単一のファイルとして提供される利用可能な最高の品質をダウンロードします。
best
は、オーディオとビデオを 2 つの異なるファイルで提供していないため、YouTube 以外のビデオにも必要です。一部の DASH 形式のみをダウンロードする場合 (たとえば、1080p を超える解像度のビデオを取得することに関心がない場合)、追加できます。
-f bestvideo[height<=?1080]+bestaudio/best
構成ファイルに。youtube-dl を使用してストリーミングする
stdout
(そしてメディア プレーヤーにパイプする可能性が最も高い) 場合、つまり、明示的に出力テンプレートを として指定する場合
-o -
、youtube-dl は引き続き
-f best
形式選択を使用して、プレーヤーへのコンテンツ配信をすぐに開始することに注意してください。ダウンロードされて多重
bestvideo
化されるまで待たないでください。
bestaudio

古い形式の選択動作 (youtube-dl 2015.04.26 より前) を維持したい場合、つまり、利用可能な最高品質のメディアを単一のファイルとしてダウンロードしたい場合は、選択を で明示的に指定する必要があります

-f best
。youtube-dl を実行するたびに入力しなくても済むように、構成ファイルに追加することをお勧めします。

フォーマット選択例

Windows では、一重引用符ではなく二重引用符を使用する必要がある場合があることに注意してください。

# Download best mp4 format available or any other best if no mp4 available
$ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'

# Download best format available but no better than 480p
$ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]'

# Download best video only format but no bigger than 50 MB
$ youtube-dl -f 'best[filesize<50M]'

# Download best format available via direct link over HTTP/HTTPS protocol
$ youtube-dl -f '(bestvideo+bestaudio/best)[protocol^=http]'

# Download the best video format and the best audio format without merging them
$ youtube-dl -f 'bestvideo,bestaudio' -o '%(title)s.f%(format_id)s.%(ext)s'

最後の例では、bestvideo と bestaudio が同じファイル名を持つ可能性があるため、出力テンプレートが推奨されることに注意してください。

ビデオの選択

またはのオプション

--date
を使用して、アップロード日で動画をフィルタリングできます。次の 2 つの形式の日付を受け入れます。
--datebefore
--dateafter

  • 絶対日付: 形式の日付
    YYYYMMDD
  • 相対日付: 形式の日付
    (now|today)[+-][0-9](day|week|month|year)(s)?

例:

# Download only the videos uploaded in the last 6 months
$ youtube-dl --dateafter now-6months

# Download only the videos uploaded on January 1, 1970
$ youtube-dl --date 19700101

$ # Download only the videos uploaded in the 200x decade
$ youtube-dl --dateafter 20000101 --datebefore 20091231

よくある質問

youtube-dl を更新するにはどうすればよいですか?

手動のインストール手順に従っている場合は、単純に実行できます

youtube-dl -U
(または、Linux の場合は
sudo youtube-dl -U
)。

pip を使用したことがある場合は、単純な

sudo pip install -U youtube-dl
更新で十分です。

apt-getyumなどのパッケージ マネージャーを使用して youtube-dl をインストールした場合は、標準のシステム更新メカニズムを使用して更新します。多くの場合、配布パッケージは古くなっていることに注意してください。経験則として、youtube-dl は少なくとも月に 1 回、多くの場合毎週または毎日リリースされます。現在のバージョンを確認するには、https://yt-dl.orgにアクセスしてください。残念ながら、ディストリビューションが本当に古いバージョンを提供している場合、youtube-dl 開発者ができることは何もありません。ディストリビューションのバグトラッカーまたはサポート フォーラムで苦情を申し立てることができます (またそうすべきです)。

最後の手段として、パッケージ マネージャーによってインストールされたバージョンをアンインストールし、手動インストール手順に従うこともできます。そのためには、次のような行でディストリビューションのパッケージを削除します

sudo apt-get remove -y youtube-dl

その後、手動のインストール手順に従ってください

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl
hash -r

繰り返しますが、それ以降は で更新できます

sudo youtube-dl -U

Windows で youtube-dl の起動が非常に遅い

youtube-dl.exe
Windows Defender 設定でファイルの除外を追加します。

Unable to extract OpenGraph title
YouTube プレイリストでエラーが発生する

YouTube は 2014 年 3 月以降にプレイリストの形式を変更したため、すべての YouTube ビデオをダウンロードするには、少なくとも youtube-dl 2014.07.25 が必要です。

パッケージ マネージャー、pip、setup.py、または tarball を使用して youtube-dl をインストールしている場合は、それを使用して更新してください。Ubuntu パッケージはもう更新されていないように見えることに注意してください。私たちはUbuntuと提携していないので、できることはほとんどありません。Ubuntu のパッケージ担当者に気軽にバグを報告てください。彼らがしなければならないことは、パッケージを少し新しいバージョンに更新することだけです。更新方法については、上記を参照してください。

出力テンプレートを使用しようとするとエラーが発生します:
error: using output template conflicts with using title, video ID or auto number

-o
これらのオプション
-t
--title
--id
-A
または
--auto-number
コマンド ラインまたは構成ファイルで設定されたものを使用していないことを確認してください。後者がある場合は削除します。

常にパスする必要があり
-citw
ますか?

デフォルトでは、youtube-dl は最適なオプションを持つように意図されています (ちなみに、これらが異なるべきであるという説得力のあるケースがある場合は、それを説明する問題を提出してください)。したがって、Web ページから長いオプション文字列をコピーすることは不要であり、場合によっては有害です。特に、

-citw
定期的に役立つ唯一のオプションは です
-i

オプションを元に戻していただけます
-b
か?

この質問をするほとんどの人は、youtube-dl がデフォルトで、YouTube によって報告された利用可能な最高品質 (場合によっては 1080p または 720p) をダウンロードするようになっていることに気づいていないため、この

-b
オプションはもう必要ありません。一部の特定の動画については、関心のある特定の高品質形式で利用できると YouTube が報告していない可能性があります。その場合は、
-f
オプションでリクエストするだけで、youtube-dl がダウンロードを試みます。

ビデオをダウンロードしようとすると、HTTP エラー 402 が発生します。これは何ですか?

YouTube では、ダウンロードしすぎると CAPTCHA テストに合格する必要があるようです。CAPTCHA を解決できる方法を提供することを検討していますが、現時点では、Web ブラウザで YouTube の URL を指定し、CAPTCHA を解決して、youtube-dl を再起動するのが最善の方法です。

他のプログラムが必要ですか?

youtube-dl は、ほとんどのサイトで単独で問題なく動作します。ただし、ビデオ/オーディオを変換する場合は、 avconvまたはffmpegが必要です。一部のサイト (特に YouTube など) では、音声なしで高品質の形式でビデオを取得できます。youtube-dl は avconv/ffmpeg が存在するかどうかを検出し、最適なオプションを自動的に選択します。

RTMP プロトコル経由でストリーミングされたビデオまたはビデオ形式は、 rtmpdumpがインストールされている場合にのみダウンロードできます。MMS および RTSP ビデオをダウンロードするには、mplayerまたはmpvをインストールする必要があります。

動画をダウンロードしましたが、どうすれば再生できますか?

ビデオが完全にダウンロードされたら、 mpvvlcmplayerなどのビデオ プレーヤーを使用します。

で動画の URL を抽出しました
-g
が、別のマシンや Web ブラウザで再生できません。

それはサービスに大きく依存します。多くの場合、ビデオのリクエスト (ダウンロード/再生) は、同じ IP アドレスから、同じ Cookie や HTTP ヘッダーを使用して送信する必要があります。

--cookies
必要な Cookie をファイルに書き込むオプションを使用し、そのファイルから Cookie を読み取るようにダウンローダーに通知します。一部のサイトでは、共通のユーザー エージェントを使用する必要もあります。これ
--dump-user-agent
を使用して、youtube-dl で使用されているものを確認してください。で取得した JSON 出力から、必要な Cookie と HTTP ヘッダーを取得することもできます
--dump-json

IPv6 を使用すると有益な場合があります。場合によっては、制限が IPv4 にのみ適用されます。一部のサービス (場合によっては動画のサブセットのみ) は、IP アドレス、Cookie、またはユーザー エージェントによって動画 URL を制限しませんが、これらはルールではなく例外です。

RTMP など、一部の URL プロトコルはそのままではブラウザでサポートされないことに注意してください。を使用している場合は

-g
、独自のダウンローダーもこれらをサポートしている必要があります。

youtube-dl を実行していないマシンでビデオを再生したい場合は、youtube-dl を実行しているマシンからビデオ コンテンツを中継できます。を使用

-o -
して、youtube-dl がビデオを stdout にストリーミングできるようにするか、プレーヤーが youtube-dl によって書き込まれたファイルを順番にダウンロードできるようにすることができます。

エラー: ビデオ情報に fmt_url_map または conn 情報が見つかりません

YouTube は 2011 年 7 月に、古いバージョンの youtube-dl ではサポートされていない新しい動画情報形式に切り替えました。youtube-dl を更新する方法については、上記を参照してください。

エラー: ビデオをダウンロードできません

YouTube では、2012 年 9 月以降、古いバージョンの youtube-dl ではサポートされていない追加の署名が必要です。youtube-dl を更新する方法については、上記を参照してください。

動画の URL にアンパサンドが含まれていて、奇妙な出力が表示される
[1] 2839
、または
'v' is not recognized as an internal or external command

それは実際にシェルからの出力です。アンパサンドは特殊なシェル文字の 1 つであるため、シェルによって解釈され、URL 全体を youtube-dl に渡すことができなくなります。シェルがアンパサンド (またはその他の特殊文字) を解釈できないようにするには、URL 全体を引用符で囲むか、バックスラッシュでエスケープする必要があります (どちらの方法が機能するかは、シェルによって異なります)。

たとえば、URL がhttps://www.youtube.com/watch?t=4&v=BaW_jenozKcの場合、次のコマンドで終了する必要があります。

youtube-dl 'https://www.youtube.com/watch?t=4&v=BaW_jenozKc'

また

youtube-dl https://www.youtube.com/watch?t=4\&v=BaW_jenozKc

Windows の場合、二重引用符を使用する必要があります。

youtube-dl "https://www.youtube.com/watch?t=4&v=BaW_jenozKc"

ExtractorError: JS 関数 u'OF' が見つかりませんでした

2015 年 2 月、新しい YouTube プレーヤーの文字列に、古いバージョンの youtube-dl で誤って解釈される文字シーケンスが含まれていました。youtube-dl を更新する方法については、上記を参照してください。

HTTP エラー 429: 要求が多すぎます または 402: 支払いが必要です

これらの 2 つのエラー コードは、使いすぎたためにサービスが IP アドレスをブロックしていることを示しています。通常、これはCAPTCHAを解決した後に再びアクセスできることを意味するソフトブロックです. ブラウザを開いて、サービスが提案する CAPTCHA を解決するだけで、その後Cookieを youtube-dl に渡します。マシンに複数の外部 IP がある場合は、CAPTCHA を使用して解決するために使用したのとまったく同じ IP も渡す必要があることに注意してください

--source-address
User-Agent
また、ブラウザの HTTP ヘッダーを で渡す必要がある場合もあります
--user-agent

そうでない場合 (サービスによって解決するように提案された CAPTCHA がない場合)、サービスに連絡して、IP アドレスのブロックを解除するように依頼するか、ホワイトリストに登録された IP アドレスを既に取得している場合は、

--proxy
または
--source-address
オプション
を使用して別のアドレスを選択します。 IPアドレス。

SyntaxError: 非 ASCII 文字

エラー

File "youtube-dl", line 2
SyntaxError: Non-ASCII character '\x93' ...

古いバージョンの Python を使用していることを意味します。Python 2.6 または 2.7 に更新してください。

このバイナリファイルは何ですか? コードはどこに行ったのですか?

2012 年 6 月 ( #342 ) youtube-dl は実行可能な zip ファイルとしてパックされているため、単純に解凍するか (

youtube-dl.zip
一部のシステムでは最初に名前を変更する必要がある場合があります)、上記のように git リポジトリを複製します。コードを変更した場合は、ファイルを実行することで実行でき
__main__.py
ます。実行可能ファイルを再コンパイルするには、
make youtube-dl
.

The exe throws an error due to missing
MSVCR100.dll

To run the exe you need to install first the Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package (x86).

On Windows, how should I set up ffmpeg and youtube-dl? Where should I put the exe files?

If you put youtube-dl and ffmpeg in the same directory that you're running the command from, it will work, but that's rather cumbersome.

To make a different directory work - either for ffmpeg, or for youtube-dl, or for both - simply create the directory (say,

C:\bin
, or
C:\Users\<User name>\bin
), put all the executables directly in there, and then set your PATH environment variable to include that directory.

それ以降、シェルを再起動すると、現在のディレクトリに関係なく、

youtube-dl
orと入力するだけで youtube-dl と ffmpeg の両方にアクセスできるようになります (そして youtube-dl は ffmpeg を見つけることができます) 。
ffmpeg

ダウンロードを特定のフォルダに入れるにはどうすればよいですか?

などの出力テンプレート

-o
を指定するには、 を使用します。すべてのダウンロードでこれが必要な場合は、オプションを構成ファイルに入れます。
-o "/home/user/videos/%(title)s-%(id)s.%(ext)s"

で始まるビデオをダウンロードするにはどうすればよい
-
ですか?

https://www.youtube.com/watch?v=
ID をオプションの前に追加するか、次のように区切ります
--

youtube-dl -- -wNyEUrxzFU
youtube-dl "https://www.youtube.com/watch?v=-wNyEUrxzFU"

Cookie を youtube-dl に渡すにはどうすればよいですか?

--cookies
などのオプションを使用します
--cookies /path/to/cookies/file.txt

ブラウザーから Cookie を抽出するには、Cookie をエクスポートするための準拠するブラウザー拡張機能を使用します。たとえば、cookies.txt (Chrome の場合) またはcookies.txt (Firefox の場合) を取得します。

Cookie ファイルは Mozilla/Netscape 形式である必要があり、Cookie ファイルの最初の行は または のいずれかでなければならないことに注意して

# HTTP Cookie File
ください
# Netscape HTTP Cookie File
Cookie ファイルの改行形式が正しいことを確認し、必要に応じて OS に対応するように改行を変換します。つまり、Windows の場合は
CRLF
( )、Unix および Unix 系システム (Linux、macOS など) の場合は ( ) です。when usingは無効な改行形式の良い兆候です。
\r\n
LF
\n
HTTP Error 400: Bad Request
--cookies

Cookie を youtube-dl に渡すことは、特定のエクストラクタがログインを明示的に実装していない場合にログインを回避する良い方法です。もう 1 つのユース ケースは、CAPTCHAを回避することです。一部の Web サイトでは、アクセスするために特定のケース (YouTube、CloudFlare など) を解決する必要があります。

メディア プレーヤーに直接ストリーミングするにはどうすればよいですか?

最初に youtube-dl にメディアを stdout にストリーミングするように指示する必要があり

-o -
ます。また、メディア プレーヤーに stdin から読み取り (ストリーミングのためにこれが可能でなければなりません)、前者から後者にパイプするように指示する必要があります。たとえば、vlcへのストリーミングは次の方法で実現できます。

youtube-dl -o - "https://www.youtube.com/watch?v=BaW_jenozKcj" | vlc -

プレイリストから新しい動画だけをダウンロードするにはどうすればよいですか?

ダウンロードアーカイブ機能を使用します。この機能を使用すると、最初に完全なプレイリストをダウンロードして

--download-archive /path/to/download/archive/file.txt
、すべての動画の識別子を特別なファイルに記録する必要があります。その後同じものを実行すると、
--download-archive
新しいビデオのみがダウンロードされ、以前にダウンロードされたすべてのビデオがスキップされます。成功したダウンロードのみがファイルに記録されることに注意してください。

たとえば、最初は、

youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

完全なプレイリストをダウンロードし

PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re
てファイルを作成します
archive.txt
。後続の各実行では、新しいビデオがある場合にのみダウンロードされます。

youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

構成に追加
--hls-prefer-native
する必要がありますか?

youtube-dl が HLS ビデオを検出すると、組み込みのダウンローダーまたは ffmpeg を使用してダウンロードできます。多くの HLS ストリームはわずかに無効であり、ffmpeg/youtube-dl はそれぞれいくつかの無効なケースを他のケースよりも適切に処理するため、必要に応じてダウンローダーを切り替えるオプションがあります。

youtube-dl が、特定の Web サイトでより適切に動作する特定のダウンローダーを認識すると、そのダウンローダーが選択されます。それ以外の場合、youtube-dl は一般的な互換性のために最適なダウンローダーを選択しますが、現時点ではたまたま ffmpeg です。この選択は、組み込みのダウンローダーや ffmpeg の改善により、youtube-dl の将来のバージョンで変更される可能性があります。

特に、ジェネリック エクストラクタ (ウェブサイトがyoutube-dl によってサポートされているサイトのリストにない場合に使用される) は、特定のダウンローダを 1 つ強制することはできません。

または のいずれ

--hls-prefer-native
--hls-prefer-ffmpeg
を設定に入れると、ビデオの別のサブセットが正しくダウンロードされません。代わりに、ネイティブまたは ffmpeg HLS ダウンローダーがユース ケースにより適している理由を詳しく説明する問題またはプル リクエストを提出する方がはるかに優れています。

このアニメ ビデオ サイト、または現在の映画を無料で表示するサイトのサポートを追加できますか?

ポリシー (および合法性) の問題として、youtube-dl には、著作権の侵害に特化したサービスのサポートは含まれていません。経験則として、サービスが明らかに配布を許可しているビデオ (つまり、作成者または作成者の配布者によってアップロードされたもの、または無料のライセンスの下で公開されたもの) を簡単に見つけることができない場合、そのサービスはおそらく適切ではありません。 youtube-dl に含めるため。

A note on the service that they don't host the infringing content, but just link to those who do, is evidence that the service should not be included into youtube-dl. The same goes for any DMCA note when the whole front page of the service is filled with videos they are not allowed to distribute. A "fair use" note is equally unconvincing if the service shows copyright-protected videos in full without authorization.

Support requests for services that do purchase the rights to distribute their content are perfectly fine though. If in doubt, you can simply include a source that mentions the legitimate purchase of content.

How can I speed up work on my issue?

(Also known as: Help, my important issue not being solved!) The youtube-dl core developer team is quite small. While we do our best to solve as many issues as possible, sometimes that can take quite a while. To speed up your issue, here's what you can do:

First of all, please do report the issue at our issue tracker. That allows us to coordinate all efforts by users and developers, and serves as a unified point. Unfortunately, the youtube-dl project has grown too large to use personal email as an effective communication channel.

Please read the bug reporting instructions below. A lot of bugs lack all the necessary information. If you can, offer proxy, VPN, or shell access to the youtube-dl developers. If you are able to, test the issue from multiple computers in multiple countries to exclude local censorship or misconfiguration issues.

If nobody is interested in solving your issue, you are welcome to take matters into your own hands and submit a pull request (or coerce/pay somebody else to do so).

Feel free to bump the issue from time to time by writing a small comment ("Issue is still present in youtube-dl version ...from France, but fixed from Belgium"), but please not more than once a month. Please do not declare your issue as

important
or
urgent
.

How can I detect whether a given URL is supported by youtube-dl?

For one, have a look at the list of supported sites. Note that it can sometimes happen that the site changes its URL scheme (say, from https://example.com/video/1234567 to https://example.com/v/1234567 ) and youtube-dl reports an URL of a service in that list as unsupported. In that case, simply report a bug.

It is not possible to detect whether a URL is supported or not. That's because youtube-dl contains a generic extractor which matches all URLs. You may be tempted to disable, exclude, or remove the generic extractor, but the generic extractor not only allows users to extract videos from lots of websites that embed a video from another service, but may also be used to extract video from a service that it's hosting itself. Therefore, we neither recommend nor support disabling, excluding, or removing the generic extractor.

If you want to find out whether a given URL is supported, simply call youtube-dl with it. If you get no videos back, chances are the URL is either not referring to a video or unsupported. You can find out which by examining the output (if you run youtube-dl on the console) or catching an

UnsupportedError
exception if you run it from a Python program.

Why do I need to go through that much red tape when filing bugs?

Before we had the issue template, despite our extensive bug reporting instructions, about 80% of the issue reports we got were useless, for instance because people used ancient versions hundreds of releases old, because of simple syntactic errors (not in youtube-dl but in general shell usage), because the problem was already reported multiple times before, because people did not actually read an error message, even if it said "please install ffmpeg", because people did not mention the URL they were trying to download and many more simple, easy-to-avoid problems, many of whom were totally unrelated to youtube-dl.

youtube-dl is an open-source project manned by too few volunteers, so we'd rather spend time fixing bugs where we are certain none of those simple problems apply, and where we can be reasonably confident to be able to reproduce the issue without asking the reporter repeatedly. As such, the output of

youtube-dl -v YOUR_URL_HERE
is really all that's required to file an issue. The issue template also guides you through some basic steps you can do, such as checking that your version of youtube-dl is current.

DEVELOPER INSTRUCTIONS

Most users do not need to build youtube-dl and can download the builds or get them from their distribution.

To run youtube-dl as a developer, you don't need to build anything either. Simply execute

python -m youtube_dl

To run the test, simply invoke your favorite test runner, or execute a test file directly; any of the following work:

python -m unittest discover
python test/test_download.py
nosetests

See item 6 of new extractor tutorial for how to run extractor specific test cases.

If you want to create a build of youtube-dl yourself, you'll need

  • python
  • make (only GNU make is supported)
  • pandoc
  • zip
  • nosetests

Adding support for a new site

If you want to add support for a new site, first of all make sure this site is not dedicated to copyright infringement. youtube-dl does not support such sites thus pull requests adding support for them will be rejected.

After you have ensured this site is distributing its content legally, you can follow this quick list (assuming your service is called

yourextractor
):

  1. Fork this repository

  2. Check out the source code with:

     git clone git@github.com:YOUR_GITHUB_USERNAME/youtube-dl.git
    
  3. Start a new git branch with

     cd youtube-dl
     git checkout -b yourextractor
    
  4. Start with this simple template and save it to

    youtube_dl/extractor/yourextractor.py
    :

    # coding: utf-8
    from __future__ import unicode_literals
    
    from .common import InfoExtractor
    
    
    class YourExtractorIE(InfoExtractor):
        _VALID_URL = r'https?://(?:www\.)?yourextractor\.com/watch/(?P<id>[0-9]+)'
        _TEST = {
            'url': 'https://yourextractor.com/watch/42',
            'md5': 'TODO: md5 sum of the first 10241 bytes of the video file (use --test)',
            'info_dict': {
                'id': '42',
                'ext': 'mp4',
                'title': 'Video title goes here',
                'thumbnail': r're:^https?://.*\.jpg$',
                # TODO more properties, either as:
                # * A value
                # * MD5 checksum; start the string with md5:
                # * A regular expression; start the string with re:
                # * Any Python type (for example int or float)
            }
        }
    
        def _real_extract(self, url):
            video_id = self._match_id(url)
            webpage = self._download_webpage(url, video_id)
    
            # TODO more code goes here, for example ...
            title = self._html_search_regex(r'<h1>(.+?)</h1>', webpage, 'title')
    
            return {
                'id': video_id,
                'title': title,
                'description': self._og_search_description(webpage),
                'uploader': self._search_regex(r'<div[^>]+id="uploader"[^>]*>([^<]+)<', webpage, 'uploader', fatal=False),
                # TODO more properties (see youtube_dl/extractor/common.py)
            }
  5. Add an import in

    youtube_dl/extractor/extractors.py
    .

  6. Run

    python test/test_download.py TestDownload.test_YourExtractor
    . This should fail at first, but you can continually re-run it until you're done. If you decide to add more than one test (actually, test case) then rename
    _TEST
    to
    _TESTS
    and make it into a list of dictionaries. The tests will then be named
    TestDownload.test_YourExtractor
    ,
    TestDownload.test_YourExtractor_1
    ,
    TestDownload.test_YourExtractor_2
    , etc. Note:

    • the test names use the extractor class name without the trailing
      IE
    • tests with
      only_matching
      key in test's dict are not counted.
  7. Have a look at

    youtube_dl/extractor/common.py
    for possible helper methods and a detailed description of what your extractor should and may return. Add tests and code for as many as you want.

  8. Make sure your code follows youtube-dl coding conventions and check the code with flake8:

     $ flake8 youtube_dl/extractor/yourextractor.py
    
  9. Make sure your code works under all Python versions claimed supported by youtube-dl, namely 2.6, 2.7, and 3.2+.

  10. When the tests pass, add the new files and commit them and push the result, like this:

    $ git add youtube_dl/extractor/extractors.py
    $ git add youtube_dl/extractor/yourextractor.py
    $ git commit -m '[yourextractor] Add new extractor'
    $ git push origin yourextractor
    
  11. Finally, create a pull request. We'll then review and merge it.

In any case, thank you very much for your contributions!

youtube-dl coding conventions

This section introduces a guide lines for writing idiomatic, robust and future-proof extractor code.

Extractors are very fragile by nature since they depend on the layout of the source data provided by 3rd party media hosters out of your control and this layout tends to change. As an extractor implementer your task is not only to write code that will extract media links and metadata correctly but also to minimize dependency on the source's layout and even to make the code foresee potential future changes and be ready for that. This is important because it will allow the extractor not to break on minor layout changes thus keeping old youtube-dl versions working. Even though this breakage issue is easily fixed by emitting a new version of youtube-dl with a fix incorporated, all the previous versions become broken in all repositories and distros' packages that may not be so prompt in fetching the update from us. Needless to say, some non rolling release distros may never receive an update at all.

Mandatory and optional metafields

For extraction to work youtube-dl relies on metadata your extractor extracts and provides to youtube-dl expressed by an information dictionary or simply info dict. Only the following meta fields in the info dict are considered mandatory for a successful extraction process by youtube-dl:

  • id
    (media identifier)
  • title
    (media title)
  • url
    (media download URL) or
    formats

In fact only the last option is technically mandatory (i.e. if you can't figure out the download location of the media the extraction does not make any sense). But by convention youtube-dl also treats

id
and
title
as mandatory. Thus the aforementioned metafields are the critical data that the extraction does not make any sense without and if any of them fail to be extracted then the extractor is considered completely broken.

Any field apart from the aforementioned ones are considered optional. That means that extraction should be tolerant to situations when sources for these fields can potentially be unavailable (even if they are always available at the moment) and future-proof in order not to break the extraction of general purpose mandatory fields.

Example

Say you have some source dictionary

meta
that you've fetched as JSON with HTTP request and it has a key
summary
:

meta = self._download_json(url, video_id)

Assume at this point

meta
's layout is:

{
    ...
    "summary": "some fancy summary text",
    ...
}

Assume you want to extract

summary
and put it into the resulting info dict as
description
. Since
description
is an optional meta field you should be ready that this key may be missing from the
meta
dict, so that you should extract it like:

description = meta.get('summary')  # correct

and not like:

description = meta['summary']  # incorrect

The latter will break extraction process with

KeyError
if
summary
disappears from
meta
at some later time but with the former approach extraction will just go ahead with
description
set to
None
which is perfectly fine (remember
None
is equivalent to the absence of data).

Similarly, you should pass

fatal=False
when extracting optional data from a webpage with
_search_regex
,
_html_search_regex
or similar methods, for instance:

description = self._search_regex(
    r'<span[^>]+id="title"[^>]*>([^<]+)<',
    webpage, 'description', fatal=False)

With

fatal
set to
False
if
_search_regex
fails to extract
description
it will emit a warning and continue extraction.

You can also pass

default=<some fallback value>
, for example:

description = self._search_regex(
    r'<span[^>]+id="title"[^>]*>([^<]+)<',
    webpage, 'description', default=None)

On failure this code will silently continue the extraction with

description
set to
None
. That is useful for metafields that may or may not be present.

Provide fallbacks

When extracting metadata try to do so from multiple sources. For example if

title
is present in several places, try extracting from at least some of them. This makes it more future-proof in case some of the sources become unavailable.

Example

Say

meta
from the previous example has a
title
and you are about to extract it. Since
title
is a mandatory meta field you should end up with something like:

title = meta['title']

If

title
disappears from
meta
in future due to some changes on the hoster's side the extraction would fail since
title
is mandatory. That's expected.

Assume that you have some another source you can extract

title
from, for example
og:title
HTML meta of a
webpage
. In this case you can provide a fallback scenario:

title = meta.get('title') or self._og_search_title(webpage)

This code will try to extract from

meta
first and if it fails it will try extracting
og:title
from a
webpage
.

Regular expressions

Don't capture groups you don't use

Capturing group must be an indication that it's used somewhere in the code. Any group that is not used must be non capturing.

Example

Don't capture id attribute name here since you can't use it for anything anyway.

Correct:

r'(?:id|ID)=(?P<id>\d+)'

Incorrect:

r'(id|ID)=(?P<id>\d+)'

Make regular expressions relaxed and flexible

When using regular expressions try to write them fuzzy, relaxed and flexible, skipping insignificant parts that are more likely to change, allowing both single and double quotes for quoted values and so on.

Example

Say you need to extract

title
from the following HTML code:

<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">some fancy title</span>

The code for that task should look similar to:

title = self._search_regex(
    r'<span[^>]+class="title"[^>]*>([^<]+)', webpage, 'title')

Or even better:

title = self._search_regex(
    r'<span[^>]+class=(["\'])title\1[^>]*>(?P<title>[^<]+)',
    webpage, 'title', group='title')

Note how you tolerate potential changes in the

style
attribute's value or switch from using double quotes to single for
class
attribute:

The code definitely should not look like:

title = self._search_regex(
    r'<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">(.*?)</span>',
    webpage, 'title', group='title')

Long lines policy

There is a soft limit to keep lines of code under 80 characters long. This means it should be respected if possible and if it does not make readability and code maintenance worse.

たとえば、URL などの長い文字列リテラルや、よくコピーされるその他のエンティティを、この制限に合わせて複数の行に分割しないでください。

正しい:

'https://www.youtube.com/watch?v=FqZTN594JQw&list=PLMYEtVRpaqY00V9W81Cwmzp6N6vZqfUKD4'

正しくない:

'https://www.youtube.com/watch?v=FqZTN594JQw&list='
'PLMYEtVRpaqY00V9W81Cwmzp6N6vZqfUKD4'

インライン値

変数の抽出は、コードの重複を減らし、複雑な式の読みやすさを改善するために受け入れられます。ただし、一度だけ使用される変数を抽出して、それらを抽出ファイルの反対側の部分に移動することは避けてください。これにより、線形フローの読み取りが困難になります。

正しい:

title = self._html_search_regex(r'<title>([^<]+)</title>', webpage, 'title')

正しくない:

TITLE_RE = r'<title>([^<]+)</title>'
# ...some lines of code...
title = self._html_search_regex(TITLE_RE, webpage, 'title')

フォールバックを折りたたむ

複数のフォールバック値があると、すぐに扱いにくくなります。パターンのリストを使用して、複数のフォールバック値を 1 つの式にまとめます。

良い:

description = self._html_search_meta(
    ['og:description', 'description', 'twitter:description'],
    webpage, 'description', default=None)

扱いにくい:

description = (
    self._og_search_description(webpage, default=None)
    or self._html_search_meta('description', webpage, default=None)
    or self._html_search_meta('twitter:description', webpage, default=None))

パターンのリストをサポートするメソッドは次のとおり

_search_regex
です。
_html_search_regex
_og_search_property
_html_search_meta

末尾の括弧

末尾の括弧は常に最後の引数の後に移動します。

正しい:

    lambda x: x['ResultSet']['Result'][0]['VideoUrlSet']['VideoUrl'],
    list)

正しくない:

    lambda x: x['ResultSet']['Result'][0]['VideoUrlSet']['VideoUrl'],
    list,
)

便利な変換および解析関数を使用する

抽出されたすべての数値データを

youtube_dl/utils.py
:
int_or_none
,から安全な関数にラップします
float_or_none
。文字列から数値への変換にも使用します。

url_or_none
安全な URL 処理に使用します。

try_get
解析された JSON から安全にメタデータを抽出するために使用します。

unified_strdate
均一
upload_date
または任意の
YYYYMMDD
メタ フィールド抽出、
unified_timestamp
均一
timestamp
抽出、
parse_filesize
抽出
filesize
parse_count
カウント メタ フィールド抽出、
parse_resolution
抽出、
parse_duration
抽出に使用します。
duration
parse_age_limit
age_limit

youtube_dl/utils.py
より便利な便利な機能を探してください。

その他の例

解析された JSON からオプションの説明を安全に抽出する
description = try_get(response, lambda x: x['result']['video'][0]['summary'], compat_str)
より多くのオプションのメタデータを安全に抽出する
video = try_get(response, lambda x: x['result']['video'][0], dict) or {}
description = video.get('summary')
duration = float_or_none(video.get('durationMs'), scale=1000)
view_count = int_or_none(video.get('views'))

YOUTUBE-DLの埋め込み

youtube-dl は、優れたコマンドライン プログラムになるよう最善を尽くしているため、どのプログラミング言語からでも呼び出すことができます。出力の解析で問題が発生した場合は、お気軽にレポートを作成してください。

Python プログラムから、次のように youtube-dl をより強力な方法で埋め込むことができます。

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

ほとんどの場合、さまざまなオプションを使用する必要があります。利用可能なオプションのリストについては、 を参照してください

youtube_dl/YoutubeDL.py
。まず、youtube-dl の出力を傍受したい場合は、
logger
オブジェクトを設定します。

以下は、エラーのみ (およびダウンロード完了後の短いメッセージ) を出力し、ビデオを mp3 ファイルにダウンロード/変換するプログラムのより完全な例です。

from __future__ import unicode_literals
import youtube_dl


class MyLogger(object):
    def debug(self, msg):
        pass

    def warning(self, msg):
        pass

    def error(self, msg):
        print(msg)


def my_hook(d):
    if d['status'] == 'finished':
        print('Done downloading, now converting ...')


ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }],
    'logger': MyLogger(),
    'progress_hooks': [my_hook],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

バグ

Bugs and suggestions should be reported at: https://github.com/ytdl-org/youtube-dl/issues. Unless you were prompted to or there is another pertinent reason (e.g. GitHub fails to accept the bug report), please do not send bug reports via personal email. For discussions, join us in the IRC channel #youtube-dl on freenode (webchat).

Please include the full output of youtube-dl when run with

-v
, i.e. add
-v
flag to your command line, copy the whole output and post it in the issue body wrapped in ``` for better formatting. It should look similar to this:

$ youtube-dl -v <your command line>
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-v', u'https://www.youtube.com/watch?v=BaW_jenozKcj']
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
[debug] youtube-dl version 2015.12.06
[debug] Git HEAD: 135392e
[debug] Python version 2.6.6 - Windows-2003Server-5.2.3790-SP2
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
[debug] Proxy map: {}
...

Do not post screenshots of verbose logs; only plain text is acceptable.

The output (including the first lines) contains important debugging information. Issues without the full output are often not reproducible and therefore do not get solved in short order, if ever.

Please re-read your issue once again to avoid a couple of common mistakes (you can and should use this as a checklist):

Is the description of the issue itself sufficient?

We often get issue reports that we cannot really decipher. While in most cases we eventually get the required information after asking back multiple times, this poses an unnecessary drain on our resources. Many contributors, including myself, are also not native speakers, so we may misread some parts.

So please elaborate on what feature you are requesting, or what bug you want to be fixed. Make sure that it's obvious

  • What the problem is
  • How it could be fixed
  • How your proposed solution would look like

If your report is shorter than two lines, it is almost certainly missing some of these, which makes it hard for us to respond to it. We're often too polite to close the issue outright, but the missing info makes misinterpretation likely. As a committer myself, I often get frustrated by these issues, since the only possible way for me to move forward on them is to ask for clarification over and over.

For bug reports, this means that your report should contain the complete output of youtube-dl when called with the

-v
flag. The error message you get for (most) bugs even says so, but you would not believe how many of our bug reports do not contain this information.

If your server has multiple IPs or you suspect censorship, adding

--call-home
may be a good idea to get more diagnostics. If the error is
ERROR: Unable to extract ...
and you cannot reproduce it from multiple countries, add
--dump-pages
(warning: this will yield a rather large output, redirect it to the file
log.txt
by adding
>log.txt 2>&1
to your command-line) or upload the
.dump
files you get when you add
--write-pages
somewhere.

Site support requests must contain an example URL. An example URL is a URL you might want to download, like

https://www.youtube.com/watch?v=BaW_jenozKc
. There should be an obvious video present. Except under very special circumstances, the main page of a video service (e.g.
https://www.youtube.com/
) is not an example URL.

Are you using the latest version?

Before reporting any issue, type

youtube-dl -U
. This should report that you're up-to-date. About 20% of the reports we receive are already fixed, but people are using outdated versions. This goes for feature requests as well.

Is the issue already documented?

Make sure that someone has not already opened the issue you're trying to open. Search at the top of the window or browse the GitHub Issues of this repository. If there is an issue, feel free to write something along the lines of "This affects me as well, with version 2015.01.01. Here is some more information on the issue: ...". While some issues may be old, a new post into them often spurs rapid activity.

Why are existing options not enough?

新しい機能をリクエストする前に、サポートされているオプションのリストをざっと見てください。多くの機能要求は、実際に既に存在する機能に対するものです! 問題レポートであなたの成果を絶対に披露し、既存の同様のオプションでは問題が解決しないことを詳しく説明してください。

バグ レポートに十分なコンテキストがありますか?

人々は問題を解決したいと考えており、より大きな問題 (ダウンロード済みのファイルをスキップしたいなど) を特定の要求 (情報ページをダウンロードする前にファイルが存在するかどうかを確認するよう要求した場合など) に分解することで、私たちに有利に働くと考えることがよくあります。しかし、よくあることは、問題を 2 つのステップに分割することです。1 つは単純で、もう 1 つは不可能 (または非常に複雑) です。

次に、ダウンロードしたビデオ ID を別のファイルに記録するなど、元の問題をはるかに簡単に解決できる場合に、非常に複雑な要求が表示されます。これを避けるには、より大きなコンテキストを、それが明白でない場所に含める必要があります。特に、新しいサイトのサポートを追加することで構成されていないすべての機能要求には、不足している機能がどのような状況で役立つかを説明するユース ケース シナリオが含まれている必要があります。

その問題には 1 つの問題が含まれていますか?

一部のユーザーは、開くことができる、または開く必要がある課題に制限があると考えているようです。彼らが開くことができる、または開くべき問題の制限はありません。すべての問題を 1 つのチケットにまとめられるのは魅力的に思えるかもしれませんが、それは、あなたの問題の 1 つを解決した人がその問題をクローズ済みとしてマークできないことを意味します。通常、多数の問題を報告すると、誰かが容赦なく問題を複数の問題に分割するまで、誰もその巨獣を攻撃したくないため、チケットが長引くことにつながります。

特に、すべてのサイト サポート リクエストの問題は、1 つのサイトのサービスにのみ関連する必要があります (通常は共通のドメインの下にありますが、常に同じバックエンド テクノロジを使用しています)。同じ問題で、vimeo ユーザー ビデオ、ホワイト ハウス ポッドキャスト、および Google プラス ページのサポートをリクエストしないでください。また、機能リクエストと一緒にバグ レポートを投稿しないようにしてください。経験則として、機能リクエストには、目前の機能に直接関連しない youtube-dl の出力は含まれません。新しいビデオ サービスのリクエストと一緒に、ネットワーク エラーのレポートを投稿しないでください。

この機能が必要になる人はいますか?

あなた (またはあなたが個人的に話すことのできる無力な友人) が必要とする機能のみを投稿してください。良いアイデアのように見えるため、機能を投稿しないでください。それらが本当に役立つ場合は、それらを必要とする人から要求されます。

youtube-dl についての質問ですか?

奇妙に聞こえるかもしれませんが、私たちが受け取るバグ レポートの中には、youtube-dl とはまったく関係がなく、別の、または報告者自身のアプリケーションに関連するものもあります。実際に youtube-dl を使用していることを確認してください。youtube-dl の UI を使用している場合は、UI を提供している実際のアプリケーションの管理者にバグを報告してください。一方、youtube-dl の UI が youtube-dl に関連していると思われる何らかの形で失敗した場合は、必ずバグを報告してください。

著作権

youtube-dl は、著作権所有者によってパブリック ドメインに解放されます。

この README ファイルはもともとDaniel Boltonによって書かれ、同様にパブリック ドメインにリリースされています。