2

我已经搜索了几天了,但似乎没有什么能完全回答或对我有用,所以如果我问的是一个愚蠢的问题或似乎已经在其他地方得到回答的问题,请原谅我。

我有一个使用 GMP4 视频编解码器编码的 AVI 文件,目前安装在我的计算机上,因此我可以在 Windows Media Player 中播放该文件。我要做的是打开/解码文件以进行编辑,以便能够将两个视频文件拼接在一起。我不要求它以相同的格式输出,而只是打开进行编辑,获取帧,然后我可以输出为更标准的格式。

我遇到的问题是没有为这种格式创建 DirectShow 过滤器,所以它不会为我使用它打开(没有深入研究它,但所有样本都无法加载视频文件)。FFMPEG 尝试读取文件,指出标头不正确,但无论如何它都会尝试读取它,然后死掉,说明我需要 GMP4 编解码器。正如我之前所说,我安装了特定的编解码器,但 FFMPEG 似乎没有注意到或无法访问它。

有什么可以让我使用系统安装的编解码器来解码视频帧吗?Windows Media Player 可以做某事对我来说似乎很奇怪,但我不能以编程方式重复它。我不限于 C++ 或 C#,尽管 C# 肯定是首选语言。

谢谢大家,亚历克斯

4

2 回答 2

4

我整天都在遇到同样的问题。解决方案是安装 AVISynth,然后您可以使用 ffmpeg 加载系统具有 VfW 编解码器的任何 AVI 文件。不要将 ffmpeg 传递给您的 AVI 输入文件,而是创建一个包含 AviSource("your-avi-filename") 的单行的 .avs 文件,并将 .avs 文件名传递给 ffmpeg。

假设您要将专有视频编解码器中的 input.avi 转换为 h263 格式(假设您的 input.avi 具有受支持的 h263 帧大小):

echo AviSource("input.avi") > input.avs
ffmpeg -i inputs.avs -vcodec h263 output.avi
于 2012-05-14T18:14:35.083 回答
0

Nuno 有一个很好的答案,但是您想避免命令行转换,您可以使用 AForge.Net c# 库来访问 AfW 编解码器、FFMpeg 编解码器甚至 DShow 编解码器(一些 CCTV DVR 确实在 DShow 中进行编码)。

还有一种方法可以将 Windows Media Player 作为 ac# 对象打开并从中抓取帧。如果您想了解更多信息,请给我发电子邮件 - 听起来我们正在开展类似的项目。

于 2012-05-21T16:18:25.657 回答