youtube-dlのコマンド紹介・実践

以前の記事の更新みたいな感じ。

私の好きなYouTubeチャンネルが一部動画をYouTubeから削除してしまった。収益化の都合なのだろう。
そんなことになってしまってからでは遅いのだが、消される前の保存方法としてyoutube-dlの使い方を紹介する。

下準備

youtube-dlFFmpegをダウンロードしておく。
今回私はyoutube-dlは最新版を、FFmpegはffmpeg-4.2.1-win64-staticを使った。

youtube-dl.exeとffmpeg.exeを同一フォルダ内に入れておく。このフォルダで実行する前提で話を進めていく。

必要なランタイムは以下の通り。

使用コマンド紹介

まずは私の使用しているコマンドを紹介する。

cd /d %~dp0
youtube-dl -i --download-archive [.txtのパス] -f bestvideo+251/bestvideo+bestaudio/best --merge-output-format mkv [チャンネルURL] -o "%%(upload_date)s_%%(title)s_%%(id)s"

youtube-dlのreadmeはこちら

今回サンプルとして使わせていただく動画はこちら。ネコの毛までよく見える。
8K動画なんて再生できないだろうと思っていたが自分のPCでは再生できた。ありがとうGTX1070。

cd /d %~dp0

最初の行の「cd /d %~dp0」はカレントディレクトリをバッチファイルの置いてあるディレクトリにするという意味。
別のバッチファイルからバッチファイルを呼び出す時に、同一ドライブでないとちゃんと認識してくれないのでこういった記述を行った。

youtube-dl オプション

-i

–ignore-errors を -i と省略可能
ダウンロード時にエラーが出ても無視して次のダウンロードを続ける。いちいち止まらないのでプレイリストやチャンネル一括DLの時にはこれをつけておくといい。

–download-archive [.txtのパス]

ダウンロードしたファイル(動画ID)をテキストファイルに保存する。これによってダウンロード済みの動画をスキップしてくれる。

-f

–format を -f と省略可能
format codeの指定ができる。format codeは –list-formats で取得できる。詳しくは後半で解説する。以下の記事にformat codeをまとめたものもあるので参照してほしい。

–merge-output-format

動画のみと音声のみのファイルを指定する場合は勝手に結合してくれるが、webmに入るならwebmという拡張子になったり、mp4になったりする。
フォーマットによって拡張子が変わるのは面倒なので、何でも入るコンテナのmkvを指定。全部mkvに一本化してほしい。

-o

–output を -o と省略可能
ファイル名の指定が可能。詳しくは公式リファレンス詳しく紹介しているサイトを参照。

“%%(upload_date)s_%%(title)s_%%(id)s” と指定して必ずアップロード日を入れるようにしている。こうすることでファイル名でソートしてもちゃんと並ぶ。
念の為動画IDも入れて同じ動画名やライブ放送名でも上書きされることがないようにした。

format codeをいろいろ試す

-F もしくは –list-formats をオプションで指定することで、動画のformat codeを一覧で見ることができる。

youtube-dl -F https://www.youtube.com/watch?v=egSvdEJZRBk

上記を実行すると以下のようなformat code一覧が出力される。8K動画なのでフォーマット一覧が長い。めちゃくちゃ長い。

