youtube-dl オプション一覧及びそのメモ

youtube-dlという物を覚えた。Pythonとかエンジンがいるのかよ使いにくいなあ思ったらちゃんとexeもある。これは便利。便利だがコマンドラインの説明が何処にもない。あるのは英語の公式リファレンスだけ。仕方ないので自分でまとめることにした。youtubeから1080pの動画を落としたいだけという動機の人間が書いた、自分さえ分かれば良いというメモである。決して完全な日本語訳を目指した訳ではないのでそのつもりで。

修正にあたって新たにエントリを起こすかとも思ったが同じようなエントリを何個も書いてもしょうがないので。

  • 2015年09月05日 投稿
  • 2018年11月05日 修正追加

OPTIONS

-h, --help
ヘルプを表示する。
--version
プログラムのVerを表示する。
-U, --update
プログラムのupdateを実行する。
-i, --ignore-errors
ダウンロードエラーを無視する。プレイリストごとダウンロードするような時に使う。
--abort-on-error
ダウンロードエラーが発生したら以降の処理を中止する。
--dump-user-agent
userAgentを表示する。
--list-extractors
対応サイト一覧を表示する。
--extractor-descriptions
対応サイト一覧を説明付きで表示する。が、説明なしの物が殆ど。
--force-generic-extractor
通常の方法でのダウンロードを強制する。
--default-search PREFIX
URLでない値をURLとして与えられた場合の処理方法。"auto"を指定したらyoutube-dlが適当に推測して処理しようとするが大抵巧くいかない。"error"を指定したらただエラーを返すだけ。"fixup_error"を指定したらURLとして与えられた引数を修正しようとするが巧くいかなかったらやっぱりエラーを返す。"gvsearch2:"を指定したらGoogleVideoでの検索結果から2つの動画をダウンロードする。1つでいいなら"gvsearch1:"となる。つまり数字部分がダウンロード数となる。他にも"ytsearch1:"など色々あるらしい。このオプションをあえて使うとしたら"gvsearch1:"類になるだろう。
--ignore-config
設定ファイルを無視する。
--config-location PATH
設定ファイルもしくはフォルダPATHを指定する。
--flat-playlist
プレイリスト展開のみで動画ダウンロードをしない。
--mark-watched
--no-mark-watched
youtubeのみ。要するに再生履歴に残すか残さないかの事。当然ユーザ名パスワードを一緒に指定しないと意味ない。
--no-color
結果にカラーコードを生成しませんとあるが何の事やらさっぱり。
Network Options
--proxy URL
プロキシを設定する。HTTP/HTTPS及びSOCKS。SOCKSはsocks5://127.0.0.1:1080/のような感じで指定する。
--socket-timeout SECONDS
タイムアウトの秒数を指定。単位は秒。
--source-address IP
恐らくはクライアント側からのパケットのソースアドレス偽装。つまり--proxyと似たような機能だろう。公式の説明がシンプル過ぎて推測でしかないが。
-4, --force-ipv4
-6, --force-ipv6
IPv4, IPv6を強制それぞれ強制
Geo Restriction
--geo-verification-proxy URL
--proxyと違うのはサイトのアクセス時のみの適用で動画のダウンロード時は未適用と言う点。ChinaのProxyは回線が不安定な物が多いのでそういうときはこれを使う。
--geo-bypass
--no-geo-bypass
X-Forwarded-For偽装による地域制限回避をするかしないか。それはいいのだが--no-geo-bypassはdefaltの挙動ではないのかと思うがどういう動作をするんだろうか。--geo-bypassのキャンセルとかなんだろうか。
--geo-bypass-country CODE
ISO 3166-2で規定されたコードを指定して地域制限を回避する。
--geo-bypass-ip-block IP_BLOCK 追加
CIDR表記で指定されたIPレンジを地域制限を回避する。
Video Selection
--playlist-start NUMBER
--playlist-end NUMBER
例えば2を指定するとプレイリスト内の2番目の動画から処理を開始もしくは処理を終える。
--playlist-items ITEM_SPEC
--playlist-items 1-3,7,10-13のように処理するプレイリスト内の番号を指定する。
--match-title REGEX
--reject-title REGEX
正規表現にマッチした物をダウンロードするかもしくは除外してダウンロードする。
--max-downloads NUMBER
最大ダウンロード数を指定する。
--min-filesize SIZE
--max-filesize SIZE
最大最小ファイルサイズをそれぞれ指定する。
--date DATE
動画のアップロード日時を指定する。
--datebefore DATE
--dateafter DATE
指定した日時より以前もしくは以後の物をそれぞれ処理する。
--min-views COUNT
--max-views COUNT
最大最小視聴回数をそれぞれ指定する。
--match-filter FILTER
ダウンロードする動画をフィルタする。「like_count > 100 & dislike_count < 50 & description」などと使う。
--no-playlist
--yes-playlist
プレイリストを無視するかどうかのフラグ。
--age-limit YEARS
なんのこっちゃと思ったら年齢制限の事。
--download-archive FILE
このオプションで指定したファイルにダウンロードした動画のIDを自動で記録する。そして記録された動画は次回実行時にダウンロードをスキップする。
--include-ads 実験的
広告もダウンロードする。
Download Options
-r, --rate-limit LIMIT
ダウンロード速度を制限する(例 50K, 4.2M)。
-R, --retries RETRIES
リトライ数を指定する。infiniteという値も一応用意されているがこんな値使うな。
--fragment-retries RETRIES
fragmentのリトライ数。ただしDASHおよびhlsnativeのみ。
--skip-unavailable-fragments
有効でないfragmentをskipする。ただしDASHおよびhlsnativeのみ。
--abort-on-unavailable-fragment
有効でないfragmentがあるときダウンロード処理を中断する。ただしDASHおよびhlsnativeのみ。
--keep-fragments
ダウンロード後fragmentを消さずに残す。
--buffer-size SIZE
ダウンロードバッファを指定する。
--no-resize-buffer
ダウンロードバッファを自動調整しない。
--http-chunk-size SIZE 追加 実験的
チャンクのサイズを指定する。サーバー側で指定されている帯域資源回避に役立つかもしれない。
--playlist-reverse
プレイリスト上の動画を最後からダウンロードする。
--playlist-random
プレイリスト上の動画をランダムにダウンロードする。
--xattr-set-filesize
not availableと言われて動かない。Python版では動くらしいので単純にexe版ではモジュール不足なんだろう。
--hls-prefer-native
--hls-prefer-ffmpeg
HLSの処理方法のオプション。nativeは自前で処理する。HLSというのはHttp Live Streamingの事でストリーミング配信用のプロトコル
--hls-use-mpegts
HLSでダウンロード中の再生の為にMPEG TSを使う。
--external-downloader COMMAND
外部ダウンローダーを指定する。対応してるのはaria2c、avconv、axel、curlffmpeg、httpie、wget
--external-downloader-args ARGS
外部ダウンローダーに引数を渡す。
Filesystem Options
-a, --batch-file FILE
動画URLを記述したファイルを指定してまとめてダウンロードする。
--id
ファイル名を動画IDのみとする。後述の-oと併用するとconflictで停止する。
-o, --output TEMPLATE
ファイル名を指定する。使用できる変数は後述のOUTPUT TEMPLATEを参照。
--autonumber-start NUMBER
%(autonumber)sの初期値を指定する。
--restrict-filenames
ファイル名をASCIIコードに制限する。
-w, --no-overwrites
ファイルを上書きしないというオプション。しかしデフォルトの挙動がこれなので付けても付けなくても一緒。むしろ必要なのは上書きするオプションだろう。
-c, --continue
ダウンロードのリジュームを強制する。
--no-continue
ダウンロードのリジュームをしない。
--no-part
.partファイルを使わないというからメモリ上に読み込むとかそんな事かと思ったら単にpart拡張子の話。
--no-mtime
HTTPのLast-Modifiedヘッダをファイルの更新日時に使わない。
--write-description
descriptionファイルを別途作成する。
--write-info-json
メタデータを記述したJSONファイルを別途作成する。
--write-annotations
アノテーションxmlで作成する。
--load-info-json FILE
--write-info-jsonと逆でJSONファイルから動画情報をロードする。
--cookies FILE
ファイルからcookieをロードする。
--cache-dir DIR
キャッシュディレクトリを変更する。
--no-cache-dir
キャッシュファイルを作成しない。
--rm-cache-dir
youtube-dlの作成したキャッシュファイルを全て消す。
Thumbnail images
--write-thumbnail
サムネイルを作成する。
--write-all-thumbnails
サムネイルを全てのフォーマットで作成する。
--list-thumbnails
利用可能なサムネイルを表示する。
Verbosity / Simulation Options
-q, --quiet
コマンドプロンプトにおける表示を最小限にする。別にコマンドプロンプトの起動自体を抑制する訳ではない。
--no-warnings
警告を無視する。
-s, --simulate
実行をシミュレートするだけで一切のダウンロードを行わない。
--skip-download
動画のダウンロードを行わない。
-g, --get-url
-e, --get-title
--get-id
--get-thumbnail
--get-description
--get-duration
--get-filename
--get-format
指定の物を表示するだけで実行はしない。
-j, --dump-json
実行をシミュレートするだけだが諸情報をJSON形式で表示する。
-J, --dump-single-json
実行をシミュレートするだけだが与えられた引数ごとに諸情報をJSON形式で表示する。
--print-json
--quietで実行かつ動画情報をJSONで表示。
--newline
ダウンロードの進行状況を逐次表示。やってみれば分かる。
--no-progress
ダウンロードの進行状況を表示しない。
--console-title
コンソールのタイトルバーに現在の処理内容を表示する。
-v, --verbose
デバッグ用の諸情報を表示する。
--dump-pages
デバッグ用にリクエスト結果をbase64エンコードして表示する。でも長過ぎてデバッグにならない。
--write-pages
デバッグ用に中間処理を表示する。
--print-traffic
HTTPトラフィックを表示する。
-C, --call-home
デバッグ時にyoutube-dlサーバーにアクセスする。
--no-call-home
デバッグ時にyoutube-dlサーバーにアクセスしない。
Workarounds
--encoding ENCODING 実験的
使用する文字コードを指定する。
--no-check-certificate
暗号化通信のデジタル証明書をチェックしない。
--prefer-insecure
動画情報の取得に非暗号化通信を使用する。
--user-agent UA
userAgentを指定する。
--referer URL
refererを指定する。
--add-header FIELD:VALUE
カスタムHTTPヘッダを指定する。
--bidi-workaround
双方向性テキスト。つまりアラビア語などは文章を右から左へと書くが数字は左から右へと書かねばならない。このような言語を扱うときに指定する。
--sleep-interval SECONDS
単独で使用された時はそれぞれのダウンロード前に指定された秒数のインターバルを入れる。--max-sleep-intervalとセットで使われた時は--min-sleep-intervalとして機能する。互換性を考えたんだろうけどなにこの変な実装。
--max-sleep-interval SECONDS
それぞれのダウンロード前に指定された秒数を上限としたランダムな秒数のインターバルを入れる。ただし必ず--sleep-intervalとセットで使う事。
Video Format Options
-f, --format FORMAT
Video format codeを指定する。後述するFORMAT SELECTIONを参照。
--all-formats
利用可能な全てのフォーマットをダウンロードする。
--prefer-free-formats
特定のフォーマット指定がされない限りフリーのフォーマットを使用する。
-F, --list-formats
利用可能な全てのフォーマットを表示する。
--youtube-skip-dash-manifest
youtubeにおいてDASH manifestsを無視する。
--merge-output-format FORMAT
結合が必要な場合にコンテナフォーマットを指定する。
Subtitle Options
--write-sub
字幕ファイルを生成する。
--write-auto-sub
youtubeで字幕ファイルを自動で生成する。
--all-subs
使用可能な全ての字幕をダウンロードする。
--list-subs
使用可能な全ての字幕を表示する。
--sub-format FORMAT
字幕のフォーマットを指定する。
--sub-lang LANGS
字幕の言語を指定する。
Authentication Options
-u, --username USERNAME
ログイン時のユーザー名を指定する。
-p, --password PASSWORD
ログイン時のパスワードを指定する。
-2, --twofactor TWOFACTOR
auth codeを指定する。
-n, --netrc
netrcファイルを指定。FTPで使うユーザー情報ファイルらしい。
--video-password PASSWORD
そのまんま動画のパスワード。どうも必要なサイトが複数あるらしい。
Adobe Pass Options
--ap-mso MSO
Adobe Pass(今はAdobe Primetimeという名称になっている)という配信プラットフォームの話でこのOptionはTV providerのidを指定する。有効なidは--ap-list-msoを見る事。
--ap-username USERNAME
Adobe Passのユーザー名を指定する。
--ap-password PASSWORD
Adobe Passのパスワードを指定する。
--ap-list-mso
Adobe PassのTV providerのid一覧を表示する。
Post-processing Options
-x, --extract-audio
動画を音声のみに変換する。
--audio-format FORMAT
音声フォーマットを指定する。best, aac, vorbis, mp3, m4a, opus, wavのいずれか。
--audio-quality QUALITY
音声変換時のクオリティを指定。VBRなら0-9、CBRなら128Kなど
--recode-video FORMAT
映像フォーマットを指定のフォーマットに変換する。
--postprocessor-args ARGS
ffmpeg/avconvに渡す引数なんだろうたぶん。
-k, --keep-video
ダウンロードした変換前のファイルを残す。
--no-post-overwrites
このオプションを指定するとフォーマット変換が必要でかつ変換後のファイルがすでに存在した場合処理をスキップする。指定しない場合はそのまま上書きする。
--embed-subs
動画ファイルに字幕を埋め込む。
--embed-thumbnail
音声ファイルにサムネイルを埋め込む。
--add-metadata
動画にメタデータを書き込む。
--metadata-from-title FORMAT
動画タイトルからtitle, artistのようなメタデータを取得する。使用できる変数は--output同様にOUTPUT TEMPLATEを参照。
--xattrs
拡張ファイル属性にメタデータを書き込む。
--fixup POLICY
既知のエラーを自動で修正する。
--prefer-avconv
--prefer-ffmpeg
avconvとffmpegの指定された方を優先して使用する。
--ffmpeg-location PATH
ffmpeg/avconvのPATHを指定する。
--exec CMD
ダウンロード後コマンドを実行する。
--convert-subs FORMAT
字幕フォーマットを変換する。サポートしてるのはsrt、ass、vtt、lrc。

