YouTubeダウンロードをするコマンドラインアプリ「yt-dlp」をインストールしてたまに使っているが、下記2点、調べて解決したので自分のために記事をまとめておく。
(1)ダウンロードがエラーになったときの対処
(2)保存する画質・音質を選択する方法
■(1)ダウンロードがエラーになったときの対処
普通に動画をダウンロードしようとしたとき、以下のようなエラーが出ることがある。
$ yt-dlp https://youtu.be/4fA9mGrdoEk?si=A2mzye6-hPgKKNNk [youtube] Extracting URL: https://youtu.be/4fA9mGrdoEk?si=A2mzye6-hPgKKNNk [youtube] 4fA9mGrdoEk: Downloading webpage (途中略) [download] Got error: HTTP Error 401: Unauthorized. Retrying fragment 113 (10/10)... ERROR: Unable to download video: [Errno 2] No such file or directory: '/Users/taka/Downloads/【杉田水脈】物議醸した発言…なぜ?差別的指摘も!ひろゆきと語る|アベプラ [4fA9mGrdoEk].f234.mp4.part-Frag89' TakaBookAirM1:yt-dlp taka$ yt-dlp -U Current version: stable@2025.02.19 from yt-dlp/yt-dlp Latest version: stable@2025.06.25 from yt-dlp/yt-dlp ERROR: You installed yt-dlp from a manual build or with a package manager; Use that to update
【対処法】yt-dlpをアップデートする。
$ brew upgrade yt-dlp
■(2)保存する画質・音質を選択する方法
サンプルとして用いるのはこの動画。アベプラで保守派の議員・杉田水脈がリベラル論客に”集団リンチ”された回で、私はこの議論を詳細に分析して「アベプラでリベラル論客に”集団リンチ”された杉田水脈さんはどう反論すればよかったか」という記事まで書いたので、当該動画が削除されることに備えてダウンロードしておく。
「【杉田水脈】保守って何だ?いがみ合いを超えて統合を?ひろゆきと語る|アベプラ」
https://youtu.be/USu-xu6cZX0?si=1tqadRxKOXjZGDhD(https://youtu.be/USu-xu6cZX0?si==1tqadRxKOXjZGDhD)
まず、この動画をオプション指定なし(デフォルト設定)でダウンロードしてみる。
$ yt-dlp https://youtu.be/USu-xu6cZX0?si=1tqadRxKOXjZGDhD
結果、ダウンロードした動画の容量は、約20分で435MB。1時間に換算すると約1.2GBになってしまう。討論番組にここまでの画質は必要ないので、画質を落として容量の節約を試みる。
まず、-Fオプションで、このYouTube動画のVideo/Audio/サムネイルの一覧を取得できる。
$ yt-dlp -F https://youtu.be/4fA9mGrdoEk?si=A2mzye6-hPgKKNNk [youtube] Extracting URL: https://youtu.be/4fA9mGrdoEk?si=A2mzye6-hPgKKNNk [youtube] 4fA9mGrdoEk: Downloading webpage [youtube] 4fA9mGrdoEk: Downloading tv client config [youtube] 4fA9mGrdoEk: Downloading tv player API JSON [youtube] 4fA9mGrdoEk: Downloading ios player API JSON [youtube] 4fA9mGrdoEk: Downloading m3u8 information [info] Available formats for 4fA9mGrdoEk: ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── sb3 mhtml 48x27 0 │ mhtml │ images storyboard sb2 mhtml 80x45 0 │ mhtml │ images storyboard sb1 mhtml 160x90 0 │ mhtml │ images storyboard sb0 mhtml 320x180 0 │ mhtml │ images storyboard 233 mp4 audio only │ m3u8 │ audio only unknown [ja] Untested, Default, low 234 mp4 audio only │ m3u8 │ audio only unknown [ja] Untested, Default, high 249-drc webm audio only 2 │ 13.67MiB 50k https │ audio only opus 50k 48k [ja] low, DRC, webm_dash 250-drc webm audio only 2 │ 15.56MiB 57k https │ audio only opus 57k 48k [ja] low, DRC, webm_dash 249 webm audio only 2 │ 13.66MiB 50k https │ audio only opus 50k 48k [ja] low, webm_dash 250 webm audio only 2 │ 15.51MiB 57k https │ audio only opus 57k 48k [ja] low, webm_dash 251-drc webm audio only 2 │ 28.00MiB 103k https │ audio only opus 103k 48k [ja] medium, DRC, webm_dash 251 webm audio only 2 │ 27.89MiB 103k https │ audio only opus 103k 48k [ja] medium, webm_dash 140-drc m4a audio only 2 │ 35.12MiB 129k https │ audio only mp4a.40.2 129k 44k [ja] medium, DRC, m4a_dash 140 m4a audio only 2 │ 35.12MiB 129k https │ audio only mp4a.40.2 129k 44k [ja] medium, m4a_dash 278 webm 256x144 30 │ 19.11MiB 70k https │ vp9 70k video only 144p, webm_dash 242 webm 426x240 30 │ 28.44MiB 105k https │ vp9 105k video only 240p, webm_dash 243 webm 640x360 30 │ 61.13MiB 225k https │ vp9 225k video only 360p, webm_dash 244 webm 854x480 30 │ 91.05MiB 336k https │ vp9 336k video only 480p, webm_dash 247 webm 1280x720 30 │ 168.57MiB 621k https │ vp9 621k video only 720p, webm_dash 248 webm 1920x1080 30 │ 326.42MiB 1203k https │ vp9 1203k video only 1080p, webm_dash 602 mp4 256x144 15 │ ~ 25.21MiB 93k m3u8 │ vp09.00.10.08 93k video only Untested 269 mp4 256x144 30 │ ~ 53.16MiB 196k m3u8 │ avc1.4D400C 196k video only Untested 160 mp4 256x144 30 │ 13.22MiB 49k https │ avc1.4d400c 49k video only 144p, mp4_dash 603 mp4 256x144 30 │ ~ 48.21MiB 178k m3u8 │ vp09.00.11.08 178k video only Untested 394 mp4 256x144 30 │ 15.16MiB 56k https │ av01.0.00M.08 56k video only 144p, mp4_dash 229 mp4 426x240 30 │ ~ 68.70MiB 253k m3u8 │ avc1.4D4015 253k video only Untested 133 mp4 426x240 30 │ 20.42MiB 75k https │ avc1.4d4015 75k video only 240p, mp4_dash 604 mp4 426x240 30 │ ~ 79.55MiB 293k m3u8 │ vp09.00.20.08 293k video only Untested 395 mp4 426x240 30 │ 24.04MiB 89k https │ av01.0.00M.08 89k video only 240p, mp4_dash 230 mp4 640x360 30 │ ~127.40MiB 470k m3u8 │ avc1.4D401E 470k video only Untested 134 mp4 640x360 30 │ 34.61MiB 128k https │ avc1.4d401e 128k video only 360p, mp4_dash 18 mp4 640x360 30 2 │ 121.92MiB 449k https │ avc1.42001E mp4a.40.2 44k [ja] 360p 605 mp4 640x360 30 │ ~175.02MiB 645k m3u8 │ vp09.00.21.08 645k video only Untested 396 mp4 640x360 30 │ 43.63MiB 161k https │ av01.0.01M.08 161k video only 360p, mp4_dash 231 mp4 854x480 30 │ ~176.99MiB 653k m3u8 │ avc1.4D401F 653k video only Untested 135 mp4 854x480 30 │ 52.55MiB 194k https │ avc1.4d401f 194k video only 480p, mp4_dash 606 mp4 854x480 30 │ ~265.85MiB 980k m3u8 │ vp09.00.30.08 980k video only Untested 397 mp4 854x480 30 │ 73.03MiB 269k https │ av01.0.04M.08 269k video only 480p, mp4_dash 232 mp4 1280x720 30 │ ~289.76MiB 1068k m3u8 │ avc1.4D401F 1068k video only Untested 136 mp4 1280x720 30 │ 95.47MiB 352k https │ avc1.4d401f 352k video only 720p, mp4_dash 609 mp4 1280x720 30 │ ~442.10MiB 1630k m3u8 │ vp09.00.31.08 1630k video only Untested 398 mp4 1280x720 30 │ 128.88MiB 475k https │ av01.0.05M.08 475k video only 720p, mp4_dash 270 mp4 1920x1080 30 │ ~996.94MiB 3676k m3u8 │ avc1.640028 3676k video only Untested 137 mp4 1920x1080 30 │ 394.65MiB 1455k https │ avc1.640028 1455k video only 1080p, mp4_dash 614 mp4 1920x1080 30 │ ~742.15MiB 2737k m3u8 │ vp09.00.40.08 2737k video only Untested 399 mp4 1920x1080 30 │ 243.85MiB 899k https │ av01.0.08M.08 899k video only 1080p, mp4_dash 616 mp4 1920x1080 30 │ ~ 1.49GiB 5632k m3u8 │ vp09.00.40.08 5632k video only Untested, Premium
一方、先ほどデフォルト設定でダウンロードした動画情報を「MediaInfo」というアプリで調べると下記の通り。