D:\youtube-dl>youtube-dl -F https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
[info] Available formats for egSvdEJZRBk:
format code  extension  resolution note
249          webm       audio only tiny   59k , opus @ 50k (48000Hz), 7.82MiB
250          webm       audio only tiny   78k , opus @ 70k (48000Hz), 10.38MiB
140          m4a        audio only tiny  131k , m4a_dash container, mp4a.40.2@128k (44100Hz), 18.87MiB
251          webm       audio only tiny  157k , opus @160k (48000Hz), 20.90MiB
394          mp4        256x144    144p   89k , av01.0.00M.10.0.110.09.16.09.0, 30fps, video only, 9.13MiB
160          mp4        256x144    144p  112k , avc1.4d400c, 30fps, video only, 7.88MiB
278          webm       256x144    144p  122k , webm container, vp9, 30fps, video only, 12.04MiB
395          mp4        426x240    240p  203k , av01.0.00M.10.0.110.09.16.09.0, 30fps, video only, 15.74MiB
330          webm       256x144    144p60 HDR  245k , vp9.2, 60fps, video only, 25.10MiB
133          mp4        426x240    240p  246k , avc1.4d4015, 30fps, video only, 15.69MiB
242          webm       426x240    240p  263k , vp9, 30fps, video only, 21.30MiB
396          mp4        640x360    360p  381k , av01.0.01M.10.0.110.09.16.09.0, 30fps, video only, 29.46MiB
331          webm       426x240    240p60 HDR  512k , vp9.2, 60fps, video only, 57.19MiB
243          webm       640x360    360p  535k , vp9, 30fps, video only, 40.68MiB
134          mp4        640x360    360p  634k , avc1.4d401e, 30fps, video only, 43.26MiB
397          mp4        854x480    480p  718k , av01.0.04M.10.0.110.09.16.09.0, 30fps, video only, 56.16MiB
244          webm       854x480    480p  838k , vp9, 30fps, video only, 74.40MiB
332          webm       640x360    360p60 HDR 1072k , vp9.2, 60fps, video only, 131.51MiB
398          mp4        1280x720   720p60 1367k , av01.0.08M.10.0.110.09.16.09.0, 60fps, video only, 136.92MiB
135          mp4        854x480    480p 1543k , avc1.4d401f, 30fps, video only, 89.65MiB
247          webm       1280x720   720p 1831k , vp9, 30fps, video only, 158.02MiB
333          webm       854x480    480p60 HDR 2036k , vp9.2, 60fps, video only, 263.76MiB
399          mp4        1920x1080  1080p60 2435k , av01.0.09M.10.0.110.09.16.09.0, 60fps, video only, 251.53MiB
302          webm       1280x720   720p60 2859k , vp9, 60fps, video only, 260.65MiB
136          mp4        1280x720   720p 3083k , avc1.4d401f, 30fps, video only, 180.84MiB
248          webm       1920x1080  1080p 3781k , vp9, 30fps, video only, 300.20MiB
298          mp4        1280x720   720p60 4063k , avc1.4d4020, 60fps, video only, 329.72MiB
334          webm       1280x720   720p60 HDR 4819k , vp9.2, 60fps, video only, 631.95MiB
137          mp4        1920x1080  1080p 5025k , avc1.640028, 30fps, video only, 349.77MiB
303          webm       1920x1080  1080p60 5067k , vp9, 60fps, video only, 496.44MiB
299          mp4        1920x1080  1080p60 6836k , avc1.64002a, 60fps, video only, 643.51MiB
335          webm       1920x1080  1080p60 HDR 7180k , vp9.2, 60fps, video only, 976.81MiB
400          mp4        2560x1440  1440p60 7879k , av01.0.12M.10.0.110.09.16.09.0, 60fps, video only, 889.24MiB
271          webm       2560x1440  1440p 9814k , vp9, 30fps, video only, 999.14MiB
308          webm       2560x1440  1440p60 13944k , vp9, 60fps, video only, 1.54GiB
401          mp4        3840x2160  2160p60 16038k , av01.0.13M.10.0.110.09.16.09.0, 60fps, video only, 1.82GiB
336          webm       2560x1440  1440p60 HDR 17010k , vp9.2, 60fps, video only, 2.28GiB
313          webm       3840x2160  2160p 20676k , vp9, 30fps, video only, 2.33GiB
402          mp4        7680x4320  4320p60 23763k , av01.0.17M.10.0.110.09.16.09.0, 60fps, video only, 1.99GiB
315          webm       3840x2160  2160p60 27941k , vp9, 60fps, video only, 3.50GiB
337          webm       3840x2160  2160p60 HDR 30235k , vp9.2, 60fps, video only, 4.07GiB
571          mp4        7680x4320  4320p60 35897k , av01.0.17M.10.0.110.09.16.09.0, 60fps, video only, 3.29GiB
272          webm       7680x4320  4320p60 53235k , vp9, 60fps, video only, 3.15GiB
43           webm       640x360    360p , vp8.0, vorbis@128k, 109.72MiB
18           mp4        640x360    360p  566k , avc1.42001E, mp4a.40.2@ 96k (44100Hz), 82.55MiB
22           mp4        1280x720   720p 1369k , avc1.64001F, mp4a.40.2@192k (44100Hz) (best)

この中から一番高画質な映像と一番高音質な音声をダウンロードしたいと思うのが人の性。

指定なし

D:\youtube-dl>youtube-dl https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f272.webm
[download] 100% of 3.15GiB in 01:52
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f251.webm
[download] 100% of 20.90MiB in 00:00
[ffmpeg] Merging formats into "Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.webm"
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f272.webm (pass -k to keep)
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f251.webm (pass -k to keep)

