使用FFmpeg转换图像序列

3
我一直在使用ffmpeg将一系列的jpeg图片转换为视频,使用以下语法:
ffmpeg -f image2 -i frame%d.jpg -vcodec mpeg4 -b 800k video.avi

它很有效,但如果文件名不是以0开始并按升序进行追踪,则会得到奇怪的结果。例如,目录中的第一个文件是frame1,最后一个文件是fram 61。我应该指出,我始终使用按增量排序的JPEG列表。例如,名为frame1、fram2、fram3等文件的列表。

以下内容正常工作

frame1.jpg to frame9.jpg

将frame1.jpg至frame10.jpg 将frame2.jpg至frame8.jpg 将frame2.jpg至frame10.jpg 将frame2.jpg至frame11.jpg 将frame2.jpg至frame17.jpg 将frame2.jpg至frame20.jpg 将frame2.jpg至frame30.jpg 将frame2.jpg至frame61.jpg

以下内容不起作用

26 to 57 fail

11到61失败 10到61失败 20到61失败 24到61失败

我能否修改ffmpeg的参数,以便它可以制作视频而不考虑文件名?(frame%d)


你好,我也遇到了同样的问题。可以告诉我你的电子邮件地址以便联系吗? - rams
有没有带完整源代码示例的最终解决方案? - Kiquenet
2个回答

3

我唯一使它工作的方法是使用一个具有固定宽度的常量帧计数器来命名框架文件。如果您正在从网络摄像机中获取帧,请检查是否可以由网络摄像机本身完成,否则,您就必须自己重命名它。您可以开发一个使用C#中的FileWatcher类的Windows服务来“侦听”文件夹是否被写入帧,然后将其重命名为另一个以前提到的格式的文件夹。这对我起作用了。

frame01.jpg
frame02.jpg
...
frame10.jpg
frame11.jpg
...
frame61.jpg

然后使用这个:
ffmpeg.exe -r 1 -f image2 -i frame%02d.jpg -r 16 -vcodec mpeg4 -b 800k -y video.avi

-i frame%02d.jpg:表示帧计数器有2位数字

我添加了-r 1和-r 16作为可选的帧速率,我测试过它们对我有效。


1

你可以将所有的jpeg文件重命名,使编号始终从零开始且没有间隙。


我原以为我已经尝试过这个方法了,这就是为什么我一直把错误归因于FFmpeg...现在一旦我重命名文件,它就可以正常工作了。谢谢! - brux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接