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

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

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

ビルド ステータス

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


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

sudo curl -L -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

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

sudo wget -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

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



sudo -H pip install --upgrade youtube-dl

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

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

brew install youtube-dl


sudo port install youtube-dl

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


youtube-dlは、 やその他のいくつかのサイトから動画をダウンロードするためのコマンドライン プログラムです。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
--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
--list-extractors                    List all supported extractors
--extractor-descriptions             Output descriptions of all supported
--force-generic-extractor            Force extraction to use the generic
--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
                                     (%APPDATA%/youtube-dl/config.txt on
--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
--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:// Pass in an
                                     empty string (--proxy "") for direct
--socket-timeout SECONDS             Time to wait before giving up, in
--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
--playlist-end NUMBER                Playlist video to end at (default is
--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
--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

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

-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
--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
--playlist-random                    Download playlist videos in random
--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
--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
--external-downloader-args ARGS      Give these arguments to the external

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

-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
-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
--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
--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
--get-duration                       Simulate, quiet but print video length
--get-filename                       Simulate, quiet but print output
--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
--print-traffic                      Display sent and read HTTP traffic
-C, --call-home                      Contact the youtube-dl server for
--no-call-home                       Do NOT contact the youtube-dl server
                                     for debugging


--encoding ENCODING                  Force the specified encoding
--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
--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-


-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
--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


--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
--sub-format FORMAT                  Subtitle format, accepts formats
                                     preference, for example: "srt" or
--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
-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


-x, --extract-audio                  Convert video files to audio-only files
                                     (requires ffmpeg/avconv and
--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:
--postprocessor-args ARGS            Give these arguments to the
-k, --keep-video                     Keep the video file on disk after the
                                     post-processing; the video is erased by
--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
--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
--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 では、システム全体の構成ファイルは に

あり、ユーザー全体の構成ファイルは にあります
。Windows では、ユーザー全体の構成ファイルの場所は
C:\Users\<user name>\youtube-dl.conf

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

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

# Lines starting with # are comments

# Always extract audio

# Do not copy the mtime

# Use this proxy

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

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

- o
-- proxy

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

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


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

) 。
. これは、エクストラクタごとに

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


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


machine youtube login password my_youtube_password
machine twitch login my_twitch_account_name password my_twitch_password

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


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





tl;dr: 例に移動します


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

  • 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_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
    (数値): ダウンロードごとに増加する数値。
  • 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)


このようなシーケンスは、 (

たとえば、 titleと id

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

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

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


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

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

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



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


出力テンプレートと 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'

# 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'

# 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'

# 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"

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


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



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

tl;dr: 例に移動します


-f 22
形式コードが 22 の形式をダウンロードできます。

ファイル拡張子 (現在

、がサポートされています) を使用して
、単一のファイルとして提供される特定のファイル拡張子の最高品質の形式をダウンロードすることもできます。たとえば、拡張子が として提供される最高品質の形式をダウンロードします単一のファイル。
-f 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
    : 実際のダウンロードに使用されるプロトコル、小文字 (
  • 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 がインストールされている場合、ダウンロード
個別に多重化し、1 つのファイルにまとめて、全体的に最高の品質を提供します。それ以外の場合はフォールバックし
は、オーディオとビデオを 2 つの異なるファイルで提供していないため、YouTube 以外のビデオにも必要です。一部の DASH 形式のみをダウンロードする場合 (たとえば、1080p を超える解像度のビデオを取得することに関心がない場合)、追加できます。
-f bestvideo[height<=?1080]+bestaudio/best
構成ファイルに。youtube-dl を使用してストリーミングする
(そしてメディア プレーヤーにパイプする可能性が最も高い) 場合、つまり、明示的に出力テンプレートを として指定する場合
-o -
、youtube-dl は引き続き
-f best

古い形式の選択動作 (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 が同じファイル名を持つ可能性があるため、出力テンプレートが推奨されることに注意してください。



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

  • 絶対日付: 形式の日付
  • 相対日付: 形式の日付


# 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 -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl
hash -r

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

sudo youtube-dl -U

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

Windows Defender 設定でファイルの除外を追加します。

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

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

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

error: using output template conflicts with using title, video ID or auto number

コマンド ラインまたは構成ファイルで設定されたものを使用していないことを確認してください。後者がある場合は削除します。


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

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


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

オプションはもう必要ありません。一部の特定の動画については、関心のある特定の高品質形式で利用できると YouTube が報告していない可能性があります。その場合は、
オプションでリクエストするだけで、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 を抽出しました
が、別のマシンや Web ブラウザで再生できません。

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

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

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

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


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 がの場合、次のコマンドで終了する必要があります。

youtube-dl ''



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

youtube-dl ""

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

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

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

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

また、ブラウザの HTTP ヘッダーを で渡す必要がある場合もあります

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

を使用して別のアドレスを選択します。 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 ファイルとしてパックされているため、単純に解凍するか (
一部のシステムでは最初に名前を変更する必要がある場合があります)、上記のように git リポジトリを複製します。コードを変更した場合は、ファイルを実行することで実行でき
make youtube-dl

The exe throws an error due to missing

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,

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


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



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

ID をオプションの前に追加するか、次のように区切ります

youtube-dl -- -wNyEUrxzFU
youtube-dl ""

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

--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 の場合は
( )、Unix および Unix 系システム (Linux、macOS など) の場合は ( ) です。when usingは無効な改行形式の良い兆候です。
HTTP Error 400: Bad Request

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

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

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

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

youtube-dl -o - "" | vlc -



--download-archive /path/to/download/archive/file.txt


youtube-dl --download-archive archive.txt ""



youtube-dl --download-archive archive.txt ""


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

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

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

または のいずれ

を設定に入れると、ビデオの別のサブセットが正しくダウンロードされません。代わりに、ネイティブまたは 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


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 to ) 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

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.


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/

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


  1. Fork this repository

  2. Check out the source code with:

     git clone
  3. Start a new git branch with

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


    # 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': '',
            '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/
  5. Add an import in


  6. Run

    python test/ 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
    and make it into a list of dictionaries. The tests will then be named
    , etc. Note:

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

    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/
  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/
    $ git add youtube_dl/extractor/
    $ 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

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

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.


Say you have some source dictionary

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

meta = self._download_json(url, video_id)

Assume at this point

's layout is:

    "summary": "some fancy summary text",

Assume you want to extract

and put it into the resulting info dict as
. Since
is an optional meta field you should be ready that this key may be missing from the
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

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

Similarly, you should pass

when extracting optional data from a webpage with
or similar methods, for instance:

description = self._search_regex(
    webpage, 'description', fatal=False)


set to
fails to extract
it will emit a warning and continue extraction.

You can also pass

default=<some fallback value>
, for example:

description = self._search_regex(
    webpage, 'description', default=None)

On failure this code will silently continue the extraction with

set to
. 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

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.



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

title = meta['title']


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

Assume that you have some another source you can extract

from, for example
HTML meta of a
. 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

first and if it fails it will try extracting
from a

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.


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





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.


Say you need to extract

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(
    webpage, 'title', group='title')

Note how you tolerate potential changes in the

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

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 などの長い文字列リテラルや、よくコピーされるその他のエンティティを、この制限に合わせて複数の行に分割しないでください。








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))






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


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




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

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

メタ フィールド抽出、
カウント メタ フィールド抽出、



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

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

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:[''])

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

。まず、youtube-dl の出力を傍受したい場合は、

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

from __future__ import unicode_literals
import youtube_dl

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

    def warning(self, msg):

    def error(self, 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:[''])


Bugs and suggestions should be reported at: 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

, i.e. add
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'']
[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

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

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
(warning: this will yield a rather large output, redirect it to the file
by adding
>log.txt 2>&1
to your command-line) or upload the
files you get when you add

Site support requests must contain an example URL. An example URL is a URL you might want to download, like
. There should be an obvious video present. Except under very special circumstances, the main page of a video service (e.g.
) 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によって書かれ、同様にパブリック ドメインにリリースされています。