我一直在使用 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 帧)
最佳答案
我让它工作的唯一方法是通过为帧计数器命名具有恒定固定宽度的帧文件。如果您从网络摄像头获取帧,请检查网络摄像头本身是否可以完成,否则,您必须自己重命名。您可以开发一个使用 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 作为可选帧率,我测试它们对我有用。
关于c# - 使用 ffmpeg 转换图像序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3275865/