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

视频编解码器开始编码

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

    是否有人知道(或知道某个资源包含)常用视频格式(MPEG-1/2/4、.wmv、.mov等)的帧开始代码列表。

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

    从本质上讲,我想知道这些,以便我可以编写一个程序,可以自动找到一个视频帧的开始,在一个视频的许多不同的视频格式。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Christopher    16 年前

    你想达到什么目的?

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

    例如,请参见: 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文件格式的信息。

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

    另一方面,压缩格式不能独立地保护所有单独的帧。它们先保护单个帧,然后保护多个中间帧,中间帧只包含当前帧与最后一个完整帧的差异信息。因此不能在每个帧编号处提取完整帧。