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 的编解码器”。有帮助,那个。在任何情况下,FFMPEG 在 Windows 下看起来都像是一个非入门者。

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

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

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

4

5 回答 5

11

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

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

感谢所有回复的人。

于 2009-02-12T21:21:07.027 回答
6

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

我在 C# 应用程序中使用 VideoLan 做这两件事的直接经验:

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

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

于 2009-02-12T04:51:24.130 回答
1

在 Windows 上处理视频(编码和播放)是一个真正的泥潭。.NET 根本不会帮助你——你总是要么成为 PInvoking/COM 互操作的原生 API,要么使用其他人构建的 .NET 包装器来做同样的事情。

无论如何,我不能说我已经使用过它,但一个不错的选择似乎是作为 videolan 项目一部分的 x264 库。这为您提供了一个独立的 C 库,您可以 PInvoke 并且您不必担心在您的服务器上安装和 DirectShow 垃圾。据我了解,它将生成可在 Flash 中播放的 H.264 格式视频。

于 2009-02-12T00:54:18.210 回答
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 版本。

于 2009-02-12T08:55:13.920 回答
-2

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

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

a) 他们卸载了 Windows Live Movie Maker

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

于 2010-11-29T23:07:21.043 回答