x264编码过程分析与命令参数

  • Post author:
  • Post category:其他


x264实现了h.264的视频编码,但是没有实现解码算法。开源了优秀多媒体解码合集ffmpeg提供了h.264的解码算法,ffmpeg实现了市面上可见的绝大部分解码器的功能,ffmpeg解码功能被其他各大解码器ffdshow,Mplayer等所包含或应用。

x264只实现了h.264的Main Profile,在开源的h.264编码工程中,x264编码效率最高。

x264编码库libx264实现真正的视频帧编码,根据前面的H.264关键技术分析,该算法仍然是基于块的混合编码技术,即帧内/帧间预测,然后对预测值变换、量化,最后熵编码所得。编码帧类型仍然分为I帧(x264_type_i)、P帧(x264_type_p)、B帧(x264_type_b),在H.264中叫图像片Slice。x264把整帧图像看作一个Slice,片中有slice_type_i、slice_type_p、slice_type_b之分。I帧只有slice_type_i,p帧有slice_type_i、slice_type_p,B帧三种片均有。

x264的H.264视频编码过程大致可以分为三个过程。首先根据规则判定当前帧的编码类型,如果是B帧还要缓冲存放、获取,然后对待编码图像采用帧内预测、帧间预测、整数DCT变换、量化和熵编码,最后把压缩后的码流进行NAL层打包输出。

如果存在B帧,则从next区域中取出B帧以后的P帧放到current区域中,也就是说先编码I、P帧再编码其间的B帧;

若为IDR(Instantaneous Decoder Refresh)帧,则意味着是一个新图像片的开始。在H.264中为了防止编码错误扩散,规定当前片不以本片以外的其它帧为参考,因而编码器遇到IDR帧则需要重置参考帧区域。同时,将SEI(Sequence Enhancement Information)、SPS(Sequence Parameter Set)和PPS(Picture Parameter Set)分别单独写入NAL单元。这三个参数集集合了编解码的核心参数,直接关系解码端能否正常解码。如果不是IDR帧,依据帧类型设定当前NAL单元的类型和图像片的类型。接着进行一系列初始化参数的操作,包括建立关于参考帧的list0和list1,初始化码流控制得到量化步长、参考帧等相关信息,初始化写比特流环境变量等。

命令参数根据作用可分为帧类型选项(表1)


码率控制选项(表2)

模式抉择分析选项(表3)

视频标准化选项(表4)

输入/输出选项(表5)

补充:

ffmpeg支持音视频的大部分格式,如MPEG-1/2/4、H.261/3/4、WMV、SVQ、PCM、ADPCM、FLV、AVI、MP3、OGG、Matroska、ASF等90多种音视频数据的CODEC。

ffmpeg是音视频必备,但即使从业数年,它似乎依然有无穷的秘密,感兴趣添加笔者微信:YQW1163720468,加入ffmpeg微信群讨论。但记得备注:ffmpeg爱好者





版权声明:本文为weixin_43466192原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。