2023年11月29日发(作者:)

X.264编码文档

MP4文件结构

MP4文件由四个段落组成,包括:ftypfreemoovmdat其中moov用于存储metadata

mdat用于存储实际的音视频数据。在顺序流式播放MP4文件时候,播放器须先获取moov

段的数据,因此在MP的文件合并时需要将moov段存储于mdat之前。

Ftyp->moov->mdat->free,符合顺序流式播放的要求

MeGUI使用

1. Tools中各个工具的简单介绍

文件分拆合并相关

MP4BOX 音视频合并生成MP4格式的攻击

MKVMERGE MKV文件的分拆,合并的工具

AVIMUXGUI AVI文件分拆成音视频流的工具

TSMUXER mkv mpg m2ts vob文件分拆成音视频流的工具

编解码相关

x264 MEGUI中,只有当视频格式是AVC时,才会调用

xvid_encraw MEGUI中,只有当视频格式是ASP时,才会调用

MEncoder MEGUI中,只有当视频格式是SNOW时,才会调用

音频编码相关

aften MEGUI中,只有当音频格式是aften ac-3时,才会调用

faac MEGUI中,只有当音频格式是faac时,才会调用

neroaacenc MEGUI中,只有当音频格式是Nero aac时,才会调用

lame MEGUI中,只有当音频格式是lame mp3时,才会调用

enc_aacplus MEGUI中,只有当音频格式是Winamp aac时,才会调用

encaudxcli MEGUI中,只有当音频格式是Aud-x mp3时,才会调用

oggenc2 MEGUI中,只有当音频格式是Vorbis时,才会调用

ffmpeg MEGUI中,只有当音频格式是ffmpe ac-3或者是ffmpeg mp2时,才会调

eac3to 主要用于音轨的提取。

dgindex 主要将m2ts,ts后缀的文件中的mpeg2格式的视频转换为d2v格式的视频流

dgavcindex 主要将m2ts,ts后缀的文件中的avc格式的视频转换为dga格式的视频流

dgindexnv 主要将m2ts,ts后缀的文件中的VC-1格式的视频转换为dga格式的视频流

avisynth_plugin MEGUI中,是用来生成avs脚本的。

2. X264参数的简单介绍

基本参数(Main标签页)

Modes

压制参数: AutoMated 2Pass 自动两遍压缩。

ABRAverage Bit Rate,平均码率。在 ABR模式下,编码器将会按照给定的码率,

尽可能为每一帧画面分配最小的量化值(量化值越小,质量越高)。在这种模式下因为平均

码率已经指定,所以最终的文件大小是可以预计的。

Const Quantizer:恒定量化值模式。在本模式下,编码器将会使用相同的质量去编码每

一帧。这里的质量是通过数学方法确定的(既量化值)。在这种模式下,因为是以质量确定

码率,因此最终文件大小是不可预计的,即使是质量相同的两帧,因为其复杂度不同,码率

很可能相差甚远。x264指定的量化值范围是0 64。其中 0相当于无损压缩.

nPass多次处理模式。为允许编码器先进行一次编码,将一些数据记录在一个统计文件

中,以便在后续的处理当中获得更加合理的码率分配(高动态的场景分配较多的码率,低动

态的场景分配较少的码率,使画质与文件大小获得较好的平衡)x264允许任意次的 pass

理论上讲,pass的数量越多,码率分配越趋于合理。但实际上,更多的 pass对于画质提升

的帮助微乎其微,甚至会出现 3rd pass 2nd pass PSNR还低的情况。因此认为,在绝

大多数情况下,2pass依然是更好的选择。

Const Quality:恒定质量模式。恒定质量模式与恒定量化值模式类似,都倾向于为每一

帧分配相同的数学质量(既量化值)。与恒定量化值模式不同的地方在于,恒定质量模式会

依据人类的视觉特性对压缩率进行调整。人眼对于高动态场景中的细节通常不敏感,而对于

低动态场景中的细节信息则相对敏感。因此,恒定质量模式对高动态场景进行更大的压缩(更

低的质量)对低动态场景则进行相对较少的压缩(更高的质量)保留较多细节信息。因此,

尽管从整个视频的角度看,恒定质量模式保持整体视觉质量不变,而恒定量化值模式保持整

体数学质量不变。

Bitrate:平均码设置,单位kbps。根据需要设置,我们一般设置为700

Lossless:无损压缩,相当于 zer(恒定量化值)下的 Q0

