youtube-dlでStream#1:0->#0:1が出るときの対処法と最高画質でダウンロードする方法

2021年3月13日

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