web-dev-qa-db-ja.com

YouTube用のオーディオと静止画像を含むビデオの作成

次のコマンドを実行しています。

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フレームの長さか何かであるため、おそらくそれはそれを妨げます。

23
thekevinscott

うまくいったことは次のとおりです。

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:究極のビデオおよびオーディオ操作ツール

13
thekevinscott

別のフォーラムからの私のために働くコードの一部:

ffmpeg -loop 1 -r ntsc -i image.jpg -i song.mp3 -c:a copy -c:v libx264 -preset fast -threads 0 -shortest output.mkv 
4
Pavel Vlasov

私もうまくいった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
2
etuardu

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
2
ZiTAL

多くの実験の結果、これが機能するようになりました: https://www.youtube.com/watch?v=qjlDT819Q3s

  1. 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秒ごとに変更します。

  2. 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は、必要な数のコピーを含むように手作りされています。コピー=オーディオの長さ/ビデオの長さ)

  3. 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によって受け入れられるはずです。

0
infojunkie