CONFIGURATION

oオプション等のいつも使うオプションを設定ファイルとしてまとめておく事が出来る。便利っちゃ便利だがサイト毎に設定を振り分ける事が出来る訳でもなくscriptから実行させていると無用の長物ではある。Windowsは「%APPDATA%\youtube-dl\config.txt」か「C:\Users\\youtube-dl.conf」にファイルを置けと書いてあるがyoutube-dl.confの方はエラーが出てうまくいかなかった。

-x
--no-mtime
--proxy 127.0.0.1:3128
-o ~/Movies/%(title)s.%(ext)s
# Lines starting with # are comments

#から始まる行はコメントとして扱われる。なおoオプションのフォルダの区切りは\ではなく/である事に注意。\では認識しない。

.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

みたいに書けば良い。しかしWindowsで使う上で問題が一つ。

On Windows you may also need to setup the %HOME% environment variable manually.

つまりWindows環境変数HOMEを手動で設定してねつー事らしい。確かに--netrcで実行すると$HOME not setというエラーが返ってくる。そもそもなんでこんな機能があるかと言うとコマンドラインの履歴にplane textでログイン情報を残すのが嫌という事らしい。

OUTPUT TEMPLATE

断っておくが以下の物が全て使える訳ではない。特定のサイトに特化したような物も多い。

