【概要】
Youtubeの動画をダウンロードするためにyt-dlpを導入したので、自分が使用したオプションなども含めてメモとして残しておきます。
初めはyoutube-dlを使用しようと思っていましたが、調べてみると既に開発は終了して現在は改良版のyt-dlpがあるということで改めてインストールしました。
youtube-dlと使い勝手はあまり変わらず、ダウンロード速度が速いなど利点が結構あるようです。
対象環境
- MacBook Pro (M1, 2020)
- MacOS Monterey ver.12.6
【手順説明】
導入
基本的には下記GitHubのReadmeに書いてある説明の通りです。
yt-dlpのインストール方法は複数あるようですが、今回はHomeBrewを使用してインストールします。
インストール後にバージョンが確認できれば成功です。
brew install yt-dlp
yt-dlp --version
単純に動画をダウンロードするだけであれば上記のみで良いですが、画質・音質を指定する場合などは動画処理が必要になるのでffmpegもインストールしておきましょう。
brew install ffmpeg
これで導入は完了です。
使用方法
基本的には下記のみでダウンロードは可能です。
ただしこのままだとファイル形式がwebmだったりタイトルに動画IDが含まれたりするので、望む形でダウンロードするにはオプション指定が必要です。
yt-dlp [動画URL]
オプション
-
--list-extractors
:対応サイト一覧 -
-f (--format)
:ダウンロードする解像度などを指定(後述) -
-F (--list-formats)
:ダウンロード可能な画質・音質などの種類を一覧で出力 -
--merge-output-format
:ダウンロードした動画と音声を結合するときのフォーマットを指定 -
-o (--output)
:アウトプットするファイル名を指定。タイトルやチャンネル名など組み合わせて指定可能- %(title)s:動画タイトル
- %(channel)s:チャンネル名
- %(ext)s:最適な拡張子
その他使えるフィールド名
使用例
オプションについて順に説明していくので、読むのが面倒であれば下記の内容を使用してください。
yt-dlp [動画URL] -o "~/%(channel)s/%(title)s.%(ext)s" -f bv+ba/b --merge-output-format mp4
# チャンネルごとにディレクトリを作って動画を保存、画質・音声は最良、出力形式はmp4
オプション説明
試しにオプションを付けずに動画をダウンロードしてみます。
yt-dlp "https://www.youtube.com/watch?v=8bX5ASmVh4Q"
この動画の場合、特に何も指定しない場合はwebm形式で出力されました。
-F
を付けてダウンロード可能なファイル形式を見てみます。
yt-dlp "https://www.youtube.com/watch?v=8bX5ASmVh4Q" -F
[youtube] 8bX5ASmVh4Q: Downloading webpage
[youtube] 8bX5ASmVh4Q: Downloading android player API JSON
[info] Available formats for 8bX5ASmVh4Q:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb2 mhtml 48x27 2 │ mhtml │ images storyboard
sb1 mhtml 80x45 1 │ mhtml │ images storyboard
sb0 mhtml 160x90 1 │ mhtml │ images storyboard
599 m4a audio only 2 │ 227.05KiB 31k https │ audio only mp4a.40.5 31k 22k ultralow, m4a_dash
600 webm audio only 2 │ 251.32KiB 34k https │ audio only opus 34k 48k ultralow, webm_dash
139 m4a audio only 2 │ 359.17KiB 49k https │ audio only mp4a.40.5 49k 22k low, m4a_dash
249 webm audio only 2 │ 368.65KiB 50k https │ audio only opus 50k 48k low, webm_dash
250 webm audio only 2 │ 488.16KiB 67k https │ audio only opus 67k 48k low, webm_dash
140 m4a audio only 2 │ 950.87KiB 130k https │ audio only mp4a.40.2 130k 44k medium, m4a_dash
251 webm audio only 2 │ 967.14KiB 132k https │ audio only opus 132k 48k medium, webm_dash
17 3gp 176x144 8 1 │ 583.24KiB 79k https │ mp4v.20.3 79k mp4a.40.2 0k 22k 144p
597 mp4 256x144 15 │ 242.88KiB 33k https │ avc1.4d400b 33k video only 144p, mp4_dash
598 webm 256x144 15 │ 202.67KiB 28k https │ vp9 28k video only 144p, webm_dash
394 mp4 256x144 30 │ 481.98KiB 66k https │ av01.0.00M.08 66k video only 144p, mp4_dash
160 mp4 256x144 30 │ 476.95KiB 65k https │ avc1.4d400c 65k video only 144p, mp4_dash
278 webm 256x144 30 │ 601.49KiB 82k https │ vp9 82k video only 144p, webm_dash
395 mp4 426x240 30 │ 895.57KiB 122k https │ av01.0.00M.08 122k video only 240p, mp4_dash
133 mp4 426x240 30 │ 769.59KiB 105k https │ avc1.4d4015 105k video only 240p, mp4_dash
242 webm 426x240 30 │ 1.03MiB 144k https │ vp9 144k video only 240p, webm_dash
396 mp4 640x360 30 │ 1.71MiB 238k https │ av01.0.01M.08 238k video only 360p, mp4_dash
134 mp4 640x360 30 │ 1.38MiB 192k https │ avc1.4d401e 192k video only 360p, mp4_dash
18 mp4 640x360 30 2 │ ~ 2.35MiB 321k https │ avc1.42001E 321k mp4a.40.2 0k 44k 360p
243 webm 640x360 30 │ 1.75MiB 244k https │ vp9 244k video only 360p, webm_dash
397 mp4 854x480 30 │ 2.95MiB 411k https │ av01.0.04M.08 411k video only 480p, mp4_dash
135 mp4 854x480 30 │ 1.90MiB 266k https │ avc1.4d401f 266k video only 480p, mp4_dash
244 webm 854x480 30 │ 2.53MiB 353k https │ vp9 353k video only 480p, webm_dash
22 mp4 1280x720 30 2 │ ~ 11.07MiB 1511k https │ avc1.64001F 1511k mp4a.40.2 0k 44k 720p
398 mp4 1280x720 30 │ 5.68MiB 793k https │ av01.0.05M.08 793k video only 720p, mp4_dash
136 mp4 1280x720 30 │ 3.17MiB 443k https │ avc1.4d401f 443k video only 720p, mp4_dash
247 webm 1280x720 30 │ 4.19MiB 585k https │ vp9 585k video only 720p, webm_dash
399 mp4 1920x1080 30 │ 10.16MiB 1419k https │ av01.0.08M.08 1419k video only 1080p, mp4_dash
137 mp4 1920x1080 30 │ 10.72MiB 1498k https │ avc1.640028 1498k video only 1080p, mp4_dash
248 webm 1920x1080 30 │ 10.87MiB 1519k https │ vp9 1519k video only 1080p, webm_dash
多数の形式で出力可能なことがわかります。
この中から最高画質・音質で出力する場合は-f bestvideo+bestaudio/b
を付けます。
このオプションは「video onlyの最高画質とaudio onlyの最高音質をそれぞれダウンロード / video onlyが存在しなければ映像と音声両方を含む最高品質をダウンロード」となります。
ffmpegがインストールされていれば動画と音声をそれぞれダウンロードした後にマージしてくれます。
ちなみにこのオプションはデフォルトなのでこのままだと付ける必要はありませんが、形式指定をするときにこの形式を指定します。
再生端末によっては形式を指定しないとそのままでは見られなかったりします。
例えばID:137の映像とID:140の音声を指定する場合は下記のようになります。
yt-dlp "https://www.youtube.com/watch?v=8bX5ASmVh4Q" -f 137+140
実行すると映像と音声が別々でダウンロードされます。
これを一つの動画にするには--merge-output-format mp4
で出力します。
yt-dlp "https://www.youtube.com/watch?v=8bX5ASmVh4Q" -f 137+140 --merge-output-format mp4
これで希望する品質と形式で出力できました。
後はファイル形式を指定するオプションを付けます。
自由に指定して良いのでここでは--output '~/%(channel)s/%(title)s.%(ext)s'
としてチャンネルごとに保存することにします。
yt-dlp "https://www.youtube.com/watch?v=8bX5ASmVh4Q" -f 137+140 --merge-output-format mp4 --output '~/%(channel)s/%(title)s.%(ext)s'
これでオプションの指定は完了です。
URLには再生リストやチャンネルURLも指定でき、その中に含まれる動画を一度にダウンロードすることも可能です。
その他にもオプションがかなりあるので利用方法に合わせて使ってみましょう。
ログインが必要な場合
作成した非公開の再生リストを読み込ませる時など、URLのアクセスにログインが必要な場合があります。
その場合はサイトに一度アクセスをして、保存されたCookieを読み込ませます。
ブラウザで使用しているCookie情報を直接利用することができます。
例えばchromeを使用する場合は下記の通りで、他にもchromium、edge、firefox、opera、safariなどをサポートしています。
yt-dlp [動画URL] --cookies-from-browser chrome
また、ブラウザのCookieを直接使う以外にもファイルとして保存して読み込ませることもできます。
Chromeの場合はアドオンのEditThisCookieを使用することでCookieファイルをローカルに保存できます。
対象のサイトにログインした状態で【Cookieのエクスポート】でコピーされた内容を適当な名前を付けて保存してください。
使用するときは--cookies
を付けてファイルの場所を指定します。
yt-dlp [動画URL] --cookies cookie.txt
参考サイト
https://github.com/yt-dlp/yt-dlp
https://zenn.dev/almon/articles/f5952bf9047608
https://masayoshi-9a7ee.hatenablog.com/entry/2021/11/06/112639