C# 使用ffmpeg转换图像序列

C# 使用ffmpeg转换图像序列,c#,C#,我一直在使用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

我一直在使用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的参数,使其在不考虑文件名的情况下生成视频?(帧%d)

您可以重命名所有jpeg文件,以便编号始终从零开始,并且没有间隔。

我实现此功能的唯一方法是使用固定宽度的帧计数器命名帧文件。如果您正在从网络摄像头中获取帧,请检查是否可以由网络摄像头本身完成,否则,您必须自己重命名它。您可以开发一个Windows服务,该服务使用C#中的FileWatcher类“侦听”要用框架写入的文件夹,然后将其重命名为另一个具有BeforeReference格式的文件夹。这对我有用

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
-帧%02d.jpg:表示帧计数器的2位数字


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

我想我已经尝试过了,这就是我将错误归因于ffmpeg DOH的原因。一旦我重命名文件,它现在就可以工作了。谢谢,我也面临同样的问题。我可以知道你的联系电子邮件id吗。有完整源代码示例的最终解决方案吗?