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

时间:2009-02-11 23:00:08

标签: c# video ffmpeg

是否有人知道从一系列图像文件创建视频的可靠方法?在你发布问题之前没有搜索答案,然后在发出诸如“使用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编解码器”。有帮助,那。在任何情况下,FFMPEG在Windows下看起来都是非首发。

对之前发布的帖子Splicer的一个答案。它看起来很不错。我编译了示例并尝试运行,但是收到了一些关于未找到文件的神秘错误消息。看起来COM类没有注册。我想我需要安装一些东西(DirectShow,也许,虽然我认为已经安装了?)。根据需要,我可能很难在服务器上安装它。 (“什么?为什么在服务器上需要它?”)

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

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

5 个答案:

答案 0 :(得分:10)

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

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

感谢所有回复的人。

答案 1 :(得分:6)

您可以使用VideoLan,我会推荐它。

我在使用VideoLan的C#应用​​程序方面有直接的经验:

  1. 在我的C#应用​​程序中嵌入VLC查看器(VLC veiwer有3-4个C#“包装器”)。
  2. 通过发送命令行参数在单独的进程中使用vlc.exe。
  3. VideoLan具有命令行界面这一事实是一件好事。 VLC支持禁用任何可视元素的命令行选项;因此VLC GUI不会弹出,也不会弹出命令行窗口。因此,在C#应用程序中,您可以将与视频相关的工作分配给VLC客户端。 C#具有Process类,可以为您管理vlc.exe实例。它最终成为一个非常巧妙的解决方案。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我已经使用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版本。

答案 4 :(得分:-2)

您可以将所有想要包含在视频中的图像打印到剪贴板中,然后将其导入到Windows Live Movie Maker中(当然是动态的!)并将其编译好,而不是仅仅完成所有麻烦。为你服务!

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

a)他们卸载了Windows Live Movie Maker

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