代码之家  ›  专栏  ›  技术社区  ›  Lehane

视频编解码器启动码

  •  0
  • Lehane  · 技术社区  · 17 年前

    有人知道(或知道包含)常见视频格式(MPEG-1/2/4、.wmv、.mov等)的帧起始码列表吗。

    例如,MPEG-1视频帧(我认为)总是以“00 00 01 00”开头。

    本质上,我想知道这些,这样我就可以编写一个程序,在整个视频中自动找到许多不同视频格式的帧的开头。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Christopher    17 年前

    你想实现什么目标?

    这是一个视频容器类型是如何构造的问题吗?

    例如,请参见: http://www.daubnet.com/formats/AVI.html

    这是对avi文件结构的描述。Google可能会帮助您查找其他容器文件格式。

    当你录制视频时,它通常由单个帧组成,想想目录中的单个位图文件。

    为了只有一个视频文件,这个帧流被放在一个容器中,该容器有一个描述内容的标题和一个特定的布局,在该布局中,帧被顺序存储在文件中。

    我自己的容器的简单示例:

    {
       struct header
       {
          unsigned int frametype;
          unsigned int framesize;
       };
    
       byte*  readFrame( header* pHdr, int frameNum )
       {
           byte* pFirstFrame = ((byte*) pHdr) + sizeof( header );
           return pFristFrame + frameNum * pHdr->framesize;
       }
    }
    

    还有其他几种容器类型。AVI只是这些容器类型中的一种。 要获取各个帧,您必须解释文件中的标头,然后根据该信息计算要解析的帧的位置。

    我给你发了一个avi文件格式定义的链接。还有其他地方可以获取mpeg/mkv/ogm文件格式的信息。

    你需要这些信息才能让你的程序工作。

    顺便说一句,压缩格式并不能独立保护所有单独的帧。它们保护一个单独的帧,然后是几个中间帧,这些帧只包含当前帧与上一个完整帧的不同信息。因此,您无法在每个帧编号处提取完整的帧。