次のコマンドを実行しています。
ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov
私の録音したオーディオとその上の画像でビデオを正常に出力します。
これをYouTubeにアップロードしようとすると、.mov、.avi、.flv、.mp4の形式に関係なく、処理に失敗します。
YouTubeが受け入れるフォーマットを生成する上記の設定に欠けているものはありますか?私はffmpegのドキュメントを調べてみましたが、頭の中にいます。
私は30秒のmp3で2秒のビデオを置くことによって実験をしました。私がyoutubeにアップロードしたとき、結果のビデオはたった2秒の長さでした。つまり、YouTubeは長さについてはビデオトラックのみを参照している可能性があり、画像は1フレームの長さか何かであるため、おそらくそれはそれを妨げます。
うまくいったことは次のとおりです。
ffmpeg -i audio.mp3 -f image2 -loop 1 -i logo.jpg
-r 15 -s 640x480 \
-c:v libx264 -crf 18 -tune stillimage -preset medium \
-shortest foo.mov
具体的には、loop
オプション。画像をフレームとして複製します。また、ファイルが大きくならないようにするためにshortest
オプションも必要になります(このようにして、最短ストリームの長さ(ここではオーディオファイル)に切り捨てます)。
r
オプションはフレームレートを変更し、crf 18
品質を設定します(ビデオ品質を下げるには、ここで高い値を使用します)。詳細については、こちらをご覧ください: FFmpeg:究極のビデオおよびオーディオ操作ツール
別のフォーラムからの私のために働くコードの一部:
ffmpeg -loop 1 -r ntsc -i image.jpg -i song.mp3 -c:a copy -c:v libx264 -preset fast -threads 0 -shortest output.mkv
私もうまくいったPavelのコードを取り、不要なオプションをトリミングすることでコードを短縮しました。
ffmpeg -loop 1 -shortest -i <audio file> -i <image file> <output video file>
これは、入力として任意の画像およびオーディオファイルを処理し、出力としてビデオファイルを生成する一般的な形式です。
とはいえ、ビデオストリームは無期限に繰り返される単一の画像で構成されるため、-r
を使用して低いフレームレート(つまり、1秒間に表示される画像の数)を設定できます。すべての出力コンテナが低フレームレートを許可するわけではないことに注意してください。その1つはavi
なので、次のようにすることができます。
ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> output.avi
これにより、デフォルトの25ではなく、0.1(つまり、10秒ごとに1つの画像)のフレームレートのビデオファイルが作成されます。これは、ファイルサイズに影響しますが、ビデオ品質には影響しません。最終的には、-ab
を使用して、オーディオビットレートを設定してより良いオーディオ品質を得ることができます。これは、私が実際にYouTube用のこの種のビデオを作成するために使用するコマンドです。
ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> -ab 128k output.avi
avconvで:
avconv -i input.mp3 -loop 1 -f image2 -i logo.png -r 30 -s 640x480 -ab 128k -ar 44100 -ac 1 -ss 00:00:00.000 -t 01:02:03.123 foo.ogv
多くの実験の結果、これが機能するようになりました: https://www.youtube.com/watch?v=qjlDT819Q3s
https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images に従って画像をビデオに変換します。
ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4
ここではいくつかの画像を使用し、20秒ごとに変更します。
https://trac.ffmpeg.org/wiki/Concatenate に従って、上記のビデオの十分な数のコピーを連結して、オーディオの持続時間全体をカバーします。 ffmpeg -i wav.wav -i png.mp4 youtube.mp4
が正しいことをすることを期待するなど、他の解決策はYouTubeによって拒否されました(また、VLCなどのプレーヤーは混乱していて適切にシークできません)。私の推測では、時間位置はコピーで調整する必要がありますが、連結されていない限り、ffmpeg
は調整しません。
ffmpeg -f concat -i pngs.txt -c copy pngs.mp4
(ここで、ファイルpngs.txt
は、必要な数のコピーを含むように手作りされています。コピー=オーディオの長さ/ビデオの長さ)
https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/ に従って、オーディオを2で取得したビデオとミックスします。
ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4
これで、ファイルyoutube.mp4
がYTによって受け入れられるはずです。