2011-04-01 73 views
0

我正在开发一个需要转换mpg,avi,wmv格式的项目。供应商要求格式为DV AVI Type 1。这是Windows Movie Maker在拍摄摄像机时提供的格式。转换为DV AVI Type-1视频

对于某些供应商工具,我需要这种格式,假定用户正在从设备捕获数据,或者导入现有文件的格式为此格式。

我知道这两个工具,但我正在寻找合并独立的库/命令行界面,以便我可以在我自己的应用程序中包装编码过程。

http://paul.glagla.free.fr/dvdate_en.htm http://www.stoik.com/products/video/STOIK-Video-Converter/

我最后一次检查FFMPEG不支持这种转换......正好相反,从DV AVI1到DV AVI2。

我已经通过这个资源阅读,但不知道如何可以纳入ffmpeg的 http://msdn.microsoft.com/en-us/library/dd388641(v=VS.85).aspx

有没有人试图从格式X转换成DV AVI类型1?

回答

1

我有点不确定你想要解决的确切问题。这听起来像是想将mpg,avi,wmv文件编码为DV AVI类型1,并且您希望将ffmpeg用作解决方案的一部分。

有Microsoft DV视频编码器和DV muxer DirectShow过滤器,可将视频和音频合并为1类DV AVI所需的单个视频+音频DV流。

我不是很熟悉ffmpeg的,但我不知道为什么你需要它为您的特定问题。 DirectShow可以处理各种输入格式。从FAQ看来,ffmpeg可以从DirectShow过滤器获取输入,但不会将数据写入DirectShow过滤器。

这将是最简单的做单独的DirectShow的转换,无需ffmpeg的:

  • 创建一个DirectShow图形(CoCreateInstance的越来越IGraphBuilder)。
  • 从输入文件(IGraphBuilder :: AddSourceFilter)创建源过滤
  • 创建DV编码器过滤器(CoCreateInstance的)
  • 的DV编码器过滤器添加到图形(IFilterGraph :: AddFilter)
  • 连接视频源销到DV编码器(IGraphBuilder ::连接)

然后类似地:

  • 连接新的dv复用器到t他输出 的dv视频编码器和音源 从源滤波器输出(您可能需要 中间滤波器到 将音频压缩为正确的 格式)。
  • 将dv 复用器的输出连接到新的avi复用器滤波器。
  • 将avi多路复用器的输出连接到 一个新的文件编写器过滤器,并使用 设置您的目标文件。
  • 使用IMediaControl和IMediaEvents运行图形将输入文件转换为输出文件。

如果我误解了你的问题,那么你应该能够建立一个不同的图形,将转换或从DV AVI类型1或2。写作2型,你就不需要使用DV复用器。

在编写任何代码之前,所有这些都可以使用GraphEdit或类似工具预先轻松测试。 GraphEdit可用于Windows SDK。 GraphStudio是一个开源替代品,但也有其他的。为发展目的,你也可以建立在GraphEdit中或类似的图形,然后加载它,并在自己的测试程序运行(见http://msdn.microsoft.com/en-us/library/dd390649(v=vs.85).aspx

对于一些基本的入门信息,请参阅: - DirectShow的 的维基百科页面 - How can I learn a DirectShow programming? - Where can I find a thorough DirectShow tutorial?

+0

感谢persiflage,我非常熟悉FFMPEG是如何工作的,并且想知道是否有人知道某种插件的directshow过滤器。我知道如何在perl和php中编写代码,并希望可能会有directshow的包装。我需要一个命令行工具,可以从wmv - > DV AVI Type 1转换。 – openstepmedia 2011-04-02 13:57:22

+0

“独立库/命令行界面,以便我可以将编码过程包装在我自己的应用程序中。”没有意识到你正在寻求解决这个问题。 – persiflage 2011-04-03 19:38:35

+0

没有意识到你正在寻求用脚本而不是应用程序开发语言来解决这个问题。你可能会发现像Iron Python或Iron Ruby这样的.NET脚本语言可以通过.NET包装器来使用DirectShow(尽管我自己并没有尝试过)。从32位版本的Quartz.dll上的Windows SDK运行tlbimp以创建一个.NET包装器。另请参阅http://blogs.msdn.com/b/ericgu/archive/2004/09/20/232027.aspx,以便为Quartz.dll公开的其他DirectShow位创建包装器 – persiflage 2011-04-03 19:44:44