6

一連の画像で構成されるビデオファイルをプログラムで作成したいと思います。ただし、各画像の長さも指定できるようにしたいと思います。同様のタスクに対して提案されたffmpegの例をよく目にしますが、それらは常に各画像に対して同じ期間を想定しています。これを達成するための効率的な方法はありますか?(非効率的な解決策は、フレームレートを高い値に設定し、目的の期間に一致するまで各画像を繰り返しコピーすることです)

各画像も動的に生成するので、各画像をディスクに書き込まずに画像データをビデオフレームにエンコードする方法があれば、それはさらに良いことです。ただし、これは必須ではありません。

編集:明確にするために、私は必ずしもffmpegを使用する必要はありません。ビデオ処理ライブラリと同様に、他の無料のコマンドラインツールでも問題ありません。私はただ良い解決策を探しています。

4

3 に答える 3

5

I was able to solve the exact same problem with the following commands. vframes is set to the number of seconds * fps In the example the first video has 100 frames (100 frame / 25 fps = 4 seconds) and second one has 200 frames (8 seconds)

ffmpeg -f image2 -loop 1 -vframes 100 -r 25 -i a.jpg -vcodec mpeg4 a.avi
ffmpeg -f image2 -loop 1 -vframes 200 -r 25 -i b.jpg -vcodec mpeg4 b.avi
mencoder -ovc copy -o out.mp4 a.mp4 b.mp4

The mencoder part is just like the one of d33pika

于 2013-06-23T23:19:11.670 に答える
2

ffmpegを使用して画像ごとに異なる期間を設定する方法はないようです。画像ごとに個別のビデオを作成し、次のようなmencoderを使用してそれらを連結します。

ffmpeg -f image2 -vframes 30 -i a.jpg -vcodec libx264 -r 1 a.mp4
ffmpeg -f image2 -vframmes 10 -i bjpg -vcodec libx264 -r 1 b.mp4
mencoder -ovc copy -o out.mp4 a.mp4 b.mp4

concat操作のmencoderは、すべての出力ビデオが同じ解像度、フレームレート、およびコーデックである必要があります。

ここで、a.mp4には30秒の30フレームがあり、b.mp4には10秒の10フレームがあります。

于 2012-12-21T07:07:17.627 に答える