mp3等に画像をくっつけてmp4にサクッと変換する方法

あまり動画をいじったことなかったのだけれど、音楽をYouTubeに載せたい場合などにどうしようかなと。MP3TUBEとか簡単そうなものの画像が選べない。

YouTube でサポートされているファイル形式 - YouTube ヘルプ」では「Windows Live ムービー メーカー」などを使えとあるけど個人的にはちょっと入れるのが面倒くさい。

と、いうことでffmpegでサクッとやるには以下の方法。LinuxでもWindowsでも同様。

image.jpgの画像をinput.mp3につけてoutput.mp4にする場合、以下のコマンドでOK。

ffmpeg -loop 1 -i image.jpg -i input.mp3 -c:v copy -c:a copy -shortest output.mp4

「-loop 1」で静止画image.jpgを全フレーム反復して映像の代わりとする。
「-shortest」で入力コンテンツのうち短い長さに合わせる(今回はmp3の長さ分のmp4を作る)。
「-c:v copy」で映像は入力のまま、「-c:a copy」で音声も入力のまま。

本当はYouTubeの求める解像度やフレームレート等に合わせるとアップロード時の処理時間が短くなるけど、まあ、そこは適当に。

ちなみに開始後71秒から4秒かけてフェードアウトして全75秒で終わらせたい場合は以下のような感じ。

ffmpeg -loop 1 -i image.jpg -i input.mp3 -c:v copy -af "afade=t=out:st=71:d=4" -t 75 output.mp4
2015/12/06追記

上記だとザックリ過ぎてファイルサイズ大きいしYouTube側のアップロード/エンコード処理が掛かるので以下のような感じがよさげ。
参考:https://trac.ffmpeg.org/wiki/Encode/YouTube

ffmpeg -loop 1 -framerate 2 -i image.jpg -i input.m4a -c:v libx264 -preset medium -tune stillimage -crf 18 -af "afade=t=out:st=71:d=4" -t 75 output.mp4

基本的にはフォーマットや品質を明示してるだけだけど「-framerate 2」がなんで2なのかはよく分からない。