【问题标题】:Edit the frame rate of an avi file编辑 avi 文件的帧速率
【发布时间】:2009-07-14 17:34:56
【问题描述】:

是否可以使用 Video for windows 库更改 avi 文件的帧速率?我尝试了以下步骤,但没有成功。

  1. AviFileInit
  2. AviFileOpen(OF_READWRITE)
  3. pavi1 = AviFileGetStream
  4. avi_info = AviStreamInfo
  5. avi_info.dwrate = 15
  6. EditStreamSetInfo(dwrate) 返回 -2147467262。

【问题讨论】:

    标签: c++ vfw


    【解决方案1】:

    我很确定 AVIFile* API 不支持这一点。 (免责声明:我是定义这些 API 的人,但那是 15 多年前...)

    您不能只在普通的 AVIStream 上调用 EditStreamSetInfo,只能从 CreateEditableStream 返回一个。

    那么,您可以使用 AVISave,但这显然会重新复制整个文件。

    所以,是的,您可能希望通过解析足够多的 AVI 文件头来找到您想要更改的一个 DWORD 来做到这一点。有很多关于 RIFF 和 AVI 文件格式的文档,例如http://www.opennet.ru/docs/formats/avi.txt

    【讨论】:

    • 好吧,即使它有 15 年的历史,我也会接受你的记忆;) RIFF 格式无论如何都非常容易解析。
    • +1 只是因为原始开发者的回复很酷!
    【解决方案2】:

    我对 VfW 一无所知,但您可以随时尝试对文件进行十六进制编辑。帧率可能是 AVI 文件头中某处的一个字段。

    否则,您可以编写一些工具(如 mencoder[1])以将流复制到不同帧速率下的新文件。

    [1] http://www.mplayerhq.hu/
    

    【讨论】:

      【解决方案3】:

      HRESULT:0x80004002 (2147500034)
      名称:E_NOINTERFACE
      说明:请求的COM接口不可用
      严重性代码:失败
      设施代码:FACILITY_NULL (0)
      错误代码:0x4002 (16386)

      如果不调用 EditStreamSetInfo 是否有效?

      你能贴出你用来设置流信息的代码吗?

      【讨论】:

      • 我不知道在这个论坛中是否有不同的方式发布代码。 //ChangeFrameRate int frame_rate = 15; int error_code = 0; PAVIFILE file_ptr = NULL; PAVISTREAM stream_ptr = NULL; AVIFileInit(); AVIFileOpen(&file_ptr, movie_name, OF_READWRITE, NULL); AVIFileGetStream(file_ptr, &stream_ptr, 0, 0); AVIStreamInfo(stream_ptr, stream_info, sizeof(AVISTREAMINFO)); /* stream_info.dwRate 是 25。我想把文件中的这个参数改成 15*/ error_code = EdiStreamSetInfo(stream_ptr, &stream_info, sizeof(AVISTREAMINFO)); /* 返回 (-2147500034) */
      猜你喜欢
      • 2012-11-17
      • 2011-04-24
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多