AVC Profile

主要针对兼容性,PSP,iPod等设备

Baseline:主要应用于移动设备使用的视频的编码方式

Main/High:增加B-切片技术,支持高质量的CABAC编码

Main:广播,网络视频流

HighHD存储,广播

压片时使用High

AVC Level

选择 Unrestricted/Autoguess

Tunings

选择默认

Threads

支持的CPU多核,提高转压的速度,默认为0自动,可以根据CPU实际情况进行设置。

Presets

压缩时间和质量开销的平衡选择,共有9个级别,默认为Medium,为提高质量可以调到

Slower,为减少时间开销可以调到Faster。每个级别对应不动的默认参数设置。

帧类型(Frame-Type)

IPB

运动编码方式:充分利用视频帧与帧之间的冗余帧,H264帧的三种类型。

I:也称为关键帧,I-帧可以理解为包含一张完整图像信息的帧。它在三种帧中所

占的空间,并且具有最高的质量,但是压缩效率是最低的。

I帧,

表示关键帧(帧内编码帧)你可以理解为这一帧画面的完整保留;

解码时只需要本帧数据就可以完成(因为包含完整画面)I帧的缺点在

于它们会占用更多的数据位,但从另一方面看,I帧不会产生可觉察的

模糊想象。

IDR帧,简称GOP,播放必须从IDR帧开始,特殊的I帧,IDR

帧可以用

来实现快进,快退以及其他随即访问功能。

P

帧间预测编码帧,表示的是这一帧跟之前的一个关键帧(或P帧)的差别,

解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是

差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B

是双向差别帧(双向预测编码帧),也就是B帧记录的是本帧与前后帧的

差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,

通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高。

注意,B

在使用Baseline方式生产视频的时候是不可用的。

H.264特性

Deblocking deblock <整数A:整数B> 调节H.264标准中的内置去块滤镜,也叫控制

loop滤镜

AB的范围都是-6~6,官方建议在-3~3里调节。默认0:0 tune animation里为1:1

一般而言,偏向负值能更好地保留细节性的东西,偏向正值则能使视频画面显得更为干

净和柔和。不过实际效果其实不是很明显,尤其是跟avsffdshow的那些滤镜相比。

如果喜欢rmvb的那种略模糊效果,此参数可直接设6:6,在低码率下效果还是不错的

从整体上看,高压的话这个应该开正值,建议就用1:1