id
動画ID
title
動画タイトル
url
動画URL
ext
拡張子
alt_title
secondary titleってサブタイトルでいいんだろうか
display_id
動画IDと何が違うのか不明
uploader
動画upload者のフルネーム
license
動画のライセンス
creator
動画の制作者
release_date
YYYYMMDDで表される動画のrelease日時
timestamp
動画が公開されたtimestamp
upload_date
YYYYMMDDで表される動画のupload日時
uploader_id
動画upload者のIDもしくはニックネーム
location
動画が撮影された場所
duration
動画の長さ
view_count
動画の閲覧数
like_count
動画のポジティブな評価数
dislike_count
動画のネガティブな評価数
repost_count
動画のrepostつまり引用の数
average_rating
動画の平均評価数
comment_count
動画のコメント数
age_limit
動画の制限年齢
is_live
live streamつまり生放送なのかどうか
start_time
URLで指定されている再生開始時間とあるがyoutubeでたまに見る奴の事だろうか。
end_time
URLで指定されている再生終了時間。
format
動画フォーマット
format_id
動画フォーマットコード
format_note
動画フォーマットの追加情報
width
動画解像度の幅
height
動画解像度の高さ
resolution
動画解像度
tbr
音声と映像の平均bitrate
abr
音声の平均bitrate
acodec
音声codec
asr
音声のサンプリングレート
vbr
映像の平均bitrate
fps
映像のFPS
vcodec
映像codec
container
動画のコンテナフォーマット
filesize
ファイルサイズ
filesize_approx
概算ファイルサイズ
protocol
http等のプロトコル
extractor
要はyoutube等のドメイン
extractor_key
上記と似ているがこっちはサービス名で微妙に違う
epoch
ファイル作成したUINX TIME
autonumber
ダウンロードごとに振られる連番
playlist
プレイリスト名もしくはID
playlist_index
プレイリスト内動画のindex
playlist_id
プレイリストID
playlist_title
プレイリストタイトル
playlist_uploader 追加
プレイリストupload者のフルネーム
playlist_uploader_id 追加
プレイリストupload者のID

