youtube-dlという物を覚えた。Pythonとかエンジンがいるのかよ使いにくいなあ思ったらちゃんとexeもある。これは便利。便利だがコマンドラインの説明が何処にもない。あるのは英語の公式リファレンスだけ。仕方ないので自分でまとめることにした。youtubeから1080pの動画を落としたいだけという動機の人間が書いた、自分さえ分かれば良いというメモである。決して完全な日本語訳を目指した訳ではないのでそのつもりで。
修正にあたって新たにエントリを起こすかとも思ったが同じようなエントリを何個も書いてもしょうがないので。
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
- 設定ファイルを無視する。
- --flat-playlist
- プレイリスト展開のみで動画ダウンロードをしない。
- --mark-watched 追加
--no-mark-watched 追加
- youtubeのみ。要するに再生履歴に残すか残さないかの事。当然ユーザ名パスワードを一緒に指定しないと意味ない。
- --no-color
- 結果にカラーコードを生成しませんとあるが何の事やらさっぱり。
Network Options
- --proxy URL 修正
- プロキシを設定する。ただしHTTP/HTTPSのみ。SOCKSも使えるようになった。socks5://127.0.0.1:1080/のような感じで指定する。
- --socket-timeout SECONDS
- タイムアウトの秒数を指定。単位は秒。
- --source-address IP 実験的
- 恐らくはクライアント側からのパケットのソースアドレス偽装。つまり--proxyと似たような機能だろう。公式の説明がシンプル過ぎて推測でしかないが。
- -4, --force-ipv4 実験的
-6, --force-ipv6 実験的
- IPv4, IPv6を強制それぞれ強制
--cn-verification-proxy URL
--geo-verification-proxy URL 実験的 修正
- オプション名が変わってるが内容は一緒。オプション名でもその説明でもChinaと名指しなのは流石にまずいと思ったのか。--proxyと違うのはサイトのアクセス時のみの適用で動画のダウンロード時は未適用と言う点。ChinaのProxyは回線が不安定な物が多いのでそういうときはこれを使う。
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
- ダウンロード速度を制限する。
- -R, --retries RETRIES
- リトライ数を指定する。infiniteという値も一応用意されているがこんな値使うな。
- --fragment-retries RETRIES 追加
- fragmentのリトライ数。
- --buffer-size SIZE
- ダウンロードバッファを指定する。
- --no-resize-buffer
- ダウンロードバッファを自動調整しない。
- --playlist-reverse
- プレイリストの最後の動画からダウンロードする
- --xattr-set-filesize 実験的
- not availableと言われて動かない。Python版では動くらしいので単純にexe版ではモジュール不足なんだろう。
- --hls-prefer-native
--hls-prefer-ffmpeg 追加
- HLSの処理方法のオプション。nativeは自前で処理する。HLSというのはHttp Live Streamingの事でストリーミング配信用のプロトコル。nativeからexperimentalが外れた。動作が安定したという事なんだろう。
- --hls-use-mpegts 追加
- HLSでダウンロード中の再生の為にMPEG TSを使う。
- --external-downloader COMMAND
- 外部ダウンローダーを指定する。対応してるのはaria2c, axel, curl, httpie, wgetの5つ。
- --external-downloader-args ARGS
- 外部ダウンローダーに引数を渡す。
Filesystem Options
- -a, --batch-file FILE
- 動画URLを記述したファイルを指定してまとめてダウンロードする。
- --id
- ファイル名を動画IDのみとする。後述の-oと併用するとconflictで停止する。
- -o, --output TEMPLATE
- ファイル名を指定する。使用できる変数は後述のOUTPUT TEMPLATEを参照。
- --autonumber-size NUMBER
- -oの%(autonumber)sもしくは--auto-numberで与えられる数字の桁数を指定する。
- --restrict-filenames
- ファイル名をASCIIコードに制限する。
- -A, --auto-number 非推奨
- -oの%(autonumber)sを使用する事。
- -t, --title 非推奨
- ファイル名をtitleとする。
- -l, --literal 非推奨
- 上記--titleと同等。
- -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 FILE
--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
- それぞれのダウンロード前にインターバルを入れる。単位は秒。
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
- そのまんま動画のパスワード。どうも必要なサイトが複数あるらしい。
- -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
- avconvを優先して使用する。
- --prefer-ffmpeg
- ffmpegを優先して使用する。
- --ffmpeg-location PATH
- ffmpeg/avconvのPATHを指定する。
- --exec CMD
- ダウンロード後コマンドを実行する。
- --convert-subtitles FORMAT
- 字幕フォーマットを変換する。
CONFIGURATION 追加
oオプション等のいつも使うオプションを設定ファイルとしてまとめておく事が出来る。便利っちゃ便利だがサイト毎に設定を振り分ける事が出来る訳でもなくscriptから実行させていると無用の長物ではある。Windowsは「%APPDATA%\youtube-dl\config.txt」か「C:\Users\<user name>\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
- 動画の制限年齢
- 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
- プレイリストタイトル
チャプターもしくはセクションを持っているときに使用可能
- 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
捕捉
コメント欄で指摘があったが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
こんな指定の仕方も出来る。他にもbestvideo, bestaudio, worstがある。
-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]"