我几天都在寻找这个,但似乎没有什么能回答或为我工作,所以如果我问一个愚蠢的问题,或者似乎已在其他地方得到解答,请原谅我。 / p>
我有一个使用GMP4视频编解码器编码的AVI文件,目前安装在我的计算机上,所以我可以在Windows Media Player中播放该文件。我要做的是打开/解码文件以进行编辑,以便能够将两个视频文件拼接在一起。我不要求它以相同的格式输出,而是只打开进行编辑,获取帧然后我可以输出更标准的格式。
我遇到的问题是没有为这种格式创建DirectShow过滤器,所以它不会打开使用它(没有深入研究它,但所有样本都无法加载视频文件)。 FFMPEG尝试读取文件,说明标头不正确,但无论如何它都会尝试读取它,然后死机说我需要GMP4编解码器。正如我之前所说,我安装了特定的编解码器,但FFMPEG似乎没有注意到或无法访问它。
是否有任何东西可以让我使用系统安装的编解码器来解码视频帧?对我来说,Windows Media Player可以做些什么似乎很奇怪,但我无法以编程方式重复它。我并不局限于C ++或C#,尽管C#绝对是首选语言。
全部谢谢, 亚历
答案 0 :(得分:4)
我花了一整天时间遇到同样的问题。解决方法是安装AVISynth,然后您可以使用ffmpeg加载系统具有VfW编解码器的任何AVI文件。而不是传递ffmpeg您的AVI输入文件,创建一个.avs文件,其中包含一行包含AviSource(“your-avi-filename”)并传递ffmpeg .avs文件名。
假设您要将专有视频编解码器中的input.avi转换为h263格式(假设您的input.avi支持h263帧大小):
echo AviSource("input.avi") > input.avs
ffmpeg -i inputs.avs -vcodec h263 output.avi
答案 1 :(得分:0)
Nuno有一个很好的答案,但你想避免命令行转换,你可以使用AForge.Net c#库来访问AfW编解码器,FFMpeg编解码器甚至DShow编解码器(一些CCTV DVR在DShow中编码)。
还有一种方法可以将Windows Media Player作为c#对象打开并从中抓取帧。如果您想了解更多信息,请给我发电子邮件 - 听起来我们正在开展类似项目。