2023年11月29日发(作者:)
X.264编码文档
MP4文件结构
MP4文件由四个段落组成,包括:ftyp、free、moov、mdat。其中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 自动两遍压缩。
ABR:Average 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:广播,网络视频流
High:HD存储,广播
压片时使用High
AVC Level
选择 Unrestricted/Autoguess
Tunings
选择默认
Threads
支持的CPU多核,提高转压的速度,默认为0自动,可以根据CPU实际情况进行设置。
Presets
压缩时间和质量开销的平衡选择,共有9个级别,默认为Medium,为提高质量可以调到
Slower,为减少时间开销可以调到Faster。每个级别对应不动的默认参数设置。
帧类型(Frame-Type)
I、P和B帧
运动编码方式:充分利用视频帧与帧之间的冗余帧,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
一般而言,偏向负值能更好地保留细节性的东西,偏向正值则能使视频画面显得更为干
净和柔和。不过实际效果其实不是很明显,尤其是跟avs和ffdshow的那些滤镜相比。
如果喜欢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效
果越大,所以通过适当降低qcomp让mb-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动态预测和分区方式,可选项1-9
1:用全像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索
2:用半像素块进行动态搜索,对每个块再用快速模式进行四分之一像素块精确搜索
3:用半像素块进行动态搜索,对每个块再用质量模式进行四分之一像素块精确搜索
4:用快速模式进行四分之一像素块精确搜索
5:用质量模式进行四分之一像素块精确搜索
6:进行I、P帧像素块的速率失真最优化(rdo)
7:进行全部帧像素块的速率失真最优化
8:进行I、P帧运动矢量及块内部的速率失真最优化
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 decimation:DCT抽样会丢弃看上去“多余”的DCT块。会增加编码效率,通常质量
损失可以忽略关闭以提高编码效率,默认不勾选
No Fast P-skip:花较多的时间带来轻微的画面质量提升,默认不勾选
No Psychovisual Enhancements:默认不勾选
Noise reduction:降噪,默认为0
Macroblock Options
动态块划分方法,使用default
1.1. 杂项(Misc)
命令行参数补充
Input/Output
PSNR和SSIM,画面校验机制,不勾选。


发布评论