在C#中使用图像制作video的工作方式

有没有人用一种已知的可靠方法从一系列图像文件中创建video? 在你发布问题之前没有搜索答案,然后在发出诸如“使用FFMPEG”之类的简单消息之前,请先阅读其余内容。

我正在尝试创建一个video,只要它得到广泛支持,从一系列图像(.jpg,.bmp等)开始,格式无关紧要。 我的平台是Windows Server 2008,64位。 如果我可以在我的C#程序中制作video,那很好,但我不反对将一系列图像文件写入目录,然后启动外部程序从这些图像制作video。

唯一的限制是:它必须在我的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时,只显示第一帧。 那么,如果您尝试创建压缩video,该程序会抛出exception。

所以,我想知道是否有一种好的,可靠的方式来做我想要的:在Windows系统上,通过.NET API或使用一个图像从一系列图像创建AVI或其他常见的video文件格式外部计划。 有帮助吗?

在使用了一段时间并看了x264和VideoLan之后,我又回到了Splicer。 事实certificate,神秘的错误消息是由于我的代码中的错误。

看起来Splicer会做我想做的事情:以编程方式从一系列图像中创建video。

感谢所有回复的人。

你可以使用VideoLan,我推荐它。

我有一个C#应用程序的直接经验,VideoLan做这两件事:

  1. 在我的C#应用​​程序中嵌入VLC查看器(VLC veiwer有3-4个C#“包装器”)。
  2. 通过发送命令行参数在单独的进程中使用vlc.exe。

VideoLan具有命令行界面这一事实是一件好事。 VLC支持禁用任何可视元素的命令行选项; 因此VLC GUI不会弹出,也不会弹出命令行窗口。 因此,在C#应用程序中,您可以将与video相关的工作分配给VLC客户端。 C#具有Process类,可以为您管理vlc.exe实例。 它最终成为一个非常巧妙的解决方案。

在Windows上处理video(编码和回放)是一个真正的泥潭。 .NET根本不会对你有所帮助 – 你总是要么是PInvoking / COM-interoping本机API,要么是使用其他人已经构建的.NET包装来做同样的事情。

无论如何,我不能说我已经使用过它,但是一个好的赌注似乎是作为videolan项目一部分的x264库 。 这为您提供了一个可以PInvoke的自包含C库,您不必担心在服务器上安装和DirectShow垃圾。 据我所知,它将生成可在Flash中播放的H.264格式video。

我使用mplayer的mencoder来创建AVI(带编解码器msmpeg4 / mp3,默认情况下可以用Windows Media Player读取)来自Linux上的TGA文件,如下所示:

 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版本。

您可以将所有想要包含在video中的图像打印到剪贴板,然后将其导入到Windows Live Movie Maker中(当然是动态的!)并让它为您编译,而不仅仅是经历所有的麻烦!

所有这些都可以通过代码完成,但这样一来,您就不必自己创建它。 正如您所说的那样,该平台是Windows,并且所有Windows组件都安装了Windows Live Movie Maker,因此对于使用您的应用程序的任何人来说都不应该是一个问题,除非

a)他们卸载了Windows Live Movie Maker

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