チャプターもしくはセクションを持っているときに使用可能

chapter
チャプターのタイトル
chapter_number
チャプターの数
chapter_id
チャプターのID

シリーズもしくはエピソードを持っているときに使用可能

series
シリーズのタイトル
season
シーズンのタイトル
season_number
シーズンの数
season_id
シーズンのID
episode
エピソードのタイトル
episode_number
エピソードの数
episode_id
エピソードのID

音楽アルバム等で使用可能

track
タイトル
track_number
track number
track_id
トラックID
artist
Artist
genre
ジャンル
album
アルバム名
album_type
アルバムタイプ
album_artist
Album Artist
disc_number
Disc Number
release_year
YYYYで表される発売年

例えばこんな感じで使う。

-o %(title)s-%(id)s.%(ext)s

Windowsのbatch fileで使う場合は

-o "%%(title)s-%%(id)s.%%(ext)s"

と%をエスケープする。

捕捉

コメント欄で指摘があったがterminalでは

-o '%(title)s.%(ext)s'

としないとむしろ動かないらしい(コメント欄では-o '&(title)s.%(ext)s'となってたが&は%の打ち間違いだろう)。terminalだからLinuxかね。Accentさんありがとう。ようはpath部分を’で囲めって事だね。Linux環境を持ってないので確認不可能だが念のため。

