youtube-dl オプション一覧及びそのメモ
youtube-dlという物を覚えた。Pythonとかエンジンがいるのかよ使いにくいなあ思ったらちゃんとexeもある。これは便利。便利だがコマンドラインの説明が何処にもない。あるのは英語の公式リファレンスだけ。仕方ないので自分でまとめることにした。youtubeから1080pの動画を落としたいだけという動機の人間が書いた、自分さえ分かれば良いというメモである。決して完全な日本語訳を目指した訳ではないのでそのつもりで。
修正にあたって新たにエントリを起こすかとも思ったが同じようなエントリを何個も書いてもしょうがないので。
\youtube-dl.conf」にファイルを置けと書いてあるがyoutube-dl.confの方はエラーが出てうまくいかなかった。
.netrcにもちょっとだけ触れておこう。これはログインのユーザー名とパスワードをまとめておく物。中の書式は
format codeを指定する。
修正にあたって新たにエントリを起こすかとも思ったが同じようなエントリを何個も書いてもしょうがないので。
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、curl、ffmpeg、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
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\-x --no-mtime --proxy 127.0.0.1:3128 -o ~/Movies/%(title)s.%(ext)s # Lines starting with # are comments#から始まる行はコメントとして扱われる。なおoオプションのフォルダの区切りは\ではなく/である事に注意。\では認識しない。
.netrcにもちょっとだけ触れておこう。これはログインのユーザー名とパスワードをまとめておく物。中の書式は
machineとなるのでlogin 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)sWindowsのbatch fileで使う場合は
-o "%%(title)s-%%(id)s.%%(ext)s"と%をエスケープする。
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 pre="">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もある。
コメント
コメントを投稿