まずは何も指定せずにyoutube-dlの思うがままにダウンロードしてもらう。

ここで指定されたのはf272とf251。
f272はvp9の4320p60の映像のみ。f251はopusの160k(ステレオで320k)の音声のみ。

best指定

D:\youtube-dl>youtube-dl -f best https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.mp4
[download] 100% of 199.62MiB in 00:05

一覧で取得した際に書いてある(best)をダウンロードしたのだろう。動画のサイズは199.62MiB。
どこがベストなのだろうか……

bestvideo+bestaudio指定

D:\youtube-dl>youtube-dl -f bestvideo+bestaudio https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f272.webm
[download] 100% of 3.15GiB in 01:35
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f251.webm
[download] 100% of 20.90MiB in 00:00
[ffmpeg] Merging formats into "Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.webm"
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f272.webm (pass -k to keep)
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f251.webm (pass -k to keep)

何も指定をしなかった時と同じ結果になった。youtube-dlは優秀だ。
半年くらい前はそんなに優秀じゃなかったので1080pあたりをダウンロードしていたのだが、嬉しい修正だと思う。

しかしbestvideoはどういう基準で選んでいるのだろう。
f571とf272はどちらも4320p60なのだが、フォーマットが違う。f571はAV1コーデックでf272はvp9だ。
f571よりもf272のほうがビットレートが高いのでf272を指定したのだろう。 →

worst指定

D:\youtube-dl>youtube-dl -f worst https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.webm
[download] 100% of 109.72MiB in 00:02

試しにworstを指定してみたら109.72MiBのf43(360p)をダウンロードしていた。
360pの中ならf18のほうが低画質だと思うし、144pとか240pとかは選ばないのだろうか。

worstvideo+worstaudio指定

D:\youtube-dl>youtube-dl -f worstvideo+worstaudio https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f394.mp4
[download] 100% of 9.13MiB in 00:01
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f249.webm
[download] 100% of 7.82MiB in 00:00
[ffmpeg] Merging formats into "Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.mkv"
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f394.mp4 (pass -k to keep)
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f249.webm (pass -k to keep)

ついにf394(AV1 144p)とf249(opus 50k)が選ばれた。
動画を再生してみたが酷い画質で笑ってしまった。

571+251指定

D:\youtube-dl>youtube-dl -f 571+251 https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f571.mp4
[download] 100% of 3.29GiB in 01:04
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f251.webm
[download] 100% of 20.90MiB in 00:00
[ffmpeg] Merging formats into "Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.mkv"
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f571.mp4 (pass -k to keep)
Deleting original file Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.f251.webm (pass -k to keep)

ダウンロードに成功し、再生してみると真っ暗。シークするとその場面の画像は出るがその後一切動かない状態になってしまう。

タスクマネージャーを開くと大変なことになっていた。GPUの再生支援が効いていない様子。

f571で指定したAV1の4320p60動画は再生支援が効いていない
GPUはGTX1070を使用している
bestvideo+bestaudioで指定したVP9の4320p60動画は再生支援が効いている
こちらも同様にGTX1070を使用

特定のフォーマットのみダウンロードしたい

youtube-dl -f 571,272 https://www.youtube.com/watch?v=egSvdEJZRBk
D:\youtube-dl>youtube-dl -f 571,272 https://www.youtube.com/watch?v=egSvdEJZRBk
[youtube] egSvdEJZRBk: Downloading webpage
[youtube] egSvdEJZRBk: Downloading video info webpage
[info] egSvdEJZRBk: downloading video in 2 formats
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.mp4
[download] 100% of 3.29GiB in 01:32
[download] Destination: Collection Of Animals 8K HDR 60FPS-egSvdEJZRBk.webm
[download] 100% of 3.15GiB in 01:59

フォーマットを指定する時はfをつけずに数字を書く。
カンマで区切ることで複数のフォーマットをダウンロードできる

一括で全部のフォーマットを落としたい場合は「-f xxx」を外して「–all-format」を入れるだけで全部落ちてくる。すごい。ストレージ殺し。

WARNINGについて

WARNING: Requested formats are incompatible for merge and will be merged into mkv.

webmのコンテナには入らないフォーマットを指定した時に上の表示がされる。勝手にmkvに入れてくれるので安心していい。

参考サイト

ytdl-org/youtube-dl
Command-line program to download videos from YouTube.com and other video sites - ytdl-org/youtube-dl

コメント

タイトルとURLをコピーしました