使用C#制作图像视频的工作方式

19

有没有人知道可靠的方法来从一系列图像文件创建视频?在你因为我没搜索答案就发帖而扣分之前,也在你发送简单消息如“使用FFMPEG”之前,请先阅读完这篇文章。

我正在尝试从一系列图像(.jpg、.bmp等)中创建一个视频,格式不太重要,只要它得到广泛支持即可。我的平台是Windows Server 2008,64位。如果可以在C#程序内制作视频,那很好,但我也不排斥将一系列图像文件写入目录,然后启动外部程序从这些图片中制作视频。

唯一的限制是:它必须在我的Windows Server 2008系统上运行,并且可以进行脚本化操作。也就是说,不需要操作员干预的GUI程序。

我在StackOverflow上找到了许多类似的问题,并尝试了其中几个解决方案,但都带有不同程度的挫败感,而且没有一个成功。

FFMPEG看起来是一个很棒的程序,在Linux上可能是的。但我下载的两个Windows版本均无法使用。给定下面的命令行:

  ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi

其中一个构建版本读取图像后因数据执行预防而崩溃。另一个读取第一个文件,然后输出一个错误消息,指出“无法找到适合文件jpeg/image2.jpg的编解码器”。总之,在Windows下,FFMPEG看起来不可行。

对先前发布的一个答案推荐Splicer。它看起来是相当不错的代码。我编译了这些示例并尝试运行,但遇到了一些难以理解的文件未找到的错误消息。看起来COM类没有注册。我想我需要安装一些东西(DirectShow?虽然我认为已经安装了?)。根据所需内容的不同,我可能很难在服务器上证明其安装的必要性。(“什么?你为什么需要在服务器上安装这个?”)

另一个答案建议从Code Project中使用AviFile库。这看起来很简单:是Windows AviFile子系统的一个包装器。除了该程序创建的AVI文件似乎具有所有帧,但是当我在Windows Media Player中播放AVI时,只显示第一帧。好吧,如果您尝试创建压缩视频,则该程序会抛出异常。

因此,我想知道是否有一种好的、可靠的方法来实现我的目标:在Windows系统上,从一系列图像创建一个AVI或其他常见视频文件格式,可以通过.NET API或使用外部程序。有什么帮助吗?


尝试不带 -f image2 或者带上 -f jpeg 的 ffmpeg 命令,例如 'ffmpeg -r 1 -i jpeg/.jpg video.avi' 或者 'ffmpeg -r 1 -f jpeg -i jpeg/.jpg video.avi'。 - configurator
@configurator:没有使用-f image2,我得到了相同的结果。使用-f jpeg,我得到了“未知的输入或输出格式:jpeg”。 - Jim Mischel
5个回答

11

在使用它一段时间并查看了x264和VideoLan之后,我回到了Splicer。结果发现那个晦涩的错误信息是由我的代码错误引起的。

看起来Splicer可以实现我想要的功能:从一系列图像中编程创建视频。

感谢所有回复的人。


6

你可以使用VideoLan,我建议你使用它。

我在一个C#应用程序中直接使用过VideoLan,完成了以下两个任务:

  1. 嵌入VLC播放器到我的C#应用程序中(有3-4个C#“封装器”适用于VLC播放器)。
  2. 通过发送命令行参数,将vlc.exe用作单独的进程。

VideoLan具备命令行界面是很好的事情。而且,VLC支持一种命令行选项,可以禁用任何视觉元素; 因此,既不会弹出VLC GUI,也不会弹出命令行窗口。因此,在C#应用程序中,您可以将与视频相关的工作委派给VLC客户端。C#具有Process类,可以为您管理vlc.exe实例。这最终成为了一个相当不错的解决方案。


1
在Windows上处理视频(编码和播放)是一个真正的泥潭。而.NET并不能帮助你 - 你总是要么使用PInvoke/COM-interop本地API,要么使用别人构建的.NET包装器来完成相同的工作。
无论如何,我不能说我用过它,但一个好的选择似乎是videolan项目中的x264库。这给了你一个自包含的C库,你可以PInvoke它,而不必担心在服务器上安装DirectShow垃圾。它将生成H.264格式的视频,据我所知,可以在Flash中播放。

0

我使用mplayer的mencoder在Linux上从TGA文件创建AVI(使用msmpeg4/mp3编解码器,默认情况下可通过Windows Media Player读取)的方法如下:

mencoder mf://*.tga -mf fps=25:type=tga \
  -audiofile /tmp/test.mp3 -oac copy \
  -of lavf -ovc lavc \          
  -lavcopts vcodec=msmpeg4v2:mbd=2:mv0:trell:cbp:last_pred=3:vbitrate=3000 \
  -o /tmp/test.avi

我知道mplayer有Windows版本。


-2

不必费尽周折,您可以将要包含在视频中的所有图像复制到剪贴板中,并将其动态导入到Windows Live Movie Maker中(当然!),并为您编译它们!

所有这些都可以通过代码完成,但是这种方式可以省去自己创建的麻烦。正如您所说,平台是Windows,而且所有Windows计算机都安装了Windows Live Movie Maker,因此除非:

a)他们卸载了Windows Live Movie Maker

b)他们正在使用运行时间超过8或9年的Windows版本的计算机...


1
@Rugs:并非所有的Windows电脑都安装了Windows Live Movie Maker。在Windows Server 2008上默认情况下肯定没有安装,而很多开发者都会在他们的开发机器上使用它。其次,如果你有一些自动化的方式将成千上万的图像添加到剪贴板并逐个导入到Movie Maker中,那么你的解决方案可能是可行的。但大多数情况下,我会拒绝这种解决方案,因为我有一个程序动态创建图像,并逐个导入到Movie Maker中需要花费极长的时间。 - Jim Mischel

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