c# - 使用 ffmpeg 转换图像序列

标签 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 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/

相关文章:

c# - 验证数据库中是否存在? (MySql 和 ASP.NET)

c# - 拆箱特定结构成员

c# - 求三次多项式的根

c# - 如何衡量应用程序的性能?

c# - ASP.NET MVC 显示来自数据库的多个图像。如何高效地

c# - 大型 float 列表的查找函数 - 内存计算?

c# - 以准确的方式将字符串转换为日期

c# - 将List <int?>转换为List <int>

c# - Kendo 数据源在调用更新后重新填充

c# - Azure Active Directory 使用错误的应用程序客户端 ID