yt-dlp(youtube-dl)でYouTubeから音楽ファイルをダウンロードするときのTips
前置き
Bluetooth接続ができないカーオーディオ等で子供の好きな音楽を流すようなケースを想定しています。
当然ですが、ここに書いた知見の利用は、合法な範囲で、自己の責任で行なってください。
Youtube-DLは有名なPythonアプリですが、ここでは改良版である https://github.com/yt-dlp/yt-dlp の方を使っています。
ありがとうございます。非常に参考になりました
どのフォーマットでダウンロードするか
YouTubeは音楽のみの形式を選べることが多いので、無駄な帯域を使わないためになるべく音楽のみのフォーマットを使うべきです。
コーデックは AAC-LC か opus が主流です。プレーヤーがm4a (AAC-LC)に対応している場合は、 -f m4a
とすることでダウンロード後の変換が不要になるのでおすすめです。
プレーヤーがmp3にしか対応していない場合は変換が必要になります。変換のためにはffmpegが必要です。オプションは -f bestaudio -x --audio-format mp3 --audio-quality 3
(quality は 0 が最高でデフォルトは5) がいいでしょう。
-
-f bestaudio
は一番音質が良さそうなaudio only形式を選択します。 (bestaudio*
にすると動画付きのフォーマットも対象になる) -
-x
は--extract-audio
のshort nameで、動画ファイルから音声のみのファイルを作成する後処理を有効にします。 -
--audio-format mp3 --audio-quality 3
は名前のまま。
サムネイルを埋め込む
--write-thumbnail --embed-thumbnail
を使います。前者がサムネイル画像を1つダウンロードするもので、後者がダウンロードしたサムネイル画像を埋め込むものです。
最近のサムネイル画像は、左右に枠を追加した横長のものが多いようです。それが嫌なら次の選択肢があります。
-
--list-thumbnail
を使って一覧を取得し、手動ダウンロードする -
--download-all-thumbnail
を使って全サムネイルをダウンロードし、選んだものを手動で埋め込む - 手動で四角く切り抜く
面倒なので Pillow で真ん中を四角く切り抜くようにパッチを当てて使ってます。
日本語タイトルの取得
タイトル等のメタデータの埋め込みは --add-metadata
で可能です。デフォルトのファイル名も同じメタデータを使っています。
日本語のメタデータをダウンロードするには、 --extractor-args "youtube:lang=ja"
を使うのですが、これだけだとファイル名やメタデータを日本語にできませんでした。
yt-dlpは複数のクライアントのやり方で動画の情報を取得して、メタデータはその情報の中で最初に見つけたものを使うような動作になっています。そしてどうやら、何らかの問題の回避策として、最初に最小限のリクエストを送っていて、その最小限のリクエストには上記のオプションが反映されていないようです。そのためにせっかく日本語のメタデータを取得していても、先にリクエストを投げた英語のメタデータを使ってしまっています。
とりあえずの対策として次のパッチを当てて使っています。
また、メタデータのダウンロードの種類が多すぎる気がしたので、 --extractor-args "youtube:lang=ja;player-client=android"
としてAndroid版だけを利用しています。