我有点不确定您要解决的确切问题。听起来您想将 mpg、avi、wmv 文件编码为 DV AVI 类型 1,并且您想使用 ffmpeg 作为解决方案的一部分。
Microsoft DV Video Encoder 和 DV muxer DirectShow 过滤器将视频和音频组合成 1 类 DV AVI 所需的单个视频+音频 DV 流。
我对 ffmpeg 不是很熟悉,但我不确定你为什么需要它来解决你的特定问题。DirectShow 可以处理多种输入格式。从常见问题解答看来,ffmpeg 可以从 DirectShow 过滤器获取输入,但不能将数据写入 DirectShow 过滤器。
在没有 ffmpeg 的情况下单独使用 DirectShow 进行转换是最简单的:
- 创建 DirectShow 图形(CoCreateInstance 获取 IGraphBuilder)。
- 从输入文件创建源过滤器 (IGraphBuilder::AddSourceFilter)
- 创建 DV 编码器过滤器 (CoCreateInstance)
- 将 DV 编码器过滤器添加到图形 (IFilterGraph::AddFilter)
- 将视频源引脚连接到 dv 编码器 (IGraphBuilder::Connect)
然后类似地:
- 将新的 dv 复用器连接到 dv 视频编码器的输出和源过滤器的音频输出(您可能需要一个中间过滤器来将音频压缩为正确的格式)。
- 将 dv muxer 的输出连接到新的 avi mux 滤波器。
- 将 avi 多路复用器的输出连接到使用目标文件设置的新文件编写器过滤器。
- 使用 IMediaControl 和 IMediaEvents 运行图形以将输入文件转换为输出文件。
如果我误解了您的问题,那么您应该能够构建一个不同的图表,该图表将转换为 DV AVI 类型 1 或 2。对于编写类型 2,您不需要使用 dv muxer。
在编写任何代码之前,所有这些都可以使用 GraphEdit 或类似工具轻松地预先测试。GraphEdit 在 Windows SDK 中可用。GraphStudio 是一种开源替代方案,但也有其他替代方案。出于开发目的,您还可以在 GraphEdit 或类似中构建一个图形,然后加载它并在您自己的测试应用程序中运行它(参见http://msdn.microsoft.com/en-us/library/dd390649(v=vs.85 ).aspx )
有关一些基本的入门信息,请参阅: - DirectShow 上的维基百科页面 -我如何学习 DirectShow 编程?
-我在哪里可以找到完整的 DirectShow 教程?