Hatena::ブログ(Diary)

†MASAYOSHI†のオンラインメモ帳

 | 

2015-09-05

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

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
そのまんま動画のパスワード。どうも必要なサイトが複数あるらしい。
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
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]"

AccentAccent 2016/06/25 12:08 自分のところでは
```
-o '&(title)s.%(ext)s'
```
として動きました。ターミナル上ではこっちじゃないと動かなかったです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/masayoshi_9a7ee/20150905/1441414821
 |