youtube-dlを使う際、一度は「youtube-dl 最高画質 最高音質」と検索すると思いますがネットで調べて出てくる記事の多くはyoutube-dlの使い方を間違って書いていることが多いです
youtube-dl -f bestvideo+bestaudio --merge-output-format mp4 [URLまたは動画ID]
例えば上のコマンドでは正しくダウンロードができません
正しい使い方をしていないためダウンロードは出来てもERROR: Stream #1:0 -> #0:1 (copy)などとffmpeg関係のエラーが出て出力や結合に失敗します
この記事ではyoutube-dlの正しい使い方と解説をしていきます(というかリファレンス読んだほうが早い)
あとffmpegはダウンロードしておいてください
最高品質で動画をダウンロードするテンプレ
youtube-dl -f bestvideo[ext=webm]+bestaudio[ext=webm] --merge-output-format webm --recode-video mp4 [URLまたは動画ID]
上記コマンドが最高品質かつ安定してダウンロード出来ます
これにサムネイルの追加やらメタデータの追加やら各自で追加して使用してください
上のコードだと出力がmp4ですがそれも各自で変えてください
対応フォーマットは mp4 flv ogg webm mkv avi です
※webmで出力したいなら–recode-video mp4を消してください
解説
youtubeの仕様でどの動画も以下の2つであるということを覚えておきましょう
- 音声ファイルと動画ファイルが別々に保存されてる
- webmが最高品質
動画ファイルと音声ファイルをどちらともダウンロードするようにコマンドを書きます
bestを指定しているとwebmやmp4やm4aが混合して結合する際に扱いが面倒なのでwebmだけをダウンロードするように指定します
-f bestvideo[ext=webm]+bestaudio[ext=webm]
このままでは動画ファイルと音声ファイルがバラバラにダウンロードされるだけなので結合します
先程webm形式でダウンロードしたのでwebm形式を指定します
ここでmp4などを指定すると変換エラーになります
webmとmp4は形式が違うのでマージできません
--merge-output-format webm
最後にmp4に変換します
--recode-video mp4
とても時間がかかります
まとめ
- bestvideoやbestaudioを使うときは拡張子を指定したほうがいい
- –merge-output-formatはあくまでマージするフォーマットであり出力するフォーマットではない
- 出力したい形式が決まっているなら基本的には–recode-videoを使う
おまけ
720pでいいから高速でmp4をダウンロードする
mp4にそのままマージできるので–recode-videoは不要です
youtube-dl -f bestvideo[ext=mp4]+bestaudio[ext=m4a] --merge-output-format mp4 [URLまたは動画ID]
最高品質で音声をダウンロード
マージする必要がないので–merge-output-formatは不要です
また–audio-formatでフォーマットを指定します
対応フォーマットは best aac flac mp3 m4a opus vorbis wav です
youtube-dl -f bestaudio[ext=webm] --audio-format mp3 [URLまたは動画ID]
メタデータ埋め込み引数
これを[URLまたは動画ID]の直前に入力してください
--embed-thumbnail --add-metadata