CABAC 前文参考之适应性二元算术编码(Context-based Adaptive Binary Arithmetic

Coding简称CABAC是视讯压缩标准H.264采用的算法。当禁用该选项时,会使用CAVLC

(基于上下文的自适应变长编码)进行编码,CAVLC将占用更少的CPU资源,但会影响压

缩性能。勾选,提高画面效果

Gop Size(Gop:group of picture),指定关键帧的最大/最小距离(即IDR的间距

Maxinum Gop Size:使用默认250,压制动画时,可以增大。

Mininum Gop Size:使用默认25,压制动画时,可以减小。

B-Frames

Number of B-Frames: 最多允许P帧替换为B帧的连续个数,默认3(可提高压缩比)

Adaptive B-Frames: 决定B帧替换P帧的算法。默认1

0为无差别替换(显然绝大部分情况是不建议用这个的,这会让帧分配变得很不合

理)

1为快速替换(此模式下bframes≥3都不会有明显的速度差别,但更高的bframes

此模式下并不意味着更好的压缩率)

2为优化替换(此模式下bframes越高,压缩率越好,当然速度越慢,可以理解跟ref

差不多了)

B-Pyramid: 允许B帧做参考帧(对速度影响很小,开启)

Weighted B-Prediction: 允许B帧加权预测(可以减少相邻B帧质量低的影响)(对质量

和压缩比都有提高,且对速度影响极少。开启。

B-Frame bias: 控制插入B帧判定,范围-100~+100,越高越容易插入B帧,默认0

Slicing

全部使用默认值

Other

Numbers of Reference Frames最大参考帧。 参考帧越多,带来编码及解码的开销。

最大值为16,一般认为超过5以上所带来的效果较小。

Numbers of extra I-Frames设置放置I/IDR帧的阈值,此值越大设置放置I/IDR的几

率越大。可以提高画面效果。但不宜过多,I帧会影响最后文件的大小

P-Frames Weighted Prediction:选择Smart,提高P帧压缩效果

EnCode interlaced:启用隔行编码,不勾选

Adaptive I-frame Decision:自适应I帧判断,勾选。

码率控制(Rate Control

Quantizers

Minimum Quantizer: 设置最小量化值,范围1~51,默认10

Maxmum Quantizer: 设置最大量化值,范围1~51,默认51

Maxmum Quantizer Delta: 设置相邻帧之间的量化值差,范围1~50,默认4

Credits Quantizer:量化值

Factor between I and P frame Quants: I帧和P帧之间的量化系数,默认1.40

Factor between P and B frame Quants: P帧和B帧之间的量化系数,默认1.30。使用

1.5

Chroma QP Offset: 色度和亮度之间的量化差,范围-12~+12,默认0

RateControl

VBV Buffer size 码率控制缓冲区的大小,单位kbit,默认0

VBV Maximum Bitrate 平均码率模式下,最大瞬时码率,默认0

VBV Initial Buffer 码率控制缓冲区数据保留的最大数据量与缓冲区大小之比,范围

0~1.0,默认0.9

Bitrate Variance 平均码率模式下,瞬时码率可以偏离的比率,范围0.0~100.0,值越大,

码率变化的范围越大,编码器应对复杂场景的能力就越强,但文件的大小可能会脱离预料

的范围。设置成0时,实际上是以CBR(恒定码率)在编码,设置成100时,实际上是

按照固定量化值在编码。默认1.0,在动静变化剧烈的影片当中,可以适当提高。

Quantizer Compression 线性量化控制,0.0为固定码率,1.0为固定量化值,默认0.6

另外, 如果开启了mbtree,这个选项会影响mbtree的强度。该值越小意味着mb-tree

果越大,所以通过适当降低qcompmb-tree发挥更大作用。

Temp. Blur of est. Frame complexity 根据相邻帧平滑量化值比例的最大值,范围0~99.9

默认20.0,只用于2-pass和质量模式

Temp. blur of Quant after CC 对统计文件结果平滑量化值比例的最大值,范围0~99.9,默

0.5,只用于2-pas

aq(Adaptive Quantization )自适应量化 用来调整画面中编码器认为是不明显的部份的质

量控制(通常这部份占的码率较低,如烟雾、平滑及昏暗的部份,容易出现大的

象).aq的作用就是调整这些压的较多的部份,从那些的地方分给它们更多一点的码

流。但会降低主体部份的质量,所以aq不能开的过高。

分析(Analysis

M.E.

Chroma M.E. 勾选,动估计同时考虑亮度和色度因素。人眼对亮度和色度的敏感度不同。

M.E. Range: M.E. Algorithm Hexagon/Exhaustive时的搜索半径,最大64,默认16,动

态剧烈可提高这个值,会影响压制速度,

M.E. Algorithm 对全像素块动态预测搜索的方式,默认"Hexagon",设为Multi hex

Exhaustive实在太慢了,而且质量提高不明显。

Subpixel Refinemen动态预测和分区方式,可选项19

1:用全像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索

2:用半像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索

3:用半像素块进行动态搜索,对每个块再用质量模式进行四分之一像素块精确搜索

4:用快速模式进行四分之一像素块精确搜索

5:用质量模式进行四分之一像素块精确搜索

6:进行IP帧像素块的速率失真最优化(rdo)

7:进行全部帧像素块的速率失真最优化

8:进行IP帧运动矢量及块内部的速率失真最优化

9:进行全部帧运动矢量及块内部的速率失真最优化

默认选7.

Extra

MV Prediction mode (B-Frame mode):使用spatial

Trellis:使用网格编码量化以增进编码效率,对每个8x8的块寻找合适的量化值,需要

CABAC,默认1(对于npass的情况,最后一个pass使用),使用2一直使用

Psy-RD Strength:默认1.0,定义失真率,提高细节保留

Psy-Trellis Strength:默认0

No Mixed Reference frames:不混合引用帧,勾选此项。这个选项能提高效果

No Dct decimationDCT抽样会丢弃看上去多余DCT块。会增加编码效率,通常质量

损失可以忽略关闭以提高编码效率,默认不勾选

No Fast P-skip:花较多的时间带来轻微的画面质量提升,默认不勾选

No Psychovisual Enhancements:默认不勾选

Noise reduction:降噪,默认为0

Macroblock Options

动态块划分方法,使用default

1.1. 杂项(Misc)

命令行参数补充

Input/Output

PSNRSSIM,画面校验机制,不勾选。