yt-dlpでYouTubeで配信されているラジオをダウンロードして視聴する

YouTubeで配信されているラジオ番組の1話を視聴して面白かったのでダウンロードして移動中などに聞こうと思いました．ダウンロードにはyt-dlpを利用しました．

GitHub – yt-dlp/yt-dlp: A youtube-dl fork with additional features and fixes

使い方はyoutube-dlとほぼ同じですが少し動作が違う部分があるので，NEW FEATURES, Differences in default behavior に目を通しておくといいと思います．

対応サイトは以下を見ると現在1500以上ありそうです．

yt-dlp/supportedsites.md at master · yt-dlp/yt-dlp · GitHub

$ curl -s https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/supportedsites.md | grep -E -- ^\ -\ ** | wc -l
1532

ということでまずは導入．いくつか導入方法がありますが，シングルバイナリをダウンロードするのがお手軽かなと思います．

$ wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/latest/download/SHA2-512SUMS
$ sha512sum -c ./SHA2-512SUMS 2>&1 | grep OK
yt-dlp: OK
$ install -m700 ./yt-dlp ~/bin/
$ rm ./yt-dlp ./SHA2-512SUMS

アップデートは -U オプションをつけて実行するだけでOKなのでお手軽です．

$ yt-dlp -U
Latest version: 2022.03.08.1, Current version: 2022.03.08.1
yt-dlp is up to date (2022.03.08.1)

まずは -F オプションでフォーマットを確認．

$ yt-dlp -F https://www.youtube.com/watch?v=A3vKWR3WXWk
A3vKWR3WXWk: Downloading webpage
A3vKWR3WXWk: Downloading android player API JSON
[info] Available formats for A3vKWR3WXWk:
ID EXT RESOLUTION FPS │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb2 mhtml 48x27 │ mhtml │ images storyboard
sb1 mhtml 80x45 │ mhtml │ images storyboard
sb0 mhtml 160x90 │ mhtml │ images storyboard
139 m4a audio only │ 11.91MiB 48k https │ audio only mp4a.40.5 48k 22050Hz low, m4a_dash
249 webm audio only │ 12.64MiB 51k https │ audio only opus 51k 48000Hz low, webm_dash
250 webm audio only │ 16.25MiB 66k https │ audio only opus 66k 48000Hz low, webm_dash
140 m4a audio only │ 31.61MiB 129k https │ audio only mp4a.40.2 129k 44100Hz medium, m4a_dash
251 webm audio only │ 30.82MiB 126k https │ audio only opus 126k 48000Hz medium, webm_dash
17 3gp 176x144 12 │ 13.01MiB 53k https │ mp4v.20.3 53k mp4a.40.2 0k 22050Hz 144p
160 mp4 256x144 24 │ 3.25MiB 13k https │ avc1.4d400c 13k video only 144p, mp4_dash
278 webm 256x144 24 │ 4.25MiB 17k https │ vp9 17k video only 144p, webm_dash
133 mp4 426x240 24 │ 5.94MiB 24k https │ avc1.4d4015 24k video only 240p, mp4_dash
242 webm 426x240 24 │ 6.80MiB 27k https │ vp9 27k video only 240p, webm_dash
134 mp4 640x360 24 │ 9.56MiB 39k https │ avc1.4d401e 39k video only 360p, mp4_dash
18 mp4 640x360 24 │ 48.99MiB 200k https │ avc1.42001E 200k mp4a.40.2 0k 44100Hz 360p
243 webm 640x360 24 │ 24.36MiB 99k https │ vp9 99k video only 360p, webm_dash
135 mp4 854x480 24 │ 13.12MiB 53k https │ avc1.4d401e 53k video only 480p, mp4_dash
244 webm 854x480 24 │ 19.99MiB 81k https │ vp9 81k video only 480p, webm_dash
136 mp4 1280x720 24 │ 17.42MiB 71k https │ avc1.4d401f 71k video only 720p, mp4_dash
22 mp4 1280x720 24 │ ~50.09MiB 200k https │ avc1.64001F 200k mp4a.40.2 0k 44100Hz 720p
247 webm 1280x720 24 │ 38.85MiB 159k https │ vp9 159k video only 720p, webm_dash
137 mp4 1920x1080 24 │ 42.01MiB 172k https │ avc1.640028 172k video only 1080p, mp4_dash
248 webm 1920x1080 24 │ 71.89MiB 294k https │ vp9 294k video only 1080p, webm_dash

ラジオで静止画しか付いていないので，音質が良くて小さいopusの 251 がいいかなと思ったのですが， --embed-thumbnail オプションでサムネイルを埋め込もうとするとopusのwebpには埋め込めないようだったのでmp4aの 140 にすることにしました．

yt-dlp -f 140 –embed-thumbnail A3vKWR3WXWk

[ThumbnailsConvertor] Converting thumbnail "/tmp/【公式】その着せ替え人形はラジオをする（第1回） [A3vKWR3WXWk].webp" to png
ERROR: Supported filetypes for thumbnail embedding are: mp3, mkv/mka, ogg/opus/flac, m4a/mp4/mov

ということでこういう感じでサムネイル画像埋め込みでダウンロードできました．

$ yt-dlp -f 140 --embed-thumbnail A3vKWR3WXWk

ファイラーでもサムネイルが表示されていい感じです．

1話目がダウンロードできましたが，現在13話まで配信されています．1話づつダウンロードするのは面倒．プレイリストはあるけどラジオ以外のものも配信されています．でもタイトルを見るとラジオかどうかはわかるのでタイトルでフィルターしてラジオだけをダウンロードすることにしました．

フィルタには --match-filter オプションを使い，title~=フィルタ という感じで使います．ということでこんな感じでダウンロードしてみると，プレイリストをチェックしてフィルタにマッチするものだけをダウンロードしてくれました．これでオフラインでもいつでも聞けます :)

$ yt-dlp -f 140 --embed-thumbnail --match-filter "title~=ラジオをする" https://www.youtube.com/watch?list=PLUH30mfo5wJwdafMdAJFcrcryUbYiixl4

環境

$ yt-dlp --version
2022.03.08.1
$ dpkg-query -W python3 ffmpeg
ffmpeg 7:4.3.3-0+rpt3+deb11u1
python3 3.9.2-3
$ lsb_release -dr
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
$ arch
armv7l
$ cat /proc/device-tree/model && echo
Raspberry Pi 3 Model B Rev 1.2

関連

linux:yt-dlp [wiki.matoken.org]

linux:youtube-dl [wiki.matoken.org]

linux:video_download [wiki.matoken.org]