Open4

yt-dlp(youtube-dl)でYouTubeから音楽ファイルをダウンロードするときのTips

methanemethane

前置き

Bluetooth接続ができないカーオーディオ等で子供の好きな音楽を流すようなケースを想定しています。
当然ですが、ここに書いた知見の利用は、合法な範囲で、自己の責任で行なってください。

Youtube-DLは有名なPythonアプリですが、ここでは改良版である https://github.com/yt-dlp/yt-dlp の方を使っています。

methanemethane

どのフォーマットでダウンロードするか

フォーマットオプション一覧
後処理オプション一覧

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 は名前のまま。
methanemethane

サムネイルを埋め込む

--write-thumbnail --embed-thumbnail を使います。前者がサムネイル画像を1つダウンロードするもので、後者がダウンロードしたサムネイル画像を埋め込むものです。

最近のサムネイル画像は、左右に枠を追加した横長のものが多いようです。それが嫌なら次の選択肢があります。

  • --list-thumbnail を使って一覧を取得し、手動ダウンロードする
  • --download-all-thumbnail を使って全サムネイルをダウンロードし、選んだものを手動で埋め込む
  • 手動で四角く切り抜く

面倒なので Pillow で真ん中を四角く切り抜くようにパッチを当てて使ってます。

https://github.com/methane/yt-dlp/commit/94f509b1b0079805629bb85808ff548da7863c15

methanemethane

日本語タイトルの取得

タイトル等のメタデータの埋め込みは --add-metadata で可能です。デフォルトのファイル名も同じメタデータを使っています。

日本語のメタデータをダウンロードするには、 --extractor-args "youtube:lang=ja" を使うのですが、これだけだとファイル名やメタデータを日本語にできませんでした。

yt-dlpは複数のクライアントのやり方で動画の情報を取得して、メタデータはその情報の中で最初に見つけたものを使うような動作になっています。そしてどうやら、何らかの問題の回避策として、最初に最小限のリクエストを送っていて、その最小限のリクエストには上記のオプションが反映されていないようです。そのためにせっかく日本語のメタデータを取得していても、先にリクエストを投げた英語のメタデータを使ってしまっています。

とりあえずの対策として次のパッチを当てて使っています。

https://github.com/methane/yt-dlp/commit/25be544b3c84d59b59a9dd92cdcc224e5a18e829

また、メタデータのダウンロードの種類が多すぎる気がしたので、 --extractor-args "youtube:lang=ja;player-client=web" としてiOSやAndroid版の情報取得をスキップしています。