週休3日サラリーマンのブログ

空気を読まないサラリーマンをやってます。1980生まれ男です。既婚。2011年生まれ息子、2013年生まれ娘あり。

(YouTubeダウンロード)yt-dlp使い方の補足(エラー対処、画質指定)

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くらいになり、満足。