どういうわけだか分からないが、「yt-dlp- -F」の情報とビットレートの値が完全一致しないが、おそらくデフォルトで保存された動画のVideoとAudioのストリームは以下だろう。
> Video: 3,010 Kbps, 1920*1080 30fps VP9
>
614 mp4 1920x1080 30 │ ~742.15MiB 2737k m3u8 │ vp09.00.40.08 2737k video only Untested
> Audio: 128Kbps, 44.1kHz, 2ch, AAC LC
>
140-drc m4a audio only 2 │ 35.12MiB 129k https │ audio only mp4a.40.2 129k 44k [ja] medium, DRC, m4a_dash 140 m4a audio only 2 │ 35.12MiB 129k https │ audio only mp4a.40.2 129k 44k [ja] medium, m4a_dash
次に、どのVideo/Audioコーデックを使うか決める。
私が参考にしたサイト(※)によると、用途別のおすすめ設定は以下の通りとのこと。
・高画質再生:mp4 + AVC/H.264(再生互換性が高い)
・軽量化・長時間保存:webm + VP9/Opus(高圧縮&高音質)
・編集前提:mkv形式(多形式統合がしやすい)
・音声のみ:m4aまたはmp3(互換性と管理のしやすさ)
(※)「yt-dlpオプション完全ガイド|画質・音声・保存先まで徹底設定|ツールxトリセツ」
https://tooltorisetsu.xyz/yt-dlp-option/#index_id15
これを踏まえて、VideoはVP9コーデックの480p、
247 webm 1280x720 30 │ 168.57MiB 621k https │ vp9 621k video only 720p, webm_dash
Audioはopusコーデックの103kbps(DRC:Dynamic Range Compressionの略。最も小さい音と最も大きい音の差を小さくして聞きやすくしたもの)にした。
251-drc webm audio only 2 │ 28.00MiB 103k https │ audio only opus 103k 48k [ja] medium, DRC, webm_dash
以下オプションをつけて実行する。
$ yt-dlp -f 251-drc+244 https://youtu.be/USu-xu6cZX0?si=1tqadRxKOXjZGDhD --embed-thumbnail --embed-chapter
サムネイルとチャプターをつけるオプションはうまく動作しなかったが、調べるのが面倒なので今回は妥協。動画のサイズは63MBになった。1時間に換算すると約180MB。デフォルト設定の7分の1くらいになり、満足。