FORMAT SELECTION

formatオプションで使用する。使用可能なformat codeは--list-formatsで確認できる。
format codeを指定する。

-f 22

こんな指定の仕方も出来る。best, worst, bestvideo, worstvideo, bestaudio, worstaudioがある。

-f best

細かく絞り込む事も出来る。

-f "best[height=720]"
-f "[filesize>10M]"
-f "[height <=? 720][tbr>500]"

カンマで複数指定出来る。

-f 136/137/mp4/bestvideo,140/m4a/bestaudio

優先順位を指定する。22がなければ17、それもなければ18をダウンロードする。

-f 22/17/18

映像と音声のformat codeを別々に指定する事も可能。指定方法はvideo format + audio format。ただしffmpegかavconvのどちらかが必要。

-f bestvideo+bestaudio

こんな指定の仕方も可能。この場合高さ480以下のmp4とwebmをダウンロードする。

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

FAQ

ただしどうでも良い項目は省略

using output template conflicts with using title, video ID or auto numberというエラーが出る。
--idと-oを同時に指定するなど矛盾がある。
402エラーが返ってくるけどこれは何。
YouTubeへのアクセス過多。ブラウザでCAPTCHAをクリアする事。
他に何かプログラムはいるのか。
単独で動きはするがffmpegもしくはavconvはあった方が良い。rtmpdumpもあればRTMPプロトコルを扱えるようになるが正直出番はあまりない。
URLに&が含まれているとエラーが返る。
&は特殊文字扱いなのでURLを""で囲む事。
429または402エラーが返る。
アクセス過多でIPがブロックされている可能性が高い。サービス管理者に問い合わせるか--proxyや--source-address等を使う事。
HLSは--hls-prefer-nativeと--hls-prefer-ffmpegのどちらがいいのか。
youtube-dlは最適な方を自動で選ぶようになっているそうな。しかしnativeじゃないと使えないoptionもある。