欢迎阅读!若有任何问题,请加入 QQ 群691892901。本教程虽然相对于 x264、x265 教程严谨,并提供了测试数据提高严谨性,但仍仅具备业余参考价值。本文省略了 x264、x265 教程中出现过的内容,查阅本文要求读者已经明晰视频编码器的基本原理和一定细节。
推荐设置:彩色模式、不打印背景、0.04 英寸边距、打印页眉页脚
点击图片即可轮询 3 种图片大小。窗口宽度大于窗口高度则切换到宽屏/桌面端/平板电脑排版,否则切换到窄屏/移动端排版。
图:AV1 的简化流程步骤,见 维基百科 - AV1
此处列出 2024 年 7 月的 ITU-T H.273 | ISO/IEC 23091-2 色彩空间配置表。该表对于转译多种编码器的播放用矩阵格式/系数指标、传输特质、三原色及白点、 --master-display
等参数设定起到辅助作用。
值 | 原色 | 提议方与标准 | ||
---|---|---|---|---|
0 | 保留值 | ITU‑T | ISO/IEC 占位留用 | ||
1 | BT.709 | x | y | ITU-R BT.709-6 |
绿 | 0.3 | 0.6 | ITU-R BT.1361-0 常规与扩展色域色系 | |
蓝 | 0.15 | 0.06 | IEC 61966-2-1 sRGB 或 sYCC | |
红 | 0.64 | 0.33 | IEC 61966-2-4 | |
白点 D65 | 0.3127 | 0.329 | SMPTE RP 177 (1993) Annex B | |
2 | 留空 | 不指定三原色,由视频播放器默认决定 | ||
3 | 保留值 | ITU‑T | ISO/IEC 占位留用 | ||
4 | BT.470M | x | y | ITU‑R BT.470‑6 System M(历史遗留) |
绿 | 0.21 | 0.71 | 美国国家电视系统委员会(1953) | |
蓝 | 0.14 | 0.08 | 美国联邦通信委员会(2003) | |
红 | 0.67 | 0.33 | ||
白点 C | 0.31 | 0.316 | ||
5 | BT.470B, G | x | y | ITU‑R BT.470‑6 System B,G(历史遗留) |
绿 | 0.29 | 0.6 | ITU‑R BT.601‑6 625 | |
蓝 | 0.15 | 0.06 | ITU‑R BT.1358 625 | |
红 | 0.64 | 0.33 | ITU‑R BT.1700 625 PAL, 625 SECAM | |
白点 D65 | 0.3127 | 0.329 | ||
6 | BT.601 | x | y | ITU‑R BT.601‑6 525 |
绿 | 0.31 | 0.595 | ITU‑R BT.1358 525 | |
蓝 | 0.155 | 0.07 | ITU‑R BT.1700 NTSC | |
红 | 0.63 | 0.34 | SMPTE 170M (2004) | |
白点 D65 | 0.3127 | 0.329 | (功能与值 7 所同) | |
7 | SMPTE 240 | x | y | SMPTE ST 240 (1999) |
绿 | 0.31 | 0.595 | (功能与值 6 所同) | |
蓝 | 0.155 | 0.07 | ||
红 | 0.63 | 0.34 | ||
白点 D65 | 0.3127 | 0.329 | ||
8 | Generic film | x | y | 普通胶片电影(CIE 光源 C 滤镜) |
绿(Wratten 58) | 0.243 | 0.692 | ||
蓝(Wratten 47) | 0.145 | 0.049 | ||
红(Wratten 25) | 0.681 | 0.319 | ||
白点 C | 0.31 | 0.316 | ||
9 | BT.2020 | x | y | ITU‑R BT.2020-2 |
绿 | 0.71 | 0.797 | ITU-R BT.2100-2 | |
蓝 | 0.131 | 0.046 | ||
红 | 0.708 | 0.292 | ||
白点 D65 | 0.3127 | 0.329 | ||
10 | SMPTE 428 | x | y | SMPTE ST 428-1 |
Y | 0 |
1 |
CIE 1931 XYZ | |
Z | 0 |
0 |
||
X | 1 |
0 |
||
中心白点 | 1÷3 |
1÷3 |
||
11 | SMPTE 431 | x | y | SMPTE RP 431-2 |
绿 | 0.265 | 0.69 | ||
蓝 | 0.15 | 0.06 | ||
红 | 0.68 | 0.32 | ||
白点 | 0.314 | 0.351 | ||
12 | SMPTE 432 | x | y | SMPTE EG 432-1 |
绿 | 0.265 | 0.69 | ||
蓝 | 0.150 | 0.060 | ||
红 | 0.68 | 0.32 | ||
白点 D65 | 0.3127 | 0.329 | ||
13~21 | 保留值 | ITU‑T | ISO/IEC 占位留用 | ||
22 | EBU 3213 | x | y | EBU Tech. 3213-E |
绿 | 0.295 | 0.605 | ||
蓝 | 0.155 | 0.077 | ||
红 | 0.63 | 0.34 | ||
白点 D65 | 0.3127 | 0.329 | ||
23~255 | 保留值 Reserved | ITU‑T | ISO/IEC 占位留用 |
与封装为文件的格式不同,封包格式需要在网络传输的过程中播放,而不是先拷贝文件到本地(如 HTTP、BT、USB 2.0 等)再打开,因此需要视频标准阶段设计和推广。
AVC,HEVC 等视频编码支持的封包格式:
标识 | 占位 | 说明 |
---|---|---|
校验符/禁止位 Forbidden zero bit | 1 | 数据完整性校验,必须为 0 |
单元重要性 NAL reference indicator(NRI) | 2 | 单元对视频流的关键程度,按照参考解码的优先级等规则排序 |
单元分类 NALU type | 5~6 | 单元对视频流起到的作用,如分片,序列/图片参数集等 |
空域层级 Layer ID(HEVC) | 6 | 兼容 SVC |
时域层级 Temporal ID(TID,HEVC) | 3 | 兼容 SVC |
原始数据负载 Raw byte sequence payload(RBSP) | 不定 | 视频数据 |
部分常见的 NALU 有:
由 AV1 的视频流格式和 AOMedia Immersive Audio Model(一种新型 3D 沉浸音频流格式)标准所采用。在 AV1 中的 OBU 含有以下标识头:
标识 | 占位 | 说明 |
---|---|---|
校验符/禁止位 Forbidden zero bit | 1 | 数据完整性校验,必须为 0 |
单元分类 OBU type | 4 | 当前单元起到的作用,如时域分隔符,帧标识头,瓦分组 |
标识头扩展旗标 OBU extension flag | 1 | 兼容 SVC,即是否额外读取空域层级、时域层级开关 |
是否含负载标识 Has size field | 1 | 无负载时为 0 |
单元大小 OBU Size | 不定 | 即封装数据的大小,用于配置内存空间 |
原始数据负载 OBU payload | 不定 | 视频数据 |
部分常见的 OBU 有:
功效同 AVC、HEVC 的 SPS。
控制参数 | 作用 |
---|---|
max_input_luma_width |
图片宽 |
max_input_luma_height |
图片高 |
profile_idc |
规格 Profile |
level_idc |
级别 Level |
功效同 AVC、HEVC 的 PPS。
控制参数 | 作用 |
---|---|
av1_frame_type |
帧类型标记(SVT-AV1 中为 slice_type ) |
show_frame |
标记可见或隐藏 |
is_skip_mode_allowed |
检查跳过模式可行性开关 |
allow_high_precision_mv |
\(\frac{1}{8}\) 像素精度动态向量开关 |
base_qindex |
基础量化值索引 |
VP9 与 AV1 中的帧间参考源缓存,长 8 帧,同时作用于编码和解码两端。编码时,编码器中的解码功能将帧内/帧间预测的结果帧更新到该列表中,以供当前正在进行帧间预测编码的帧参考。Open GOP 中的 DRL 更新顺序与视频帧显示顺序高度一致,Closed GOP 下则不会。VP9 中,当前编码帧可以选择其中的 3 帧作为其帧间参考源。这三帧因相对于当前编码帧的位置,而被冠名:LAST_FRAME
、GOLDEN_FRAME
、ALTREF_FRAME
。
注:SVT-AV1 中称为 Decoded picture buffer(DPB)
VP8 中,位于当前帧间编码帧“之外”(视频播放器内看不到),图片序列(GOP)中显示顺序靠后或末尾,但解码顺序中靠前的“帧”。ALTREF 的内容由时域降噪过滤 Temporal filtering(TF)进程识别当前图片序列中的运动轨迹合成,以实现类似于 I 帧的被参考帧,之后被 VP9 和 AV1 沿用。这种拆分方法利用了 TF 适用于分离时域不相关信息——噪声,从而得到噪声被削弱的被参考帧,相比 x264、x265 的前瞻进程(Lookahead)压缩率更高,但最终的画质也更差。
时域降噪过滤处理的说明见下方的前瞻进程——时域降噪过滤。
VP3 中的“Last intra frame”,于当前帧间编码帧之前。在 VP6 中改为允许任意帧间参考帧,并重定义为“远距离过去帧 Distant past”,相对于 LAST_FRAME
的“Near past”。会被关键帧刷新掉,功能上非常类似于 I 帧,之后被 VP7,8,9 和 AV1 沿用。
注:称呼为“Golden”的原因不明。
功能上非常类似于 P 帧,于当前帧间编码帧之前。
AV1 在此之上扩充了:
LAST2_FRAME
:位于当前帧间编码帧之前LAST3_FRAME
:位于当前帧间编码帧之前,距离当前帧间编码帧最远ALTREF2_FRAME
:位于当前帧间编码帧之前或之后BWDREF_FRAME
:类似于支线被参考帧,但未经过 TF 处理(噪声与微小细节被保留),所以比 ALTREF 更适合向其之前的帧提供参考OVERLAY_FRAME
:时域降噪过滤处理任意位于分层预测结构底部的帧(SVT-AV1 中仅代表支线被参考帧)时可能会生成的叠加帧。此叠加图片对应于相同的原始源图片,但仅使用源图片的时间滤波版本作为参考来重建原始图片。,以及重建环路的参考此外,被参考帧列表中还为帧内编码帧 INTRA_FRAME
留了一个位子,所以共长 8 帧。编码时,VP9 与 AV1 会选择这 8 帧中的任意帧。如 AV1 的帧内帧间混合模式(Interintra)中,这个分块的参考帧列表可能会是 RefFrame[0] = LAST_FRAME; RefFrame[1] = INTRA_FRAME;
。
在当前编码帧选择并完成了帧间预测后,其帧间预测的结果可以选择替换掉被参考帧列表中的任意帧,包括刷新清空该列表;跳过、替换、刷新操作与播放视频的过程一致。解码顺序大致为:
GOLDEN
ALTREF,ALTREF2
BWDREF
LAST / LAST2 / LAST3
图:从关键帧或金帧/远距离过去帧开始的显示(先后)与解码(序号)顺序,以及参考溯帧方向(箭头)
相对于被参考帧,有类似 P 帧的单帧参考帧 SINGLE_REFERENCE
,支持被参考帧列表中的 7 帧:
ALTREF2_FRAME
BWDREF_FRAME
ALTREF_FRAME
GOLDEN_FRAME
LAST3_FRAME
LAST2_FRAME
LAST_FRAME
与类似 B 帧,但仍然属于单向参考的混合参考帧 COMPOUND_REFERENCE
。混合参考帧下分为单向混合溯帧 UNIDIR_COMP_REFERENCE
(前—前—,—后—后):
BWDREF_FRAME
,ALTREF_FRAME
LAST_FRAME
,GOLDEN_FRAME
LAST_FRAME
,LAST3_FRAME
LAST_FRAME
,LAST2_FRAME
以及更类似 B 帧的双向混合参考帧 BIDIR_COMP_REFERENCE
(前— —后)。
LAST2_FRAME
,ALTREF2_FRAME
LAST2_FRAME
,BWDREF_FRAME
LAST2_FRAME
,ALTREF_FRAME
LAST_FRAME
,ALTREF2_FRAME
LAST_FRAME
,BWDREF_FRAME
LAST_FRAME
,ALTREF_FRAME
GOLDEN_FRAME
,ALTREF2_FRAME
GOLDEN_FRAME
,BWDREF_FRAME
GOLDEN_FRAME
,ALTREF_FRAME
LAST3_FRAME
,ALTREF2_FRAME
LAST3_FRAME
,BWDREF_FRAME
LAST3_FRAME
,ALTREF_FRAME
以帧分瓣格式(Frame segment)编码时,位于分瓣边界的混合参考块需要重设为单帧参考块。
图:参考帧选取思维导图。见 Wikidocs - Reference frame
与 AVC、HEVC 中的意义相同,此处不再赘述。
代表支撑每项 GOP 的帧间关系,每个参考帧都只在每个方向上引用一帧被参考帧。而分层预测结构的分层可以理解为 AVC、HEVC 中的尖塔 B 帧(B-Pyramid)参考结构,决定了量化强度精确到帧类型的分配。
图:5 层 GOP 情况下的分层预测结构,见 SVT-AV1 Docs
解码出第 1 号帧时,所需的解码顺序大致为分层预测结构底层(0,16)→中层(8,4)→高层(2,1)。如果第 16 号帧为附有叠加帧 OVERLAY
的支线被参考帧 ALTREF
,则可以理解为解码的总帧数 +1。这种解码顺序
根据画面变化拆分原本的固定长度 GOP,以适应一些复杂帧间场景的编码机制(类似于 x264/5 的转场检测)。
GOP 和 mini-GOP 的“模式决策”发生在帧类型判断以及动态搜索之前,但决定使用 mini-GOP 要用到动态搜索,因此 SVT-AV1 使用了 1/16 分辨率的原画帧作为参考帧、仅对潜在分层预测结构/时间层中的基础层进行分析,且每帧仅参考相邻的过去参考帧(Closest past reference)进行简化的搜索。得到:
首先根据层级范围决定计算量。见 SVT-AV1 Docs:
预测结构分层 | 每 6 层的前期动态搜索量 | 基础层与参考帧的动态搜索配对 |
---|---|---|
6/5 | 首次判断保持 6 层、其它次判断拆为 5 层,共 1+2 次 | 尾→首 (31,0)、半→首 (15,0)+尾→半 (31, 15) |
6/5/4 | 1 + 2 + 4 次 | ... |
6/5/4/3 | 1 + 2 + 4 + 8 次 | ... |
其次,设“不拆分”为上层 GOP、“拆分”为下层 GOP,根据情况决定是否拆分:
拆分的步骤会重复进行到设定最低的分层预测结构,或判断为“不拆分”为止。
由帧间编码帧在被参考帧列表 DRL 中匹配。其组合后的架构除了非显示帧以外,与 AVC 的结构差不多,参考帧的搜索范围类似于 x264/5 的 --ref 4
。
继承自 VP9 的帧下级结构,仅用于提高软件解码器效率。AV1 中,最小的瓦片可以由一个粗分块构成,一帧最多可含 512 片,但级别 Level 6.3——7680x4320@120 限制到最高 128 片。
AV1 支持非对等大小瓦片(non-uniform tiles),并兼容了 VP9 的对等大小瓦片(uniform tiles)配置。理论上可以使每片瓦的码率分配,或算力分配(如桌面端与移动端处理器的 P-E 核架构)更合理,但最终优化程度取决于开发者。
作为一种分区方法,瓦片自然也可以用于拆分压制任务。这种方法的缺点是会干扰到视频编码依赖于帧间 + 帧内的二维冗余,导致编码效率或画质降低,类似于 x264 编码器曾尝试并弃用的“基于分片的多线程优化”。SVT-AV1 支持基于瓦片的多线程优化,但默认关闭。
注:AV1 中已经使用了分瓣(Tile Segment)来根据画面内容而划区分配码率
注:虽然 x264 证明了通过将帧分为条带来提升多线程优化的编码上下文损失极高,但随着 GPU 和手机 SoC 硬件编码的实现,以及视频分辨率的增加,瓦片的大小可能会变得形同 x264 最初设计应对的分辨率,如 768x512 的微视频,因此这种调度如果被优化到位,则说不定会变得可行
继承自 VP9,独立于瓦片 tile 的划分结构。最多支持 8 瓣,每个块独立选择归纳为其中一瓣,以将一些编码信息分组,有提升熵编码/文本编码压缩率。主要由帧标识头 Frame header 配置和更新以下关键设定:
分瓣与 AVC 的分段编码 Segment based encoding 不同,前者相当于时域加空域分割(Temporal + spatial segmentation),后者只有时域分割。
AV1 支持最大 128x128 与兼容 VP9 的 64x64 亮度 SB。为适配当前市面上的硬件编解码器,128x128 的块会以逻辑上的 64x64 块编解码。相当于将一纸数字横竖各切一刀,再一片片读写。
图:按 MiRow、MiCol(Marcoblock Index)行、列顺序解码的 SB,见 Wikidocs - Superblock and block
MiRow、MiCol 为细分块提供了帧内大致位置,从而可以获取一些算法需要的空域权重/缩放值。
虽然这里也有 128x128 的块大小,但这是经过检查,判断为“不分块”的结果,所以也算作细分块。
BLOCK_4X4
,BLOCK_4X8
,BLOCK_8X4
BLOCK_8X8
,BLOCK_8X16
,BLOCK_16X8
BLOCK_16X16
,BLOCK_16X32
,BLOCK_32X16
BLOCK_32X32
,BLOCK_32X64
,BLOCK_64X32
BLOCK_64X64
,BLOCK_64X128
,BLOCK_128X64
BLOCK_128X128
BLOCK_4X16
,BLOCK_16X4
BLOCK_8X32
,BLOCK_32X8
BLOCK_16X64
,BLOCK_64X16
BLOCK_32X128
,BLOCK_128X32
从 SB 开始,运行一遍变换和简化的率失真检查。失真较大则四分,然后在每个分区上重复划分正方形分块;然后在每个细分块上遍历 9 种异形分块和 1 种不分块方案,并使用完整的率失真检查,然后选出失真最小的方案。9+1 种的方案为:
PARTITION_NONE
PARTITION_SPLIT
PARTITION_VERT
,PARTITION_VERT_A
,PARTITION_VERT_B
,PARTITION_VERT_4
PARTITION_HORZ
,PARTITION_HORZ_A
,PARTITION_HORZ_B
,PARTITION_HORZ_4
AV1 支持的变换块大小如下,用于帧内预测以及变换编码:
TX_4X4
,TX_4X8
,TX_8X4
TX_8X8
,TX_8X16
,TX_16X8
TX_16X16
,TX_16X32
,TX_32X16
TX_32X32
,TX_32X64
,TX_64X32
TX_64X64
TX_4X16
,TX_16X4
TX_8X32
,TX_32X8
TX_16X64
,TX_64X16
图:AV1 的递归细分块方案,以及变换块在各种细分块方案 PARTITION 下的变换块运用
还原单元 Restortion unit 用于定义环路还原滤镜 LRU 的作用范围(滤镜强度分区调节),从而使还原滤镜实现强度自适应。对 RU 的说明见环路滤镜版块,详见下方的环路滤镜版块。
由结果值,缩放值与初始值构成,初始值与缩放值的积为结果值 \(x^\prime = A x\) 。在一维空间中只有一根数轴。如果只缩放点(2),缩放到 -3 倍(\(-6 = -3 \cdot 2\)),则该点的位置会移动到 (-6) 处。
如果要缩放一段音频,设定一批采样点,然后用求和/积分/循环的方法遍历所有采样点,得到缩放结果。如将音频提速到 2 倍(缩放到 \(\frac{1}{2}\) 倍长度),音频长度从 0 数到 \(N-1\),从采样点的视角看则:\(n^\prime = \frac{1}{2} n\)。而从波形整体可以看做: \[X^\prime = \sum_{n=0}^{N-1} \frac{1}{2} \cdot x(n)\] 如果将缩放值改回未知数(函数),且输出的音频作为新波形 \(y(m)\),则: \[y(m) = \sum_{n=0}^{N-1} A(n, m) \cdot x(n)\] 音频虽是一维信号,但每个采样点除了坐标信息外还会记录一项信号值,这个值可以代表波形高度,或者像素的像素值(注意二维下的高度是坐标的一部分),这个值才是利用坐标系中记录和处理信号的关键。
比一维多一轴。这里的信号同时拥有了宽度和高度,而信号值在此可以理解为像素值。此时,遍历所有点的操作方法就会是双求和、嵌套循环了。二维变换会用到矩阵乘法,如: \[ \begin{bmatrix} x^\prime \\ y^\prime \\ \end{bmatrix} = \begin{bmatrix} m_{x} & m_{Y} \\ m_{X} & m_{y} \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ \end{bmatrix} \]
不考虑像素值、只考虑坐标变化时,点坐标的 x 分量分别乘进 \(m_{x}, m_{Y}\);y 分量分别乘进 \(m_{X}, m_{y}\),就得到了变换后的坐标。
缩放值 \(A\) 作为矩阵,除了 \(m_{x}\),\(m_{y}\) 两个相对于 \((0,0)\) 的缩放分量外,斜对角上还多了 \(m_{X}\),\(m_{Y}\) 两个相对于对方的缩放分量。这是因为二维坐标系中出现了旋转的新性质,而旋转的分量即“x 相对于 y 的倍数”横向倾斜,以及“y 相对于 x 的倍数”或纵向倾斜。
AV1 中的一种 MEMC 方案。针对视频画面内容整体的缩放(如行车记录仪视频中,车辆前进时的场景放大),则可以通过一部分像素的动态向量推理出图形的缩放和旋转程度,从而提高动态向量的精度。推理结果为:
\[ \begin{bmatrix} x' \\ y' \\ \end{bmatrix} = \begin{bmatrix} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix} \]相比上述的二维变换,这里额外有横纵向平移的分量 \(h_{13}, h_{23}\),而这两个方向仅用于对齐画面中的图形,所以矩阵乘法中仅会乘以 1,而不缩放。\(h_{11}, h_{12}, h_{21}, h_{22}\) 为 12bit 精度,而平移的 \(h_{13}, h_{23}\) 为 15bit。具体的搜索和补偿算法见帧间预测版块
变换一个 NxN 块的大致过程是将各行、各列分别变换一次,然后将解算出的频域强度加到一起。例如取一行 4x4 块的值记做 Y,设像素值 [0,1,0,0],得到:
长度 N 由输入序列 Y 的长度得到。Y 的四点需要设定 X 轴间距和偏移才能置于坐标系中。此步骤由 \(X=\frac{\pi}{N}\left(\left[0,...,N-1\right]+\frac{1}{2}\right)\) 实现,其中:
在求和符号中,可以看到遍历变量 \(k\) 从 1 开始数,在这个式子里最多数到 3,而被跳过的 0 是它左侧的 \(\frac{1}{N} F\left(0\right)\) 的结果(DC),所以这个式子可以分解为:
缩放值 \(F\left(k\right)\),就是“8x8 DCT 图表”中的某一部分。它也使用了遍历变量 \(k\),从而拆分出 \(Y_{k}, X_{k}\) 两个序列中每个位置的强度并加在一起。
在这个例子中,初始值即 Y,X 两个序列,结果值是函数 p(x),缩放值由多个部分组成,但可拆分为:
以及偏移值:
上图的可互动例子见 Desmos可以试着添加更多值到 Y 序列,以及更改这些值的大小等。例如上述“去掉 \(\frac{1}{2}\),换成 \(\sin\left(kx\right)\)”构成的一种离散正弦变换 DST:
一种 DST 的变体。DCT 对变换区域边界的信息保留能力较差,因此量化强一些时容易导致块失真。尽管去块滤镜可以消除块失真,但也会抹去一些画面的高频细节分量。造成变换效果不佳的这些边界失真的主要原因是“块的两边不对称”。通过引入离散正弦变换 DST(效果类似上图),再进一步修改其缩放值,使变换波形的宽构成由宽到窄,以及由窄到宽(翻转变体)的过渡状,从而提高边缘细节的保留能力。
ADST 使用 \( \frac{2}{ \sqrt{2N+1} } \) 缩放正弦函数的振幅,以及 \[ \sin\left( \frac{ \left( 2j-1 \right) i\pi }{2N+1} \right) \] 动态缩放了正弦函数的宽度,使其一端较窄: \[ \frac{2}{ \sqrt{2N+1} } \sin\left( \frac{\pi}{2N+1} \right) \] 另一端较宽: \[ \frac{2}{ \sqrt{2N+1} } \sin\left( \frac{N \pi}{2N+1} \right) \]
注:编写本教程时未能实现演算,所以上述内容可能有问题且需要被进一步修正。
AVC 中使用 DCT 实现变换。HEVC 中搭配使用了整数 DCT(IDCT),DST,一种从 DST 衍生的整数变换(4x4 块 Integer Transform, IT)。AV1 中使用了 DCT,ADST,翻转 ADST(FLIPADST),以及 ID 变换(Identity Transform, IDTX),一维下的频域配置为:
具体算法为 DCT-2: \[T_{i}\left(j\right) = \omega_0 \sqrt{\frac{2}{N}} \cos\left( i \pi \frac{ 2j+1 }{2N} \right) \text{,} \hspace{2mm} \omega_0 = \begin{cases} i = 0 \text{,} \hspace{2mm} \sqrt{\frac{2}{N}} \\ i > 0 \text{,} \hspace{2mm} 1 \\ \end{cases} \] DST-4: \[T_{i}\left(j\right) = \sqrt{\frac{2}{N}} \sin\left( \pi \frac{\left( 2i+1 \right)\left( 2j+1 \right) }{4N} \right) \] DST-7/ADST(Aomedia CWG-B078,与 Overview of AV1 文档不同): \[T_{i}\left(j\right) = \sqrt{\frac{4}{2N+1}} \sin\left( \pi \frac{\left( 2i+1 \right)\left( j+1 \right)}{ 2N+1 } \right) \] IDT/IDTX: \[T_{i}\left(j\right) = \begin{cases} i = j \text{,} \hspace{2mm} 1 \\ i \neq j \text{,} \hspace{2mm} 0 \\ \end{cases}\] 关于 AV1 编码器会在什么时候选择用什么变换,详见 CWG-B078 - 3.4.2 Transform selection and signalling。
色度帧内块的变换取决于同位亮度帧内块的模式:
Mode_To_Txfm[ UV_INTRA_MODES_CFL_ALLOWED ] = {
DCT_DCT, // DC_PRED
ADST_DCT, // V_PRED
DCT_ADST, // H_PRED
DCT_DCT, // D45_PRED
ADST_ADST, // D135_PRED
ADST_DCT, // D113_PRED
DCT_ADST, // D157_PRED
DCT_ADST, // D203_PRED
ADST_DCT, // D67_PRED
ADST_ADST, // SMOOTH_PRED
ADST_DCT, // SMOOTH_V_PRED
DCT_ADST, // SMOOTH_H_PRED
ADST_ADST, // PAETH_PRED
DCT_DCT, // UV_CFL_PRED
}
typedef enum { // 一般变换模式
DCT_DCT = 0, // 纵向 DCT 加横向 DCT
ADST_DCT = 1, // 纵向 ADST 加横向 DCT
DCT_ADST = 2, // 纵向 DCT 加横向 ADST
ADST_ADST = 3, // 纵向 ADST 加横向 ADST
#if CONFIG_EXT_TX // 扩展变换模式
FLIPADST_DCT = 4,
DCT_FLIPADST = 5,
FLIPADST_FLIPADST = 6,
ADST_FLIPADST = 7,
FLIPADST_ADST = 8,
IDTX = 9,
V_DCT = 10,
H_DCT = 11,
V_ADST = 12,
H_ADST = 13,
V_FLIPADST = 14,
H_FLIPADST = 15,
#endif
TX_TYPES,
} TX_TYPE;
在编码每个 GOP 的开端以逆向顺序推演,以 16x16 分区建立运动轨迹,反应了分块对于整个 GOP 压缩率的贡献,类似于 MB/CUTree,对细分块级别的量化强度设定,率失真优化设定起到关键作用。见:AOM Guide
intra_cost
:根据 SATD 估算帧内预测成本inter_cost
:有 pass1 中可用的运动信息时估算帧间预测成本
inter_cost
的上限由 intra_cost
决定propagation_amount
,propagation_cost
:从未来处理帧流回的累计传播量,以及计算出的传播代价AV1 使用内容类型检测录屏内容,并对匹配的内容选用以下编码模式:
在编码一帧之前进行,通过如 conter1,conter2 两个计数变量,统计每个 16x16 亮度区域的像素值种类与方差实现:
以下是一些常用分辨率下的阈值例子:
\[ 1280 \times 720 \div 2560 = 360 \]\[ 1280 \times 720 \div 3072 = 300 \]\[ 1920 \times 1080 \div 2560 = 810 \]\[ 1920 \times 1080 \div 3072 = 675 \]\[ 2560 \times 1440 \div 2560 = 1440 \]\[ 2560 \times 1440 \div 3072 = 1200 \]\[ 3840 \times 2160 \div 2560 = 3240 \]\[ 3840 \times 2160 \div 3072 = 2700 \]时域降噪过滤 Temporal filtering(TF)是 VP 编码器流程中的帧间降噪与帧类型设定功能,主要用于增强参考帧的画质。“过滤”由时域加权平均和简化的动态搜索以分离细节和噪声,且用于构建支线被参考帧 ALTREF
以在 GOP 的参考结构中起到预测结构替代或补充作用。某些情况下,叠加帧 OVERLAY
会额外被建立,以辅助当前的支线被参考帧减少误差,进而优化码率的分配,并间接影响到分层预测结构的建立。SVT-AV1 中,前瞻进程会在扫描到支线被参考帧的位置时临时提高搜索范围,以包括 TF 所覆盖的未来帧数量,见 SVT-AV1 Docs。
--preset
决定强度)ALTREF
OVERLAY
图:TF 对待处理的帧,相对于邻帧进行 hex 动态搜索,见 SVT-AV1 Docs
SVT-AV1 中,TF 操作与其它编码进程平行,逐 64x64 块处理。见 SVT-AV1 Doc。
用于配置精确到分块的样本过滤操作。
\[ \text{TemporalFilter}_{\text{Decay}} = 2 \times n_{\text{Decay}}^2 \times q_{\text{Decay}} \times s_{\text{Decay}} \]预测量 Predictor 此处代表由搜索与规划算法给出,针对 8x8 块的一组可用的帧间动态向量,从中筛选出合适的帧间预测模式。
基本原理见 x265 教程。x264/5 的动态搜索通过块间像素匹配的方法实现,运动补偿通过对比插值放大后的预测块与原画实现。SVT-AV1 支持 ME 和 HME,见 Github: SVT-AV1 Encoder Design
在全局动态向量以及针对其他被参考帧的动态向量凑齐之后,使用一种类似于帧内预测的规划法(Referencing scheme)将参考帧匹配到合适的被参考帧。AV1 中,这种参考规划由适合低速移动的空间动态向量 S-MVRS 参考规划,以及适合高速移动的向量场动态向量参考规划 MVF-MVRS 实现针对不同物件移动速度规划匹配,并在每个 8x8 预测块上得到预测量。
AV1 中代表通过空间相邻 8x8 块的帧间动态向量所推理出的动态向量,与帧内编码无关。前提是时间相邻块需要有动态向量。
亮度编码块中以 8x8 区域搜索其帧内的顶部,左侧,左上和右上 4 种相邻块是否溯至同一被参考帧(混合参考帧模式下为同两帧被参考帧)。如 32x32 亮度分块中,顶部代表横向 3 行,每行 4 个 8x8 区域;左侧代表纵向 3 列,每列 4 个 8x8 区域;以及左上角,右上角各一个 8x8 区域。搜索顺序为由近到远,为行 1,列 1,右上,左上,行 2,列 2,行 3,列 3:
图:空域 MVRS 查找顺序
图:单帧参考帧规划
图:混合参考帧规划
AV1 中代表通过时间相邻 8x8 块(相邻帧被参考帧上同位块)的帧间动态向量所推理,而得到的动态向量。前提是时间相邻块需要有动态向量。
采用一种线性投影模型以对齐时域相邻块动态向量的规划法,适合高速直线运动轨迹。以 8x8 块为单位,通过遍历地将被参考帧列表中的动态向量乘进一个缩放值,而得到当前帧的向量场预测。缩放值的取值为被参考帧距离当前帧的帧数,与被参考帧距离前被参考帧之差(帧数距离)的比。
图:当前帧(Current Frame)通过距离被参考帧的帧数缩放动态向量以及预测量
图:被参考帧中的搜索区域,先尝试对准一块 16x16 范围,其次是角落
从动态搜索与空域 MVRS、时域 MVRS 得出的预测量中筛选。预测量 Predictor 于此处代表一组可行的动态向量,其中含有当前编码块相对于被参考帧列表中,被参考帧列表中每帧的最多储存 4 种可能的每帧动态向量。
动态搜索以及 MVRS 得到的预测量中,按照动态向量的长度,由(帧间距离)进到远排序(?):
NEARESTMV
:第 1 种动态向量NEWMV
:第 1~3 种动态向量中筛选,附有预测向量与实际向量的差距(MV difference,MVD)NEARMV
:第 2~4 种动态向量中筛选GLOBALMV
:使用全局动态向量NEAREST_NEARESTMV
:同 NEARESTMV
NEAREST_NEWMV
:同 NEARESTMV
,远被参考帧(RefFrame[1]
)附有预测向量与实际向量的差距(MV difference,MVD)NEW_NEARESTMV
:同 NEARESTMV
,近被参考帧(RefFrame[0]
)附有预测向量与实际向量的差距(MV difference,MVD)NEW_NEWMV
:同 NEWMV
,附有近、远两被参考帧的 MVDNEAR_NEARMV
:同 NEARMV
,附有远被参考帧的 MVDNEAR_NEWMV
:同 NEARMV
,附有近被参考帧的 MVDNEAR_NEARMV
:同 NEARMV
,附有远,仅两被参考帧的 MVDGLOBALMV
:同上除 NEARESTMV
,NEAREST_NEARESTMV
之外,被参考帧的预测差距 MVD 都会被纳入考量。而剩余的模式区别就是采用哪一种预测量的区别。
static const int mode_2_counter[] = { // 帧内 + 帧间预测模式表
// 帧内预测模式
9, // DC_PRED
9, // V_PRED
9, // H_PRED
9, // D45_PRED
9, // D135_PRED
9, // D117_PRED
9, // D153_PRED
9, // D207_PRED
9, // D63_PRED
#if CONFIG_ALT_INTRA // 帧内预测 - 平滑
9, // SMOOTH_PRED
#if CONFIG_SMOOTH_HV // 帧内预测 - 横纵平滑
9, // SMOOTH_V_PRED
9, // SMOOTH_H_PRED
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA // 帧内预测 - 其它
9, // TM_PRED
0, // NEARESTMV
0, // NEARMV
3, // ZEROMV
1, // NEWMV
#if CONFIG_EXT_INTER // 帧间预测模式
#if CONFIG_COMPOUND_SINGLEREF // 帧间预测 - 混合以及单帧参考帧
0, // SR_NEAREST_NEARMV
1, // SR_NEAR_NEWMV
3, // SR_ZERO_NEWMV
1, // SR_NEW_NEWMV
#endif // CONFIG_COMPOUND_SINGLEREF / 帧间预测 - 混合参考帧
0, // NEAREST_NEARESTMV
0, // NEAR_NEARMV
1, // NEAREST_NEWMV
1, // NEW_NEARESTMV
1, // NEAR_NEWMV
1, // NEW_NEARMV
3, // ZERO_ZEROMV
1, // NEW_NEWMV
#endif
}
基本原理已在 x265 教程中说明,此处不再赘述。AV1 支持平移子像素运动补偿 Translational MC 和仿射运动补偿 Affine/Warped MC。运动补偿用于对齐动态向量到子像素精度,所以会临时地使用子像素插值滤镜。如:
选用平移预测模式后,AV1 亮度块会使用 SMOOTH
,REGULAR
和 SHARP
,共 3 种自适应 8-tap FIR 插值滤镜,代表在横向或纵向 8 个像素中采样并分配权重。如果像素位于块的纵向中间处,则先计算块中的所有横向插值结果,在从中计算纵向插值结果。
图:8x8 区间(8-tap 范围内)的横向→纵向插值,得到中心的子像素
REGULAR
{
{ 0, 0, 0, 128, 0, 0, 0, 0 }, // 边缘
{ 0, 2, -6, 126, 8, -2, 0, 0 }, // 偏左
{ 0, 2, -10, 122, 18, -4, 0, 0 },
{ 0, 2, -12, 116, 28, -8, 2, 0 },
{ 0, 2, -14, 110, 38, -10, 2, 0 },
{ 0, 2, -14, 102, 48, -12, 2, 0 },
{ 0, 2, -16, 94, 58, -12, 2, 0 },
{ 0, 2, -14, 84, 66, -12, 2, 0 },
{ 0, 2, -14, 76, 76, -14, 2, 0 },
{ 0, 2, -12, 66, 84, -14, 2, 0 },
{ 0, 2, -12, 58, 94, -16, 2, 0 },
{ 0, 2, -12, 48, 102, -14, 2, 0 },
{ 0, 2, -10, 38, 110, -14, 2, 0 },
{ 0, 2, -8, 28, 116, -12, 2, 0 },
{ 0, 0, -4, 18, 122, -10, 2, 0 }, // 偏右
{ 0, 0, -2, 8, 126, -6, 2, 0 } // 边缘
}
SMOOTH
{
{ 0, 0, 0, 128, 0, 0, 0, 0 }, // 左边缘
{ 0, 2, 28, 62, 34, 2, 0, 0 }, // 偏左
{ 0, 0, 26, 62, 36, 4, 0, 0 },
{ 0, 0, 22, 62, 40, 4, 0, 0 },
{ 0, 0, 20, 60, 42, 6, 0, 0 },
{ 0, 0, 18, 58, 44, 8, 0, 0 },
{ 0, 0, 16, 56, 46, 10, 0, 0 },
{ 0, -2, 16, 54, 48, 12, 0, 0 },
{ 0, -2, 14, 52, 52, 14, -2, 0 },
{ 0, 0, 12, 48, 54, 16, -2, 0 },
{ 0, 0, 10, 46, 56, 16, 0, 0 },
{ 0, 0, 8, 44, 58, 18, 0, 0 },
{ 0, 0, 6, 42, 60, 20, 0, 0 },
{ 0, 0, 4, 40, 62, 22, 0, 0 },
{ 0, 0, 4, 36, 62, 26, 0, 0 }, // 偏右
{ 0, 0, 2, 34, 62, 28, 2, 0 } // 右边缘
}
SHARP
{
{ 0, 0, 0, 128, 0, 0, 0, 0 }, // 左边缘
{ -2, 2, -6, 126, 8, -2, 2, 0 }, // 偏左
{ -2, 6, -12, 124, 16, -6, 4, -2 },
{ -2, 8, -18, 120, 26, -10, 6, -2 },
{ -4, 10, -22, 116, 38, -14, 6, -2 },
{ -4, 10, -22, 108, 48, -18, 8, -2 },
{ -4, 10, -24, 100, 60, -20, 8, -2 },
{ -4, 10, -24, 90, 70, -22, 10, -2 },
{ -4, 12, -24, 80, 80, -24, 12, -4 },
{ -2, 10, -22, 70, 90, -24, 10, -4 },
{ -2, 8, -20, 60, 100, -24, 10, -4 },
{ -2, 8, -18, 48, 108, -22, 10, -4 },
{ -2, 6, -14, 38, 116, -22, 10, -4 },
{ -2, 6, -10, 26, 120, -18, 8, -2 },
{ -2, 4, -6, 16, 124, -12, 6, -2 }, // 偏右
{ 0, 2, -2, 8, 126, -6, 2, -2 } // 右边缘
}
REGULAR 4x4
{
{ 0, 0, 0, 128, 0, 0, 0, 0 }, // 边缘
{ 0, 0, -4, 126, 8, -2, 0, 0 }, // 偏左
{ 0, 0, -8, 122, 18, -4, 0, 0 },
{ 0, 0, -10, 116, 28, -6, 0, 0 },
{ 0, 0, -12, 110, 38, -8, 0, 0 },
{ 0, 0, -12, 102, 48, -10, 0, 0 },
{ 0, 0, -14, 94, 58, -10, 0, 0 },
{ 0, 0, -12, 84, 66, -10, 0, 0 },
{ 0, 0, -12, 76, 76, -12, 0, 0 },
{ 0, 0, -10, 66, 84, -12, 0, 0 },
{ 0, 0, -10, 58, 94, -14, 0, 0 },
{ 0, 0, -10, 48, 102, -12, 0, 0 },
{ 0, 0, -8, 38, 110, -12, 0, 0 },
{ 0, 0, -6, 28, 116, -10, 0, 0 },
{ 0, 0, -4, 18, 122, -8, 0, 0 }, // 偏右
{ 0, 0, -2, 8, 126, -4, 0, 0 } // 边缘
}
SMOOTH 4x4
{
{ 0, 0, 0, 128, 0, 0, 0, 0 }, // 左边缘
{ 0, 0, 30, 62, 34, 2, 0, 0 }, // 偏左
{ 0, 0, 26, 62, 36, 4, 0, 0 },
{ 0, 0, 22, 62, 40, 4, 0, 0 },
{ 0, 0, 20, 60, 42, 6, 0, 0 },
{ 0, 0, 18, 58, 44, 8, 0, 0 },
{ 0, 0, 16, 56, 46, 10, 0, 0 },
{ 0, 0, 14, 54, 48, 12, 0, 0 },
{ 0, 0, 12, 52, 52, 12, 0, 0 },
{ 0, 0, 12, 48, 54, 14, 0, 0 },
{ 0, 0, 10, 46, 56, 16, 0, 0 },
{ 0, 0, 8, 44, 58, 18, 0, 0 },
{ 0, 0, 6, 42, 60, 20, 0, 0 },
{ 0, 0, 4, 40, 62, 22, 0, 0 },
{ 0, 0, 4, 36, 62, 26, 0, 0 }, // 偏右
{ 0, 0, 2, 34, 62, 30, 0, 0 } // 右边缘
}
INTRA CHROMA 2x2(?)
{
{ 0, 0, 0, 128, 0, 0, 0, 0 }, // 左边缘
{ 0, 0, 0, 120, 8, 0, 0, 0 }, // 偏左
{ 0, 0, 0, 112, 16, 0, 0, 0 },
{ 0, 0, 0, 104, 24, 0, 0, 0 },
{ 0, 0, 0, 96, 32, 0, 0, 0 },
{ 0, 0, 0, 88, 40, 0, 0, 0 },
{ 0, 0, 0, 80, 48, 0, 0, 0 },
{ 0, 0, 0, 72, 56, 0, 0, 0 },
{ 0, 0, 0, 64, 64, 0, 0, 0 },
{ 0, 0, 0, 56, 72, 0, 0, 0 },
{ 0, 0, 0, 48, 80, 0, 0, 0 },
{ 0, 0, 0, 40, 88, 0, 0, 0 },
{ 0, 0, 0, 32, 96, 0, 0, 0 },
{ 0, 0, 0, 24, 104, 0, 0, 0 },
{ 0, 0, 0, 16, 112, 0, 0, 0 }, // 偏右
{ 0, 0, 0, 8, 120, 0, 0, 0 } // 右边缘
}
基于当前块及其空间相邻块,以估计局部的仿射模型参数。如果空间相邻块与当前块指向同一被参考帧,则检查这个空间相邻块中的中心像素与其作对应的,被参考帧中的像素;与其左侧、顶部的 \(\frac{1}{4}\) 像素,对应被参考帧的准确映射位置,而得到补偿程度的变换矩阵。
单帧参考帧中,如果当前帧间预测块面积不小于 8x8,且顶部或左侧的相邻块(不含左上块)已被编码时,只要指向同一被参考帧,则可能会有块间画面的重叠。当 OBMC 应用于当前块时,当前块的帧间预测结果会与顶部、左侧相邻块的结果合成;最多支持顶部和左侧块的四个动态向量。虽然运动补偿与预测模式下的权重分配不相关,但合并两个预测结果画面的重叠处时,仍然需要计算预测像素值,为 \( P_{1}=m\cdot R_{1}+(64-m)R_{\text{above OR left}} \)
图:OBMC 的检测范围,和处理顺序(右/下)
预测像素动态向量的比例受到预测像素所在的高(顶部重叠)或宽(左侧重叠)的变化而变化;且受到预测块自身的高(顶部重叠)或宽(左侧重叠)的变化而变化。例如越远离重叠块,则当前预测块的动态向量权重越高;而当前块面积越大,则变化的区间梯度(变化周期宽度)也会变缓。
通过 \( \frac{1}{2} \sin() \) 缩放精度和微调周期宽度(重叠块最多预测到当前块自身高/宽的一半),得到权重:
\[ m=64\cdot\left(\frac{1}{2}\sin\left(\frac{\pi}{b_{height}}\left(x_{height}+\frac{1}{2}\right)\right)+\frac{1}{2}\right)\ \]分为全局动态搜索(特征匹配 Feature match)和全局运动补偿(模型识别 Model identification)两部分。匹配被参考帧相比原画的整帧缩放、倾斜、旋转(仿射变换,见变换版块)。
SVT-AV1 编码器中使用特征匹配来计算每个参考帧的全局运动参数,然后应用随机样本一致性(RANSAC)算法(见 SVT-AV1 Docs)。此“运动补偿”可以理解为“初阶段补偿”。
通过检查某点 p 周围的 16 像素圆环(半径 3 像素)来识别特征角点 corner point。如果环上 12 个连续点的值都相比点 p 的值要高出,或低过一定阈值,则设点 p 为图像中的特征角点。这种特征提取方法对明暗和运动的变化有抗性(robustness)。“加速”体现在使用像素值差异,而不是特征向量匹配,高斯模糊渐变梯度等算法实现。
识别出原画帧以及被参考帧上的所有特征后,计算这两组特征之间归一化(缩放到基本单位大小)的互相关函数来实现特征筛选。大致为:
一种统计方法,用于在含测量误差的干扰下仍能获取较为准确的数据(此处为直线函数)。当数据点可能因时间或其他因素偏离真实值时,可以通过回归分析找到一条最能代表这些数据的直线或曲线。当然,进行回归分析需要事先知道线的类型(正弦、余弦、幂、对数等)。
线性回归分析的目标是从坐标系的某一轴(x 或 y 轴)中,找到相对这条轴的一条最优解直线。这里的最优解指该直线到所有数据点的距离之和最小(通常指垂直距离)。因此,我们认为这条直线最能反映数据的整体趋势。
需要注意的是,除了线性回归以外还有主成分分析(PCA)方法。不使用后者通常是因为这组采样点的 x 或 y 坐标可能只是时间序列或其它顺序变量(如隔几秒采样一次),这种情况下,我们更关注变量之间的关系本身,而不是数据的降维处理。
图片来自:cuemath.com
一种简单直接的数学优化方法,是回归分析的一种实现。其目标是最小化以下表达式: \[\mathbb{E} = \sum_{i=1}^{n}(y_i - f(x_i))^2\] 通过找出误差平方和 SSE 最小的值 \( \mathbb{E} \)(最小化)实现“找到最能代表这些数据的直线或曲线”的目标。
例如,在特征点中找出一条 \(y = mx+b\) 最小二乘法通过计算所有特征点的:
得到斜度,以及代入斜度,得到截距: \[ m = \frac{n \sum xy - \sum x \sum y}{n \sum x^2 - \left(\sum x\right)^2} \] \[ b = \frac{\sum y - m \sum x}{n} \] 从而拟合出整个 \(y = mx+b\) 直线。
将特征角点归纳为“合群 inlier”与“离群 outlier”两类,通过迭代的方式筛除离群特征角点,从而增强最小二乘法抗干扰能力的处理。这个步骤大致分为:
图片来自:维基百科
即模型识别的结果,分为 4 类:
IDENTITY
:IDTX 变换TRANSLATION
:平移变换ROTZOOM
:平移,旋转和对称放大变换AFFINE
:本格仿射变换单帧参考帧下,一格预测像素可以表示为 \( P\left(x,y\right) = m\left(x,y\right) \cdot R\left(x,y\right)\),代表“预测值为缩放值与初始值的积”。混合参考帧结合了两帧被参考帧,因此在“重叠的预测像素”上也需要分配权重,如某个预测像素的值为:\[ P\left(x,y\right) = m\left(x,y\right) ∗ R_{1}\left(x,y\right) + (64 - m\left(x,y\right)) ∗ R_{2}\left(x,y\right) \]
这里的权重/缩放值 \( m\left(x,y\right) \) 最大(100%)被放大了 64 倍,从而优化为整数计算并提高精度。
将 \( d_1, d_2 \) 作为混合被参考帧距离当前预测块的距离,根据 \(d_2\) 小于 \(d_1\) 的多少倍来确定权重。特殊情况为“平均加权模式分权 Average weighted predictor”,即距离加权分配中出现距离相等的情况。注:分为帧间以及帧内两种加权权重。
直接从两个被参考帧中的同位像素做差,权重设定为:
\[m\left(x,y\right) = \begin{cases} 38 + \frac{\left| P_{1}\left(x,y\right) - P_{2}\left(x,y\right) \right|}{16} \text{, mask_type = 0} \\ 64 - 38 + \frac{\left| P_{1}\left(x,y\right) - P_{2}\left(x,y\right) \right|}{16} \text{, mask_type = 1} \\ \end{cases}\]重叠块运动补偿 OBMC 见下方的运动补偿版块中,结合 DC、垂直/水平夹角或平滑/SMOOTH 的帧内编码块,以及仿射预测的帧间编码块。结合的方法包括了楔形蒙版预测的横向和纵向模式,但主要为随坐标变化过渡权重的两种预测结果混合,实现合成。
图:重叠合成的可行样式与渐变结构
Wedge_Master_Oblique_Odd/Even
,Wedge_Master_Vertical
)中生成:
Wedge_Master_Oblique_Odd[MASK_MASTER_SIZE] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 18, 37, 53, 60, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 }
Wedge_Master_Oblique_Even[MASK_MASTER_SIZE] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 11, 27, 46, 58, 62, 63, 64, 64, 64, 64 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 64, 64, 64, 64, 64, 64, 64, 64 }
Wedge_Master_Vertical[MASK_MASTER_SIZE] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 43, 57, 62, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 }
通过确认当前块横向还是纵向的 4x4 分块数量更多,以预选一批模式,然后循环遍历选取蒙版角度,以及额外用于对齐的 x 偏移与 y 偏移,完成预测:
图:楔形蒙版的 NxN,Nx2N 分类的不同模式
图:不同混合参考帧预测模式的结果对比
WEDGE_OBLIQUE27, 4, 4
WEDGE_OBLIQUE63, 4, 4
WEDGE_OBLIQUE117, 4, 4
WEDGE_OBLIQUE153, 4, 4
WEDGE_HORIZONTAL, 4, 2
WEDGE_HORIZONTAL, 4, 4
WEDGE_HORIZONTAL, 4, 6
WEDGE_VERTICAL, 4, 4
WEDGE_OBLIQUE27, 4, 2
WEDGE_OBLIQUE27, 4, 6
WEDGE_OBLIQUE153, 4, 2
WEDGE_OBLIQUE153, 4, 6
WEDGE_OBLIQUE63, 2, 4
WEDGE_OBLIQUE63, 6, 4
WEDGE_OBLIQUE117, 2, 4
WEDGE_OBLIQUE117, 6, 4
WEDGE_OBLIQUE27, 4, 4
WEDGE_OBLIQUE63, 4, 4
WEDGE_OBLIQUE117, 4, 4
WEDGE_OBLIQUE153, 4, 4
WEDGE_VERTICAL, 2, 4
WEDGE_VERTICAL, 4, 4
WEDGE_VERTICAL, 6, 4
WEDGE_HORIZONTAL, 4, 4
WEDGE_OBLIQUE27, 4, 2
WEDGE_OBLIQUE27, 4, 6
WEDGE_OBLIQUE153, 4, 2
WEDGE_OBLIQUE153, 4, 6
WEDGE_OBLIQUE63, 2, 4
WEDGE_OBLIQUE63, 6, 4
WEDGE_OBLIQUE117, 2, 4
WEDGE_OBLIQUE117, 6, 4
WEDGE_OBLIQUE27, 4, 4
WEDGE_OBLIQUE63, 4, 4
WEDGE_OBLIQUE117, 4, 4
WEDGE_OBLIQUE153, 4, 4
WEDGE_HORIZONTAL, 4, 2
WEDGE_HORIZONTAL, 4, 6
WEDGE_VERTICAL, 2, 4
WEDGE_VERTICAL, 6, 4
WEDGE_OBLIQUE27, 4, 2
WEDGE_OBLIQUE27, 4, 6
WEDGE_OBLIQUE153, 4, 2
WEDGE_OBLIQUE153, 4, 6
WEDGE_OBLIQUE63, 2, 4
WEDGE_OBLIQUE63, 6, 4
WEDGE_OBLIQUE117, 2, 4
WEDGE_OBLIQUE117, 6, 4
HEVC 中的帧内参考源拥有左侧一列,顶部一行,共两排参考源加一个左上角参考源。SVT-AV1 编码器的帧内预测块拥有其所在 Superblock 的左侧和顶部一行一列,外加一个左上肩型序列(Γ),共 3 列。
左侧序列约一个 SB 高,可使用帧内编码 SB 的 y 坐标锁定。顶部序列大约有一个图片宽,且包含了原本的左上角参考源像素,可以使用当前块的 x 坐标锁定。
图:SVT-AV1 中帧内预测的参考源序列。
AV1 Spec - Intra Prediction 中,左上肩序列仍然是分为左侧和顶部两个序列看待的,当参考源缺失时按如下顺序填补。
仅左侧或上侧参考源可用——以左上角参考源的像素值填补
图:haveAbove == 0; haveLeft == 1
时的填补
两侧参考源皆不可用——设为最大像素值的 \(\frac{1}{4}\)。
图:haveAbove == 0; haveLeft == 0
时的填补
左侧和上侧参考源可用,但右上行参考源缺失——用顶部的最右侧参考源填补。
图:haveAbove == 1; haveAboveRight == 0
时的填补
左上角的参考源遵循相同的填补逻辑。见:Wikidocs
临近参考源序列在当前帧开始帧内编码时重置。每个块完成编码后,其模式信息(或参考信息)会被填入这些序列。SVT-AV1 编码器更新和访问参考源序列的流程如下:
图:帧内预测的参考源序列更新。由于参考模式的不同,所以更新的参考源序列也不同
箭头表示了 Z 字型扫描编码细分块的顺序,颜色表示每个块编码所选用的参考模式(图中模式仅供参考)。三个参考源序列中会储存已完成编码的当前块,也包括了它们的参考模式。
D45_PRED
:+0°D63_PRED
:+18°H_PRED
:+27°D117_PRED
:+27°D135_PRED
:+18°D153_PRED
:+18°V_PRED
:+27°D207_PRED
:+27°AV1 沿用了一小部分 VP9 的基本夹角。
D45_PRED
:+0°D67_PRED
:+22°H_PRED
:+23°D113_PRED
:+23°D135_PRED
:+22°D157_PRED
:+22°V_PRED
:+23°D203_PRED
:+23°偏移角最大和最小的夹角分别为 207+9°和 45-9°,最终相差 180°(Type II 最终相差 176°)。8x8 的小预测块仍然沿用 8 个夹角以节省算力。这种先基本后细化夹角的查找方法类似于 x265 中的 fast-intra 查找。
图:帧内预测的夹角模式,为 8 个夹角中添加了左右各 3 个,每个 3°的偏移角
分为以二次多项式插值(一种样条 Spline 插值)的 SMOOTH_V_PRED
与 SMOOTH_H_PRED
,以及合并前两者,构成类似 HEVC 趋平预测模式(Planar)的 SMOOTH_PRED
。权重根据预测像素坐标变化而变化:
SMOOTH_V_PRED
使用二次多项式插值计算左下角参考点到左上角参考点的过渡,然后纵向填满该编码块SMOOTH_H_PRED
使用二次多项式插值计算右上角参考点到左上角参考点的过渡,然后横向填满该编码块SMOOTH_PRED
使用二次多项式插值出两种过渡,然后通过 Round2 函数取平均
// SMOOTH_V_PRED
smoothPred = smWeights[i] * AboveRow[j] + (256-smWeights[i]) * LeftCol[h-1]
pred[i][j] = Round2(smoothPred, 8) // 约分
// SMOOTH_H_PRED
smoothPred = smWeights[j] * LeftCol[i] + (256-smWeights[j]) * AboveRow[w-1]
pred[i][j] = Round2(smoothPred, 8) // 约分
// SMOOTH_PRED
smoothPred = smWeights[i] * AboveRow[j] + (256-smWeights[i]) * LeftCol[h-1] + smWeights[j] * LeftCol[i] + (256-smWeights[j]) * AboveRow[w-1]
pred[i][j] = Round2(smoothPred, 9) // 约分的同时取平均
Round2 类似于取模 modulus,将输入 \(x\) 约分到最接近的 \(2^n\) 倍数(如 \(n=3\) 则为逼近 8 倍数的数),然后通过 \(+ 2^{n-1}\) 实现对齐偏移。也代表通过二次幂转换十进制到二进制 bits 的大小
// 约分并对其到二进制下 n 的倍数
Round2(x,n) = floor((x+2^(n-1)) / 2^n)
// PowerShell 演算:
// PS > $x = 1234; $n = 3;
// PS > [Math]::floor( (($x + [Math]::Pow(2, $n-1))) / [Math]::Pow(2, $n) )
// 154
// 注:154*8 = 1232; 155*8 = 1240;
沿用了 VP9 中的 DC_PRED
。
来自 PNG 图像格式,适合在夹角未知的情况下模仿参考源,在常规的预测方法无效时提高了预测的准确度。VP9 中为 TM_PRED
,代表预测像素值由“所对应顶部与左侧参考源之和,减左上参考源的差”得到。AV1 升级为 PAETH_PRED
,见:AV1 Spec。
TM_PRED
插值,赋值到变量 base
base
与其对应的顶部、左侧、左上参考源的差,再取三者中最小TM_PRED
能更好地隔离边缘纹理图:TM_PRED
所对应的顶部,左侧和左上角参考源
base = AboveRow[j] + LeftCol[i] – AboveRow[-1]
pLeft = Abs(base – LeftCol[i]) // abs(A-C)
pTop = Abs(base – AboveRow[j]) // abs(L-C)
pTopLeft = Abs(base – AboveRow[-1]) // abs(A+L-2*C)
if (pLeft <= pTop && pLeft <= pTopLeft) // 选择三者里值最小的参考源
pred[i][j] = LeftCol[i] // 左侧参考源最小
else if (pTop <= pTopLeft)
pred[i][j] = AboveRow[j] // 顶部最小
else
pred[i][j] = AboveRow[-1] // 左上角最小
使用与 TM_PRED
类似的原理,结合递归逻辑预测一处 8x8 范围。AV1 中定义了 5 种递归模式,每种附带一组 7-tap 滤镜,将当前块划分为 4x2 的细分块,这些细分块由来自顶部和左侧块的 7 个参考源,由滤镜插值得到。每个 4x2 细分块内使用不同的 7-tap 滤镜,且每个完成预测的细分块都被用于下一个 4x2 细分块的预测,构成递归计算的参考结构。
递归插值模式不是在夹角,DC,PAETH 等模式基础上进行微调,而是作为独立的预测模式存在,所以需要模式决策分别判断率失真程度(SVT-AV1 Readme)。理论上可以改善“传统帧内预测”应对块中画面微小变化的保真度。
像素 | FILTER_DC_PRED |
FILTER_V_PRED |
FILTER_H_PRED |
FILTER_D157_PRED |
FILTER_PAETH_PRED |
---|---|---|---|---|---|
0 | -6,10,0,0,0,12,0,0 | -10,16,0,0,0,10,0,0 | -8,8,0,0,0,16,0,0 | -2,8,0,0,0,10,0,0 | -12,14,0,0,0,14,0,0 |
1 | -5,2,10,0,0,9,0,0 | -6,0,16,0,0,4,0,0 | -8,0,8,0,0,16,0,0 | -1,3,8,0,0,6,0,0 | -10,0,14,0,0,12,0,0 |
2 | -3,1,1,10,0,7,0,0 | -4,0,0,16,0,4,0,0 | -8,0,0,0,8,16,0,0 | -1,2,3,8,0,4,0,0 | -9,0,0,14,0,11,0,0 |
3 | -3,1,1,2,10,5,0,0 | -2,0,0,0,16,2,0,0 | -8,0,0,0,8,16,0,0 | 0,1,2,3,8,2,0,0 | -8,0,0,0,14,10,0,0 |
4 | -4,6,0,0,0,2,12,0 | -10,16,0,0,0,0,10,0 | -4,4,0,0,0,0,16,0 | -1,4,0,0,0,3,10,0 | -10,12,0,0,0,0,14,0 |
5 | -3,2,6,0,0,2,9,0 | -6,0,16,0,0,0,6,0 | -4,0,4,0,0,0,16,0 | -1,3,4,0,0,4,6,0 | -9,1,12,0,0,0,12,0 |
6 | -3,2,2,6,0,2,7,0 | -4,0,0,16,0,0,4,0 | -4,0,0,4,0,0,16,0 | -1,2,3,4,0,4,4,0 | -8,0,0,12,0,1,11,0 |
7 | -3,1,2,2,6,3,5,0 | -2,0,0,0,16,0,2,0 | -4,0,0,0,4,0,16,0 | -1,2,2,3,4,3,3,0 | -7,0,0,1,12,1,9,0 |
表:权重分布的和为 16;末尾的 0 不会被访问,可能起到分隔符作用
参考源序列索引号见上图。大致步骤(滤镜)为:
i2; j4
p[7]
i = 0..6
i == 0..4
:
i2 == 0
p[i] = AboveRow[ (j4 << 2) + i - 1 ]
i == 0; j4 == 0
p[i] = LeftCol[ (j4 << 1) - 1 ]
i > 0; i2 > 0; j4 > 0
:
p[i] = pred[ ( i2 << 1 ) - 1 ][ ( j4 << 2 ) + i - 1 ]
i == 5..6
:
j4 == 0
[i] = LeftCol[ (i2 << 1) + i - 5 ]
j4 > 0
p[i] = pred[ ( i2 << 1 ) + i - 5 ][ ( j4 << 2 ) - 1 ]
i1; j1
i = 0..6
p
pr
i == 0..6
:
pr[i] = Intra_Filter_Taps[ INTRA_FILTER_MODES ][ ( i1 << 2 ) + j1 ][i] * p[i]
滤镜如下表:
Intra_Filter_Taps[ INTRA_FILTER_MODES ][ 8 ][ 7 ] =
{
{
{ -6, 10, 0, 0, 0, 12, 0 },
{ -5, 2, 10, 0, 0, 9, 0 },
{ -3, 1, 1, 10, 0, 7, 0 },
{ -3, 1, 1, 2, 10, 5, 0 },
{ -4, 6, 0, 0, 0, 2, 12 },
{ -3, 2, 6, 0, 0, 2, 9 },
{ -3, 2, 2, 6, 0, 2, 7 },
{ -3, 1, 2, 2, 6, 3, 5 },
},
{
{ -10, 16, 0, 0, 0, 10, 0 },
{ -6, 0, 16, 0, 0, 6, 0 },
{ -4, 0, 0, 16, 0, 4, 0 },
{ -2, 0, 0, 0, 16, 2, 0 },
{ -10, 16, 0, 0, 0, 0, 10 },
{ -6, 0, 16, 0, 0, 0, 6 },
{ -4, 0, 0, 16, 0, 0, 4 },
{ -2, 0, 0, 0, 16, 0, 2 },
},
{
{ -8, 8, 0, 0, 0, 16, 0 },
{ -8, 0, 8, 0, 0, 16, 0 },
{ -8, 0, 0, 8, 0, 16, 0 },
{ -8, 0, 0, 0, 8, 16, 0 },
{ -4, 4, 0, 0, 0, 0, 16 },
{ -4, 0, 4, 0, 0, 0, 16 },
{ -4, 0, 0, 4, 0, 0, 16 },
{ -4, 0, 0, 0, 4, 0, 16 },
},
{
{ -2, 8, 0, 0, 0, 10, 0 },
{ -1, 3, 8, 0, 0, 6, 0 },
{ -1, 2, 3, 8, 0, 4, 0 },
{ 0, 1, 2, 3, 8, 2, 0 },
{ -1, 4, 0, 0, 0, 3, 10 },
{ -1, 3, 4, 0, 0, 4, 6 },
{ -1, 2, 3, 4, 0, 4, 4 },
{ -1, 2, 2, 3, 4, 3, 3 },
},
{
{ -12, 14, 0, 0, 0, 14, 0 },
{ -10, 0, 14, 0, 0, 12, 0 },
{ -9, 0, 0, 14, 0, 11, 0 },
{ -8, 0, 0, 0, 14, 10, 0 },
{ -10, 12, 0, 0, 0, 0, 14 },
{ -9, 1, 12, 0, 0, 0, 12 },
{ -8, 0, 0, 12, 0, 1, 11 },
{ -7, 0, 0, 1, 12, 1, 9 },
}
}
色度平面的预测像素通过亮度平面的同位像素值生成。高频部分通过重建块减去亮度块平均值预测得到,低频部分取自亮度块 DC_PRED
预测模式的像素值。高低频相加则得到一个色度预测像素,见:AV1 Spec - CfL
通过“伪动态向量”定位一个重建块的伪帧间预测。亮度块的伪动态向量缩小后可以用于色度平面,但向量会变成半像素精度,这种情况下会额外在子像素上用到双线性插值滤镜,见:AV1 Spec。
图:帧内块拷贝预测的可用块限制
在当前 8x8~64x64 帧内编码亮度或色度块判断为 DC_PRED
时的可选预测模式。“调色板”代表一套类似于熵编码/文本编码的上下文序列。
调色板的映射包括从左,上和左上参考源中筛选出惯用值,再对上下文排序,最后以对角线扫描的顺序映射出预测块。预测每个块都需要更新一遍调色板(上下文)。编码时,编码块的第一个预测像素会独立选择调色板中的颜色,其余的预测像素使用其顶部、左侧和左上角的参考源作为熵编码的上下文进行编码。见:AV1 Spec - Palette Prediction,AV1 Spec - Palette Color Context
图:4x4 块调色板模式的扫描顺序,与调色板上下文的例子(右)
一般情况下,AV1 会尝试所有帧内预测模式,并通过计算各个结果的率失真程度以选出合适的模式。特定情况下:
INTRA_FILTER_MODES
):递归帧内预测模式DC_PRED
模式,则根据判断是否应该换成递归模式FILTER_DC_PRED
FILTER_V_PRED
FILTER_H_PRED
FILTER_DC_PRED
FILTER_D157_PRED
由于时间条件不允许,本教程将忽略除 CRF 模式以外(VBR、CBR、2pass)的编码器用法。SVT-AV1 的详细率控制说明见 SVT-AV1 Docs。
AV1 与 VP9 中的量化步骤大致如下:
Ac_Qlookup
、Dc_Qlookup
表中的,QIndex 所对应的值得到AVC、HEVC 中为 QStep,代表量化强度的阶梯间隔,映射到对应的量化矩阵。VP9、AV1 中的默认量化模式是直接将变换块除以量化步长得到。量化步长由量化步长索引 QIndex 结合 Dc_Qlookup
、Ac_Qlookup
得到,量化步长索引同时用于量化与逆量化。
在非默认量化方法中,AV1 支持 15 排量化矩阵。后排矩阵比前排的量化强度更高,帧间排比帧内排的强度更高。量化矩阵值的取值由块大小,率控制模式,和方差自适应量化根据位深、DC/AC 变换、Y/UV 平面等参数决定。结构大致如下(见 AV1 Spec):
Quantizer_Matrix[ 15 ][ 2 ][ QM_TOTAL_SIZE ] = {
{
{ // 亮度块 QM level 1,共 3344 个值,此处省略
// 4x4 QM,
// 8x8 QM,
// 16x16 QM,
// 32x32 QM,
// 4x8 QM,
// 8x4 QM,
// 8x16 QM,
// 16x8 QM,
// 16x32 QM,
// 32x16 QM,
// 4x16 QM,
// 16x4 QM,
// 8x32 QM,
// 32x8 QM,
},
{ // 色度块 QM level 1
// 4x4 QM,
// 8x8 QM,
// ... 略 ...
}
},
{
{ // 亮度块 QM level 2
// 4x4 QM,
// 8x8 QM,
// ... 略 12 “列” ...
},
// ... 略 1 行 ...
},
// ... 略 13 排 ...
}
以下是得到 QIndex 后的一些相关 AV1 代码,语法元素见 AV1 Spec。
quantization_params( ) {
base_q_idx // 获取 QIndex
DeltaQYDc = read_delta_q( ) // 获取 QIndex 偏移
// 获取色度平面的 DC、AC,Y、Cb、Cr QIndex 偏移
if (NumPlanes > 1) {
if (separate_uv_delta_q) { diff_uv_delta }
else { diff_uv_delta = 0 }
DeltaQUDc = read_delta_q( )
DeltaQUAc = read_delta_q( )
if (diff_uv_delta) {
DeltaQVDc = read_delta_q( )
DeltaQVAc = read_delta_q( )
}
else {
DeltaQVDc = DeltaQUDc
DeltaQVAc = DeltaQUAc
}
}
else { // 无色度平面
DeltaQUDc = 0
DeltaQUAc = 0
DeltaQVDc = 0
DeltaQVAc = 0
}
using_qmatrix // 是否调用量化矩阵(3D 序列,见上方)
if (using_qmatrix) {
qm_y // 选取亮度平面量化矩阵
qm_u // 选取 Cb 平面量化矩阵
if (!separate_uv_delta_q) { qm_v = qm_u } // 选取 Cr 平面量化矩阵
else { qm_v }
} // 关闭量化矩阵则跳过量化
}
read_delta_q( ) { // 获取 QIndex,未设置则返回 0
delta_coded
if (delta_coded) { delta_q }
else { delta_q = 0 }
return delta_q
}
将量化步长索引 QIndex 转给 aom_qmatrix
函数,以获取量化矩阵。语法元素见 github.com/mozilla。
#if CONFIG_AOM_QM
// 计算出量化矩阵范围限制(first,last 对应参数 --qm-min,--qm-max)
static INLINE int aom_get_qmlevel(int qindex, int first, int last) {
// 将 QIndex 映射到 first~last 范围,再进一步映射到 QINDEX_RANGE 的范围,得到可用的量化矩阵分级
int qmlevel = (qindex * (last + 1 - first) + QINDEX_RANGE / 2) / QINDEX_RANGE;
// 限制量化强度分级到编码器支持的最大范围
qmlevel = AOMMIN(qmlevel + first, NUM_QM_LEVELS - 1);
return qmlevel;
}
// 定义量化矩阵值初始化函数
void aom_qm_init(struct AV1Common *cm);
// 获取逆量化 _iqmatrix 和量化 _qmatrix 矩阵。参数决定矩阵选取:
// cm:上下文指针
// comp:颜色分量
// tx_size:变换块大小
// is_intra:区分帧内、帧间编码帧
qm_val_t *aom_iqmatrix(struct AV1Common *cm, int qindex, int comp, TX_SIZE tx_size, int is_intra);
qm_val_t *aom_qmatrix(struct AV1Common *cm, int qindex, int comp, TX_SIZE tx_size, int is_intra);
#endif
获取量化、逆量化矩阵:将量化步长索引映射到全局量化矩阵——gqmatrix
序列。语法元素见 github.com/mozilla。
#if CONFIG_AOM_QM
qm_val_t *aom_iqmatrix(AV1_COMMON *cm, int qmlevel, int is_chroma, TX_SIZE tx_size, int is_intra) {
// 根据量化强度、平面类型区分、帧内帧间区分给出逆量化矩阵
return &cm->giqmatrix[qmlevel][!!is_chroma][!!is_intra][tx_size][0];
}
qm_val_t *aom_qmatrix(AV1_COMMON *cm, int qmlevel, int is_chroma, TX_SIZE tx_size, int is_intra) {
// 根据量化强度、平面类型区分、帧内帧间区分给出量化矩阵
return &cm->gqmatrix[qmlevel][!!is_chroma][!!is_intra][tx_size][0];
}
// ... 省略不相关内容 ...
#endif
使用 giqmatrix
、gqmatrix
的原因不明,推测是为了节约内存。
全局和局部量化矩阵会进一步赋值到分瓣量化矩阵 seg_iqmatrix
、seg_qmatrix
,此处省略。
在默认方法中,VP9 与 AV1 通过将整帧乘以一个固定强度实现;AV1 的逆量化值由多个因素推导。从量化结果像素 \( q[i] \) 开始的过程为:
\[ \text{dq}\left(i\right) = \frac{q[i] * Q_{\text{Step}}}{\text{deNorm}} \]deNorm | 变换块面积 | 宽高举例 |
---|---|---|
1 | < 512 采样点 | 16x16 |
2 | 512~1024 采样点 | 32x32、16x64 等 |
4 | > 1024 采样点 | 128x128 |
表:deNorm 的值为 1、2 或 4,代表变换块大小不同时的强度变化。见 Wikidocs
for(i=0; i < th; i++) { // 遍历分块宽,高
for(j=0; j < tw; j++) {
// 获取量化值
q = (i==0 && j==0) ? get_dc_quant(plane) : get_ac_quant(plane);
// 使用量化矩阵,使用 IDTX 之前的变换(enum 0~8),且分瓣量化矩阵级别小于 15
if (using_qmatrix==1 && PlaneTxType<IDTX && SegQMLevel[plane][segment_id] < 15) {
level = SegQMLevel[plane][segment_id]
offset = Qm_Offset[txSz] + i * tw + j // 量化矩阵根据多个参数偏移,因为各种块大小的量化值都在同一个序列里
q2 = Round2(q * Quantizer_Marix[level][offset], 5); // 量化矩阵索引号
}
else { q2 = q; }
dq = Quant[i*tw+j] * q2; // 通过矩阵乘法得到逆量化强度
sign = dq < 0 ? -1 : 1; // 获取强度的正负
dq2 = sign * (Abs(dq) & 0xFFFFFF) / dqDenom
Dequant[i][j] = Clip3(-(1 << (7+BD)), (1<<(7+BD))-1, dq2);
}
}
AV1 中的默认量化与逆量化方法的强度。范围为 0~255,由 qp_to_qindex
映射出 0~63。逆量化结果由块中像素值乘进 QLookup 表中对应的数,再将结果的二进制右移一位实现。这些值会由偏移值进一步调整:
图:QLookup 表对应的 0~63 QP 范围。与 0~255 的 QIndex 范围的曲线变化极小
Dc_Qlookup[ 3 ][ 256 ] = { // 解码,取值位深:8~12 → 0~2,索引号:0~255
{ // 强度 4~1336,最低强度 4 可能通 x264/5 的“--qp 4”(最低有损量化)
4, 8, 8, 9, 10, 11, 12, 12, 13, 14, 15, 16,
17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26, 26,
27, 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37,
38, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47,
48, 48, 49, 50, 51, 52, 53, 53, 54, 55, 56, 57,
57, 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 66,
67, 68, 69, 70, 70, 71, 72, 73, 74, 74, 75, 76,
77, 78, 78, 79, 80, 81, 81, 82, 83, 84, 85, 85,
87, 88, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104,
105, 107, 108, 110, 111, 113, 114, 116, 117, 118, 120, 121,
123, 125, 127, 129, 131, 134, 136, 138, 140, 142, 144, 146,
148, 150, 152, 154, 156, 158, 161, 164, 166, 169, 172, 174,
177, 180, 182, 185, 187, 190, 192, 195, 199, 202, 205, 208,
211, 214, 217, 220, 223, 226, 230, 233, 237, 240, 243, 247,
250, 253, 257, 261, 265, 269, 272, 276, 280, 284, 288, 292,
296, 300, 304, 309, 313, 317, 322, 326, 330, 335, 340, 344,
349, 354, 359, 364, 369, 374, 379, 384, 389, 395, 400, 406,
411, 417, 423, 429, 435, 441, 447, 454, 461, 467, 475, 482,
489, 497, 505, 513, 522, 530, 539, 549, 559, 569, 579, 590,
602, 614, 626, 640, 654, 668, 684, 700, 717, 736, 755, 775,
796, 819, 843, 869, 896, 925, 955, 988, 1022, 1058, 1098, 1139,
1184, 1232, 1282, 1336
},
{ // 强度 4~5347
4, 9, 10, 13, 15, 17, 20, 22, 25, 28, 31, 34,
37, 40, 43, 47, 50, 53, 57, 60, 64, 68, 71, 75,
78, 82, 86, 90, 93, 97, 101, 105, 109, 113, 116, 120,
124, 128, 132, 136, 140, 143, 147, 151, 155, 159, 163, 166,
170, 174, 178, 182, 185, 189, 193, 197, 200, 204, 208, 212,
215, 219, 223, 226, 230, 233, 237, 241, 244, 248, 251, 255,
259, 262, 266, 269, 273, 276, 280, 283, 287, 290, 293, 297,
300, 304, 307, 310, 314, 317, 321, 324, 327, 331, 334, 337,
343, 350, 356, 362, 369, 375, 381, 387, 394, 400, 406, 412,
418, 424, 430, 436, 442, 448, 454, 460, 466, 472, 478, 484,
490, 499, 507, 516, 525, 533, 542, 550, 559, 567, 576, 584,
592, 601, 609, 617, 625, 634, 644, 655, 666, 676, 687, 698,
708, 718, 729, 739, 749, 759, 770, 782, 795, 807, 819, 831,
844, 856, 868, 880, 891, 906, 920, 933, 947, 961, 975, 988,
1001, 1015, 1030, 1045, 1061, 1076, 1090, 1105, 1120, 1137, 1153, 1170,
1186, 1202, 1218, 1236, 1253, 1271, 1288, 1306, 1323, 1342, 1361, 1379,
1398, 1416, 1436, 1456, 1476, 1496, 1516, 1537, 1559, 1580, 1601, 1624,
1647, 1670, 1692, 1717, 1741, 1766, 1791, 1817, 1844, 1871, 1900, 1929,
1958, 1990, 2021, 2054, 2088, 2123, 2159, 2197, 2236, 2276, 2319, 2363,
2410, 2458, 2508, 2561, 2616, 2675, 2737, 2802, 2871, 2944, 3020, 3102,
3188, 3280, 3375, 3478, 3586, 3702, 3823, 3953, 4089, 4236, 4394, 4559,
4737, 4929, 5130, 5347
},
{ // 强度 4~21837
4, 12, 18, 25, 33, 41, 50, 60,
70, 80, 91, 103, 115, 127, 140, 153,
166, 180, 194, 208, 222, 237, 251, 266,
281, 296, 312, 327, 343, 358, 374, 390,
405, 421, 437, 453, 469, 484, 500, 516,
532, 548, 564, 580, 596, 611, 627, 643,
659, 674, 690, 706, 721, 737, 752, 768,
783, 798, 814, 829, 844, 859, 874, 889,
904, 919, 934, 949, 964, 978, 993, 1008,
1022, 1037, 1051, 1065, 1080, 1094, 1108, 1122,
1136, 1151, 1165, 1179, 1192, 1206, 1220, 1234,
1248, 1261, 1275, 1288, 1302, 1315, 1329, 1342,
1368, 1393, 1419, 1444, 1469, 1494, 1519, 1544,
1569, 1594, 1618, 1643, 1668, 1692, 1717, 1741,
1765, 1789, 1814, 1838, 1862, 1885, 1909, 1933,
1957, 1992, 2027, 2061, 2096, 2130, 2165, 2199,
2233, 2267, 2300, 2334, 2367, 2400, 2434, 2467,
2499, 2532, 2575, 2618, 2661, 2704, 2746, 2788,
2830, 2872, 2913, 2954, 2995, 3036, 3076, 3127,
3177, 3226, 3275, 3324, 3373, 3421, 3469, 3517,
3565, 3621, 3677, 3733, 3788, 3843, 3897, 3951,
4005, 4058, 4119, 4181, 4241, 4301, 4361, 4420,
4479, 4546, 4612, 4677, 4742, 4807, 4871, 4942,
5013, 5083, 5153, 5222, 5291, 5367, 5442, 5517,
5591, 5665, 5745, 5825, 5905, 5984, 6063, 6149,
6234, 6319, 6404, 6495, 6587, 6678, 6769, 6867,
6966, 7064, 7163, 7269, 7376, 7483, 7599, 7715,
7832, 7958, 8085, 8214, 8352, 8492, 8635, 8788,
8945, 9104, 9275, 9450, 9639, 9832, 10031, 10245,
10465, 10702, 10946, 11210, 11482, 11776, 12081, 12409,
12750, 13118, 13501, 13913, 14343, 14807, 15290, 15812,
16356, 16943, 17575, 18237, 18949, 19718, 20521, 21387
}
}
Ac_Qlookup[ 3 ][ 256 ] = { // 解码,取值位深:8~12 → 0~2,强度:0~255
{ // 强度 4~1828
4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126,
128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
152, 155, 158, 161, 164, 167, 170, 173, 176, 179, 182, 185,
188, 191, 194, 197, 200, 203, 207, 211, 215, 219, 223, 227,
231, 235, 239, 243, 247, 251, 255, 260, 265, 270, 275, 280,
285, 290, 295, 300, 305, 311, 317, 323, 329, 335, 341, 347,
353, 359, 366, 373, 380, 387, 394, 401, 408, 416, 424, 432,
440, 448, 456, 465, 474, 483, 492, 501, 510, 520, 530, 540,
550, 560, 571, 582, 593, 604, 615, 627, 639, 651, 663, 676,
689, 702, 715, 729, 743, 757, 771, 786, 801, 816, 832, 848,
864, 881, 898, 915, 933, 951, 969, 988, 1007, 1026, 1046, 1066,
1087, 1108, 1129, 1151, 1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343,
1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567, 1597, 1628, 1660, 1692,
1725, 1759, 1793, 1828
},
{ // 强度 4~7312
4, 9, 11, 13, 16, 18, 21, 24, 27, 30, 33, 37,
40, 44, 48, 51, 55, 59, 63, 67, 71, 75, 79, 83,
88, 92, 96, 100, 105, 109, 114, 118, 122, 127, 131, 136,
140, 145, 149, 154, 158, 163, 168, 172, 177, 181, 186, 190,
195, 199, 204, 208, 213, 217, 222, 226, 231, 235, 240, 244,
249, 253, 258, 262, 267, 271, 275, 280, 284, 289, 293, 297,
302, 306, 311, 315, 319, 324, 328, 332, 337, 341, 345, 349,
354, 358, 362, 367, 371, 375, 379, 384, 388, 392, 396, 401,
409, 417, 425, 433, 441, 449, 458, 466, 474, 482, 490, 498,
506, 514, 523, 531, 539, 547, 555, 563, 571, 579, 588, 596,
604, 616, 628, 640, 652, 664, 676, 688, 700, 713, 725, 737,
749, 761, 773, 785, 797, 809, 825, 841, 857, 873, 889, 905,
922, 938, 954, 970, 986, 1002, 1018, 1038, 1058, 1078, 1098, 1118,
1138, 1158, 1178, 1198, 1218, 1242, 1266, 1290, 1314, 1338, 1362, 1386,
1411, 1435, 1463, 1491, 1519, 1547, 1575, 1603, 1631, 1663, 1695, 1727,
1759, 1791, 1823, 1859, 1895, 1931, 1967, 2003, 2039, 2079, 2119, 2159,
2199, 2239, 2283, 2327, 2371, 2415, 2459, 2507, 2555, 2603, 2651, 2703,
2755, 2807, 2859, 2915, 2971, 3027, 3083, 3143, 3203, 3263, 3327, 3391,
3455, 3523, 3591, 3659, 3731, 3803, 3876, 3952, 4028, 4104, 4184, 4264,
4348, 4432, 4516, 4604, 4692, 4784, 4876, 4972, 5068, 5168, 5268, 5372,
5476, 5584, 5692, 5804, 5916, 6032, 6148, 6268, 6388, 6512, 6640, 6768,
6900, 7036, 7172, 7312
},
{ // 强度 4~29247
4, 13, 19, 27, 35, 44, 54, 64,
75, 87, 99, 112, 126, 139, 154, 168,
183, 199, 214, 230, 247, 263, 280, 297,
314, 331, 349, 366, 384, 402, 420, 438,
456, 475, 493, 511, 530, 548, 567, 586,
604, 623, 642, 660, 679, 698, 716, 735,
753, 772, 791, 809, 828, 846, 865, 884,
902, 920, 939, 957, 976, 994, 1012, 1030,
1049, 1067, 1085, 1103, 1121, 1139, 1157, 1175,
1193, 1211, 1229, 1246, 1264, 1282, 1299, 1317,
1335, 1352, 1370, 1387, 1405, 1422, 1440, 1457,
1474, 1491, 1509, 1526, 1543, 1560, 1577, 1595,
1627, 1660, 1693, 1725, 1758, 1791, 1824, 1856,
1889, 1922, 1954, 1987, 2020, 2052, 2085, 2118,
2150, 2183, 2216, 2248, 2281, 2313, 2346, 2378,
2411, 2459, 2508, 2556, 2605, 2653, 2701, 2750,
2798, 2847, 2895, 2943, 2992, 3040, 3088, 3137,
3185, 3234, 3298, 3362, 3426, 3491, 3555, 3619,
3684, 3748, 3812, 3876, 3941, 4005, 4069, 4149,
4230, 4310, 4390, 4470, 4550, 4631, 4711, 4791,
4871, 4967, 5064, 5160, 5256, 5352, 5448, 5544,
5641, 5737, 5849, 5961, 6073, 6185, 6297, 6410,
6522, 6650, 6778, 6906, 7034, 7162, 7290, 7435,
7579, 7723, 7867, 8011, 8155, 8315, 8475, 8635,
8795, 8956, 9132, 9308, 9484, 9660, 9836, 10028,
10220, 10412, 10604, 10812, 11020, 11228, 11437, 11661,
11885, 12109, 12333, 12573, 12813, 13053, 13309, 13565,
13821, 14093, 14365, 14637, 14925, 15213, 15502, 15806,
16110, 16414, 16734, 17054, 17390, 17726, 18062, 18414,
18766, 19134, 19502, 19886, 20270, 20670, 21070, 21486,
21902, 22334, 22766, 23214, 23662, 24126, 24590, 25070,
25551, 26047, 26559, 27071, 27599, 28143, 28687, 29247
}
}
static const int qp_to_qindex[] = { // 索引号
0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48,
52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100,
104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152,
156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204,
208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 249, 255,
};
例如,量化一个像素的计算为: \[ Q_{\text{Coefficient}} = \frac{T_{\text{Coefficient}}}{Q_{\text{Step}}} \] 硬件编解码器不擅长除法,所以添加一道 16 次幂的乘法,以及二进制下右移 16 位两个步骤: \[ Q_{\text{Coefficient}} = \left( \frac{T_{\text{Coefficient}}}{ Q_{\text{Step}} } \cdot 2^{16} \right) >> 16 \] 然后将除法部分“预渲染”为缩放值: \[ A = \frac{2^{16}}{ Q_{\text{Step}} } = Q_{\text{Lookup}\left[m\right]\left[n\right]} \] 从而简化量化计算为: \[ Q_{\text{Coefficient}} = \left( A \cdot T_{\text{Coefficient}} \right) >> 16 \] 而上述 QStep 为完整 QLookup 表(1~255)中,索引号所指的值。定位索引号后,从 QLookup 中选出量化步长 QStep。见:Wikidocs - AV1 Quantization
0~2 为低级,3~14 为中级,15 及以上为高级。低中级的平面的熵编码按倒序扫描顺序编码,高级平面按顺序扫描顺序编码。熵编码时与 x265 一样使用零阶指数哥伦布编码(见 x265 教程)转换到二进制。
// 参数:分瓣级别(可选),分瓣 ID,基础量化强度索引号(见上表)
int av1_get_qindex(const struct segmentation *seg, int segment_id, int base_qindex) {
if (segfeature_active(seg, segment_id, SEG_LVL_ALT_Q)) { // 分瓣模式开
const int data = get_segdata(seg, segment_id, SEG_LVL_ALT_Q); // 分瓣中的量化值偏移设定
const int seg_qindex = seg->abs_delta == SEGMENT_ABSDATA ? data : base_qindex + data; // 直接使用绝对值或计算偏移结果
return clamp(seg_qindex, 0, MAXQ); // 限制偏移强度到合理范围并返回
}
else { return base_qindex; } // 无偏移
}
调制算法基于时域依赖性模型 TPL。TPL 中,参数 beta 代表当前 SB 的传播参数 Propagation factor(beta 值越高则 SB 被参考的时域被依赖性更强,应该降低 QP)。决定最终 QP 的算法为:
处理帧内编码帧、或 \( \text{beta} < 1 \) 时:
\[ \text{QP}'= \frac{\text{QP}}{\sqrt{\text{beta}}} \]否则:
\[ \text{QP}'= \frac{\text{QP}}{\sqrt{\sqrt{\text{beta}}}} \]基本原理已在 x264 教程中说明,此处不再赘述。AV1 的 VAQ 主要作用于每帧的 8 个分瓣 segments 中,其次是每个细分块中,以量化偏移值表示。在找全一定数量的粗分块后,编码参数(量化强度、环路滤镜强度、被参考帧索引号、跳过残差开关)相似,见 SVT-AV1 Readme
一种外观类似于条形图的数据分类图表。
整帧的方差 \(\sigma\) 由 8x8 块为基本单位得到:
\[ \sigma_i = \frac{1}{64} \sum_{j=0}^{63} \sigma_{ij} \hspace{4mm} \text{for} \hspace{2mm} i=1 \cdots K \]其中 \(\sigma_{ij}\) 代表 SB 范围内某个 8x8 分块的方差(共 64 个),\(K\) 代表当前帧的所有特大块 SB。以此类推得到所有帧内 SB 的方差。
这些方差中可以推导出的对数最大值 \(\sigma_{\text{max}}\),最小值 \(\sigma_{\text{min}}\) 和平均值 \(\sigma_{\text{avg}}\)。这些值会被用来计算方差直方图。直方图的箱宽取决于分瓣数量以及全图对比度的最大差异:
\[ w = \frac{\sigma_{max}-\sigma_{min}}{N_{\text{segments}}} \]\(N\) 代表分瓣的数量和当前序号。
箱边缘取决于分瓣数量与箱宽,此处额外有最小差异的微调:
\[ e_i = \sigma_{min} + i \cdot w \hspace{4mm} \text{for} \hspace{2mm} i = 1 \cdots N_{\text{segments}} \]得到生成直方图的关键参数后,每个分瓣的量化值偏移就可以归纳为每个直方柱箱的高度,以及在此基础上的一些微调了:
\[ \Delta q_{i + 1}=\frac{(e_i + e_{i + 1})}{2} - \sigma_{avg} \hspace{4mm} \text{for} \hspace{2mm} i = 0 \cdots N-1 \]一种调整方差计算结果强度的方法,称为 Variance boost(VB)。下例为 2 个大小相似的岩石纹理图。纹理逐渐淡化为纯白色、米色和黑色。从中出现了模糊、高频细节丢失、以及显露的变换块基础图案。算法部分详见:SVT-AV1 Docs:
图 1:关 VB、QP 50 时得到 22,848 字节的帧
图 2:开 VB、QP 53 时得到 22,352 字节的帧
尽管图 1 左侧画质很高,但随着颜色朝右减淡,QP 50 的例子中出现了越来越多的失真。而尽管 QP 53 开启 VB 例子中,图像左侧的失真略高,但随着颜色朝右减淡,可以看到细节保留的效果变得远好于 QP 50,这是由于 QP 50 图像中能量分布的不均匀所致。
注:图片为了适配网页浏览而被转换为 PNG,与原本的 AVIF 格式略有区别。
图 1:VB 强度 1、QP 55 时得到 14,767 字节的帧
图 2:VB 强度 2、QP 55 时得到 16,403 字节的帧
图 3:VB 强度 3、QP 55 时得到 16,826 字节的帧
图 4:VB 强度 4、QP 55 时得到 16,21,351 字节的帧
基本原理已在 x265 教程中说明,此处不再赘述。AV1 的熵编码使用了两种算法:CABAC 用于量化后的数据,另一种客制化的整数算数编码用于语法元素。
AV1 中,代表不同范围的系子(量化结果)幅度:0~2 为低,3~14 为中,15 及以上为高。低中级平面的熵编码按倒序扫描顺序编码,高级平面按顺序扫描顺序编码。熵编码时与 x265 一样使用零阶指数哥伦布编码(见 x265 教程)转换到二进制。
开区间由 (a,b) 表示,闭区间由 [a,b] 表示。开区间的 a 与 b 是边界,只能从两者之间取值;闭区间的 a 与 b 是边界,也是可取的值:
注意本节的计算主要用于展示过程,所以计算和图像准确度会与实际情况有误差。本计算过程假设有以下出字概率:
写作:
则 CABAC 编码 \( \left[1, 0, 1, 1, 0\right] \) 的过程如下:
编码数据“语境”下的数据结构和组织办法;符号 symbol 代表特定的某个数据或指令,是组成语法元素的基本结构之一,如 AVC、HEVC 的 I,P,B 块标识。
与 AVC、HEVC 中将语法元素转换为二进制,再使用 CAVLC、CABAC 的过程不同,AV1 虽然同样使用了算术编码,但其熵编码不含二进制转换,所以需要统计每种符号的概率值。
在统计学中代表二维坐标轴中,从起始处累积到某点 X 左侧的直线或曲线 \(F\left(x\right)\) 下方阴影的面积,该面积可以表示累计概率(Accumulated probability)。由于概率的最大值为 1,所以假设曲线下的最大阴影面积为 1,定义为: \[ F_X \left(x\right) = P\left( X \leq x \right) \] 其中 X 代表给定的某个 x 轴点。
图片来自:deepai.org
一组给定范围(\(\in\))内,有限个不重复的数。例如抛 N 次硬币,正面朝上的次数只可能会是整数 0..N,记做 \(k \in \{0, 1, \ldots, N\}\),k 代表某场执行“抛硬币 N 次”活动后,硬币正面朝上的次数,这个次数一定会在 0~N 的范围内。
相对地,如果掷标准 6 面骰子 1 次,则记做 \(k \in \{1, 2, \ldots, 6\}\)。这里面既无 0,又无 N。
样本空间 Sample space:代表“一组给定范围”的空间,此处表示为 \(\{ \ldots \}\)
由于离散随机变量中不会有样本空间中“不存在”的值,且因给定事件的概率可测量,所以样本空间中,每个值的出现概率可以被归纳总结为函数——PMF: \[ p(x_i) = P(X=x_i) = P(\underbrace{\{k \in K\ |\ X(k) = x_i\}}_{\text{set of outcomes resulting in}\ X=x_i}) \] 如样本空间中给 3 种不同概率的结果(30%,50%,20%,\(k \in \{x_1,x_2,x_3\}\)): \[ P(X=x_1) = 0.3 \text{,} \hspace{4mm} P(X=x_2) = 0.5 \text{,} \hspace{4mm} P(X=x_3) = 0.2\] 此处的大写 X 代表样本空间的函数,而 X 的 PMF 则必须满足总概率等于 1,以及每个 PMF 的概率都大于等于 0,共 2 件条件: \[ \displaystyle{\sum_{x_i} p(x_i)} = p(x_1) + p(x_2) + \ldots = 1 \] \[ p(x_i) \geq 0 \]
简单地说,CDF 同样是定义为一组样本空间中的值,但两者有别。使用随机变量的 CDF 定义为包括全部实数,也就是说“掷标准 6 面骰子”的例子中,两者的统计方法不一样,后者的 CDF 呈累计状,能够更好的显示概率的分布状况,以及每个离散随机变量 X 在其中到底“贡献”了多少: \[ p_X(x) = \begin{cases} \frac{1}{6}, & x \in \{1, 2, 3, 4, 5, 6\} \\ 0, & \text{otherwise} \end{cases} \]\[ \bar{P}_n = \left[ p_1\left(n\right), p_2\left(n\right), \ldots, p_M\left(n\right) \right] \]\[ c_X(x) = F_X(x) = \begin{cases} 0, & x < 1 \\ \frac{1}{6}, & 1 \leq x < 2 \\ \frac{2}{6}, & 2 \leq x < 3 \\ \frac{3}{6}, & 3 \leq x < 4 \\ \frac{4}{6}, & 4 \leq x < 5 \\ \frac{5}{6}, & 5 \leq x < 6 \\ 1, & x \geq 6 \end{cases} \]\[ \bar{C}_n = \left[ c_1\left(n\right), c_2\left(n\right), \ldots, c_M-1\left(n\right), 1 \right] \] 在两个离散随机变量值(k 或 X)之间时,CDF 值不变;而一旦越过边界,则 \(c_X(x)\)(CDF 值)起跳一个 \(p_X(x)\)(PMF 值)的高度。可以理解为将一堆离散概率值按顺序扎进了二维坐标系中。
图:“CDF 值起跳高度”就是每个 \(p_X(x)\) 的概率,所以。见:Saint Mary's College - MATH345
这种“累积”的性质可以用求和/循环表示。样本空间中,越靠后的 CDF 值所累积的高度越高,为: \[ c_k\left(n\right) = \sum_{i=1}^k p_{i}\left(n\right) \]
计算 CDF 时还可能会遇到“仅取一部分 PMF 函数”的甲方要求,此时需要在坐标系中标定 k 或 X,代表选取样本空间中的某个离散随机变量,然后从这里求上述的“点 X 左侧阴影面积”。
图:对等大小(Uniform)PMF \(F\left(x\right)\) 下取 CDF \(P\left( X \leq x \right)\) 见:MIT 公开课图中计算与本文关系不大,可以忽略
注意本节的计算主要用于展示过程,所以计算和图像准确度会与实际情况有误差,以及大量演算中可能会出现错误。在观看本节前,建议补习 x265 教程——熵编码中的算数编码和 PPM 推演部分。
10 种模式,将这些模式按照 AV1 的编码概率排序(见:AV1 Spec)为:
PARTITION_NONE
PARTITION_HORZ
PARTITION_VERT
PARTITION_SPLIT
PARTITION_HORZ_A
PARTITION_HORZ_B
PARTITION_VERT_A
PARTITION_VERT_B
PARTITION_HORZ_4
PARTITION_VERT_4
对比 64x64 块的上下文出字概率结果,以及实际用于计算的整数表:
/**
* { 换算为 0~1 范围:
* { 0.615, 0.657, 0.704, 0.902, 0.910, 0.923, 0.931, 0.942, 0.968, 1, 0 }, Row 0:初始状态,无 ctx
* { 0.205, 0.229, 0.290, 0.853, 0.862, 0.870, 0.884, 0.904, 0.919, 1, 0 }, Row 1
* { 0.181, 0.234, 0.255, 0.875, 0.889, 0.908, 0.917, 0.925, 0.984, 1, 0 }, Row 2
* { 0.027, 0.037, 0.045, 0.952, 0.958, 0.964, 0.969, 0.973, 0.987, 1, 0 } Row 3:正常状态,3 ctx
* } Col 0 1 2 3 4 5 6 7 8 9 10
*/
Default_Partition_W64_Cdf[ PARTITION_CONTEXTS ][ 11 ] = {
{ 20137, 21547, 23078, 29566, 29837, 30261, 30524, 30892, 31724, 32768, 0 },
{ 6732, 7490, 9497, 27944, 28250, 28515, 28969, 29630, 30104, 32768, 0 },
{ 5945, 7663, 8348, 28683, 29117, 29749, 30064, 30298, 32238, 32768, 0 },
{ 870, 1212, 1487, 31198, 31394, 31574, 31743, 31881, 32332, 32768, 0 }
}
可以看到上下文长 3 时,PARTITION_NONE
、PARTITION_HORZ
、PARTITION_VERT
的出字概率变得很小,也就是说在编码了 3 个 64x64 块后,接下来的块有了足够多的信息,所以选择这些模式的概率也会变小。熵编码出字概率 0~1 区间的范围越小,用于表示这段区间的小数数位越长,因此降低不常用模式的出字概率(占据位宽),就可以提高其他模式可用的宽度,以减少小数数位,而提高压缩率。
假设编码某帧中的第一个 64x64 SB。其左侧和顶部区域不存在(ctx 为 0,对应上述第一行)。假设其分块模式决定使用 PARTITION_NONE
,则选择第一行,第一列的 20137(0.615)区间,并更新一遍 CTX。下一个分块会使用第二行的出字概率
预设 0~1 区间(0~32768)的 0.615 倍为,20137,这个数小于 32768,因此需要循环归一化/基本单位化(乘以 2),放大到 40274。
图:出字概率被缩减到小于 32768(100%)时,循环地放大下限和上限 2 倍;若新范围的下限高于 32768,则为下限和上限循环地减 32768
1b0
判断该分块是否需要执行残差编码,早在变换块中判断,并发送 all_zero
旗标到此处。由于第一个分块并没有预测模式可用,所以残差计算不会进行,得到“跳过 Skip 模式”;因此,选择下表中第 2 列的 32768,也就是 PDF 的 1097(0.031)。
/**
* 换算为 0~1 范围
*{
* { 0.969, 1, 0 }, Row 0,无上下文
* { 0.504, 1, 0 }, Row 1
* { 0.140, 1, 0 } Row 2,满上下文
* } Col 0, 1, 2
*/
Default_Skip_Cdf[ SKIP_CONTEXTS ][ 3 ] = {
{ 31671, 32768, 0 },
{ 16515, 32768, 0 },
{ 4576, 32768, 0 }
}
当前块的上下文长 0。假设此时选择跳过残差编码,则在上表中对应行 1 列 2(32768)。根据 CDF 的性质,这个出字概率是 \(32768-31671=1097 \hspace{2mm} \left(0.033\right)\),且这个新区间位于最后方,即 0~1 出字概率区间的顶部。
<<2
或 \(\times 2\) 缩放后得到了上限减下限大于等于 32768 的概率区间1b1
15b000_1110_0100_0000
5b00011
6b1_00011
此处假设选择帧内编码,不使用帧内块复制 IBC 模式。第一个分块并没有左上或顶部参考块可用(有的话优先选用左上、右上,其次左下、右下块的模式,见 av1_left_block_mode
)。帧间模式按照 AV1 标准排序 Intra_Frame_Y_Mode
(见:AV1 Spec),Intra_Mode_Context
(见 AV1 Spec)得到:
Enum | YMode | CDF[aisle][row] |
---|---|---|
0 | DC_PRED |
0 |
1 | V_PRED |
1 |
2 | H_PRED |
2 |
3 | D45_PRED |
3 |
4 | D135_PRED |
4 |
5 | D113_PRED |
4 |
6 | D157_PRED |
4 |
7 | D203_PRED |
4 |
8 | D67_PRED |
3 |
9 | SMOOTH_PRED |
0 |
10 | SMOOTH_V_PRED |
1 |
11 | SMOOTH_H_PRED |
2 |
12 | PAETH_PRED |
0 |
以及上下文配置:
/**
* 第 1 排换算为 0~1 范围:
* 0.476, 0.520, 0.590, 0.617, 0.631, 0.644, 0.666, 0.709, 0.738, 0.860, 0.888, 0.930, 1, 0 顶块 DC/SMOOTH/PAETH,左块 DC/SMOOTH/PAETH
* 0.367, 0.551, 0.596, 0.620, 0.632, 0.654, 0.668, 0.703, 0.746, 0.875, 0.921, 0.959, 1, 0 顶块 DC/SMOOTH/PAETH,左块 V/SMOOTH_V
* 0.307, 0.329, 0.680, 0.695, 0.704, 0.709, 0.736, 0.782, 0.798, 0.895, 0.913, 0.963, 1, 0 顶块 DC/SMOOTH/PAETH,左块 H/SMOOTH_H
* 0.430, 0.470, 0.502, 0.574, 0.584, 0.596, 0.610, 0.674, 0.755, 0.903, 0.945, 0.991, 1, 0 顶块 DC/SMOOTH/PAETH,左块 D45/D67
* 0.370, 0.405, 0.476, 0.504, 0.568, 0.611, 0.683, 0.781, 0.807, 0.923, 0.948, 0.991, 1, 0 顶块 DC/SMOOTH/PAETH,左块 D135/D113/D157/D203
*
* 第 2 排换算为 0~1 范围:
* 0.306, 0.598, 0.636, 0.654, 0.666, 0.695, 0.705, 0.733, 0.775, 0.885, 0.930, 0.959, 1, 0 顶块 V/SMOOTH_V,左块 DC/SMOOTH/PAETH
* 0.183, 0.735, 0.750, 0.759, 0.765, 0.787, 0.791, 0.806, 0.843, 0.913, 0.954, 0.970, 1, 0 顶块 V/SMOOTH_V,左块 V/SMOOTH_V
* 0.227, 0.390, 0.616, 0.633, 0.643, 0.659, 0.677, 0.714, 0.747, 0.852, 0.888, 0.931, 1, 0 顶块 V/SMOOTH_V,左块 H/SMOOTH_H
* 0.261, 0.448, 0.471, 0.521, 0.531, 0.555, 0.562, 0.605, 0.752, 0.890, 0.949, 0.983, 1, 0 顶块 V/SMOOTH_V,左块 D45/D67
* 0.230, 0.434, 0.473, 0.494, 0.546, 0.632, 0.671, 0.748, 0.793, 0.906, 0.945, 0.976, 1, 0 顶块 V/SMOOTH_V,左块 D135/D113/D157/D203
*
* INTRA_MODES 即 YMode。INTRA_MODE_CONTEXTS 代表左侧与顶部参考源序列的和。AOM-AV1 中缩写为 kf_y_cdf
*/
Default_Intra_Frame_Y_Mode_Cdf[ INTRA_MODE_CONTEXTS ][ INTRA_MODE_CONTEXTS ][ INTRA_MODES+1 ] = { // [5][5][13+1]
{ // Aisle 0
{ 15588, 17027, 19338, 20218, 20682, 21110, 21825, 23244, 24189, 28165, 29093, 30466, 32768, 0 }, // Row 0
{ 12016, 18066, 19516, 20303, 20719, 21444, 21888, 23032, 24434, 28658, 30172, 31409, 32768, 0 },
{ 10052, 10771, 22296, 22788, 23055, 23239, 24133, 25620, 26160, 29336, 29929, 31567, 32768, 0 },
{ 14091, 15406, 16442, 18808, 19136, 19546, 19998, 22096, 24746, 29585, 30958, 32462, 32768, 0 },
{ 12122, 13265, 15603, 16501, 18609, 20033, 22391, 25583, 26437, 30261, 31073, 32475, 32768, 0 }
}, // Col 0, 1, ...
{ // Aisle 1
{ 10023, 19585, 20848, 21440, 21832, 22760, 23089, 24023, 25381, 29014, 30482, 31436, 32768, 0 },
{ 5983, 24099, 24560, 24886, 25066, 25795, 25913, 26423, 27610, 29905, 31276, 31794, 32768, 0 },
{ 7444, 12781, 20177, 20728, 21077, 21607, 22170, 23405, 24469, 27915, 29090, 30492, 32768, 0 },
{ 8537, 14689, 15432, 17087, 17408, 18172, 18408, 19825, 24649, 29153, 31096, 32210, 32768, 0 },
{ 7543, 14231, 15496, 16195, 17905, 20717, 21984, 24516, 26001, 29675, 30981, 31994, 32768, 0 }
},
// ... 此处省略 3 排 ...
}
在没有可用块时,av1_left_block_mode
,av1_top_block_mode
会返回 DC_MODE
,映射到上述上下文表中排 aisle、行 row、列 column 的 [0][0][0],即 0.476。
15b001_1100_1000_0000
1b0
7b1_00011_0
假设同位色度块大小为 64x64。除个别特殊预测模式外,色度与亮度平面支持的预测模式功能(除特殊模式外)没有差异。色度预测的上下文(CDF 值)选取由下表决定(见 AV1 Spec):
/**
* 非色度填亮度模式(Non-CFL)所用的表格,使用 CFL 则更换为 Default_Uv_Mode_Cfl_Allowed_Cdf
* 0.691, 0.737, 0.774, 0.783, 0.793, 0.809, 0.826, 0.852, 0.862, 0.917, 0.944, 0.975, 1, 0 Y-DC
* 0.290, 0.820, 0.823, 0.825, 0.828, 0.844, 0.847, 0.849, 0.865, 0.900, 0.909, 0.970, 1, 0 Y-V
* 0.300, 0.303, 0.875, 0.876, 0.878, 0.878, 0.891, 0.910, 0.911, 0.939, 0.970, 0.977, 1, 0 Y-H
* 0.416, 0.424, 0.432, 0.773, 0.781, 0.785, 0.792, 0.828, 0.872, 0.934, 0.957, 0.992, 1, 0 Y-D45
* 0.298, 0.300, 0.303, 0.304, 0.775, 0.826, 0.853, 0.859, 0.862, 0.949, 0.969, 0.988, 1, 0 Y-D135
* 0.361, 0.415, 0.417, 0.419, 0.459, 0.892, 0.894, 0.899, 0.907, 0.951, 0.960, 0.993, 1, 0 ...
* 0.433, 0.439, 0.507, 0.513, 0.541, 0.542, 0.871, 0.922, 0.923, 0.972, 0.987, 0.997, 1, 0
* 0.393, 0.398, 0.457, 0.476, 0.478, 0.481, 0.494, 0.889, 0.893, 0.935, 0.975, 0.991, 1, 0
* 0.367, 0.417, 0.423, 0.467, 0.473, 0.480, 0.488, 0.497, 0.868, 0.927, 0.939, 0.989, 1, 0
* 0.581, 0.605, 0.628, 0.638, 0.645, 0.655, 0.668, 0.693, 0.707, 0.881, 0.927, 0.982, 1, 0
* 0.568, 0.600, 0.640, 0.648, 0.656, 0.666, 0.677, 0.706, 0.718, 0.826, 0.958, 0.981, 1, 0
* 0.520, 0.580, 0.610, 0.621, 0.628, 0.644, 0.652, 0.669, 0.686, 0.790, 0.810, 0.971, 1, 0
* 0.370, 0.420, 0.457, 0.458, 0.458, 0.459, 0.460, 0.463, 0.466, 0.481, 0.489, 0.507, 1, 0
* UV-DC UV-V UV-H UV-D45 UV-D135 ...
*/
Default_Uv_Mode_Cfl_Not_Allowed_Cdf[ INTRA_MODES ][ UV_INTRA_MODES_CFL_NOT_ALLOWED+1 ] = { // [13][13+1]
{ 22631, 24152, 25378, 25661, 25986, 26520, 27055, 27923, 28244, 30059, 30941, 31961, 32768, 0 },
{ 9513, 26881, 26973, 27046, 27118, 27664, 27739, 27824, 28359, 29505, 29800, 31796, 32768, 0 },
{ 9845, 9915, 28663, 28704, 28757, 28780, 29198, 29822, 29854, 30764, 31777, 32029, 32768, 0 },
{ 13639, 13897, 14171, 25331, 25606, 25727, 25953, 27148, 28577, 30612, 31355, 32493, 32768, 0 },
{ 9764, 9835, 9930, 9954, 25386, 27053, 27958, 28148, 28243, 31101, 31744, 32363, 32768, 0 },
{ 11825, 13589, 13677, 13720, 15048, 29213, 29301, 29458, 29711, 31161, 31441, 32550, 32768, 0 },
{ 14175, 14399, 16608, 16821, 17718, 17775, 28551, 30200, 30245, 31837, 32342, 32667, 32768, 0 },
{ 12885, 13038, 14978, 15590, 15673, 15748, 16176, 29128, 29267, 30643, 31961, 32461, 32768, 0 },
{ 12026, 13661, 13874, 15305, 15490, 15726, 15995, 16273, 28443, 30388, 30767, 32416, 32768, 0 },
{ 19052, 19840, 20579, 20916, 21150, 21467, 21885, 22719, 23174, 28861, 30379, 32175, 32768, 0 },
{ 18627, 19649, 20974, 21219, 21492, 21816, 22199, 23119, 23527, 27053, 31397, 32148, 32768, 0 },
{ 17026, 19004, 19997, 20339, 20586, 21103, 21349, 21907, 22482, 25896, 26541, 31819, 32768, 0 },
{ 12124, 13759, 14959, 14992, 15007, 15051, 15078, 15166, 15255, 15753, 16039, 16606, 32768, 0 }
}
同为帧内编码的第一个分块,因此这里编码的色度块仍然使用 [0][0] 处的出字概率 0.691。
15b011_1001_0000_0000
1b0
8b1_00011_0_0
变换块有 3 种分块深度,对应概率表:
/**
* 0.176, 0.350, 1, 0
* 0.176, 0.350, 1, 0
* 0.513, 0.695, 1, 0
* 深 0, 1, 2
*/
Default_Tx_64x64_Cdf[ TX_SIZE_CONTEXTS ][ MAX_TX_DEPTH + 2 ] = {
{ 5782, 11475, 32768, 0 },
{ 5782, 11475, 32768, 0 },
{ 16803, 22759, 32768, 0 }
}
假设当前块的变换块分块深度为 0(整块变换),同时上下文长 0,所以使用 [0][0],即 0.176。
15b110_0100_0000_0000
,析出 2b11
10b1_00011_0_0_11
以上简化编码步骤中省略的模式包括时域降噪过滤、混合参考帧类型、动态向量类型等等,但已经足够演示计算过程了。64x64 编码结束时执行两项操作:
上述的最后一个下限为 25600,大于 16384。因此需要加 1,得到 10b1000110100
;最后补零对齐到 16bit,为 16b1000_1101_0000_0000
,在 16 进制上为 2x8D00
或 8D 00
。
基本原理已在 x265 教程中说明,此处不再赘述。AV1 中使用了缩放到整数的值完成计算,但率失真曲线并无变化。率失真代价函数为:
\[J = D + \lambda \cdot R\]由于 AV1 的量化与反量化主要是通过“查表”得到计算参数,所以并不像 AVC、HEVC 一样有 \(Q_{\text{scale}}\) 缩放值,而是完全取代为 \(Q_{\text{index}}\) 的 Dc_Qlookup
、Ac_Qlookup
表格索引号(即 x264、x265 的 \(Q_{\text{step}}\)),但幸好原理还是一样的。
libaom 中,计算 \( \lambda \) 默认值的函数由: \[ \lambda = 0.85 \times Q_\text{step}^{2} \] 转变为: \[ \lambda = 88 \cdot \frac{Q_\text{step}^{2}}{24} \] 基本上分为以下几个步骤得到:
int av1_compute_rd_mult_based_on_qindex(const AV1_COMP *cpi, int qindex) {
// 获取当前量化步长索引
const int q = av1_dc_quant_QTX(qindex, 0, cpi->common.seq_params.bit_depth);
// 算出率失真斜度
int rdmult = (int)(((int64_t) 88 * q * q) / 24);
// 根据位深缩放率失真斜度
switch (cpi->common.seq_params.bit_depth) {
case AOM_BITS_8:
break;
case AOM_BITS_10:
rdmult = ROUND_POWER_OF_TWO(rdmult, 4); break;
case AOM_BITS_12:
rdmult = ROUND_POWER_OF_TWO(rdmult, 8); break;
default:
assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
return -1;
}
// 限制最小率失真斜度并返回
return rdmult > 0 ? rdmult : 1;
}
调制算法基于时域依赖性模型 TPL,斜度 Lambda 被重命名为率失真缩放值(RD-Multiplier,rdmult),核心思想为根据 TPL 信息(依赖大小)缩放每个块的相对权重,辅以新旧两个率失真斜度的差距的阻尼:
\[ \text{TPL}_{\text{Superblock_rdmult_scale_factors}} = \frac{\text{rdmult}_\text{new}}{\text{rdmult}_{\text{old}}} \cdot \frac{\text{TPL}_{\text{rdmult_scale_factors}}}{\text{Geometric_Mean}_{\text{TPL_rdmult_scale_factors}}} \]接下来根据 SB 内的块大小分为两类,其中大于等于 16x16 的块需要统计几何平均:
\[ \text{Geometric_Mean}_\text{scaled} = \sqrt[N]{\prod_{i=1}^{N} \text{TPL}[i]_\text{Superblock_rdmult_scale_factors}} \]最后得到精确到细分块的率失真斜度。见 SVT-AV1 Docs:
\[ \text{Lambda}_{\text{new}} = \text{Lambda}_{\text{CurrentFrame}} \times \text{Geometric_Mean}_\text{scaled} + 0.5 \]相比于 x264/5 的实现,AV1 中的环路滤镜实现了在编码步骤(分块、变换、量化)之前的滤镜应用、继承 VP9 参与压缩的滤镜、以及根据内容自动调节强度的滤镜。
位于所有编码步骤之前,通过自动回归分析模型 Autoregressive model 对原视频流中过滤出的噪声建模,最后于解码端复现的滤镜链;而只编码剥离出噪声的视频流。这种处理利用了通过算法生成噪声几乎不占用算力,而噪声的结构变化/失真(相对于画面内容失真)不受人眼视觉系统 Human visual system(HVS)重视的特性,提高了有损压缩上限。
胶片颗粒编码滤镜会首先生成 1 份 64×64 亮度和 2 份 32×32 色度噪声模板。在合成过程中,从这些模板中以伪随机位置获取 32×32 亮度和 16×16 色度的噪声块,并将其添加到重建平面中。AV1 会将噪声块重叠摆放,以减少分块边界处的潜在细线失真。
位于所有编码步骤之前,胶片颗粒编码滤镜之后,用于实现类似于 AVC、HEVC 的 VBV 码率峰值限制。AV1 标准支持先降低分辨率再编码,最后输出为实际分辨率更低,但在解码端通过缩放滤镜恢复的重建帧。(猜测:对画面细节的影响类似于设置 AVC、HEVC 中的死区量化器)。
SVT-AV1 中定义为 0.89~0.5 倍,即 \( \frac{8}{9} \curvearrowright \frac{8}{16} \)。分为降低视频帧的采样,以及二阶段的去块与 CDEF(共 3 步)。解码端通过空域参考缩放滤镜恢复原始大小。见SVT-AV1 Docs。
图:参考缩放环路
取决于用户决定的 3 种模式:
与参考缩放环路类似,区别在于在编码后环路还原滤镜,区别在于超采样滤镜会在 CDEF 滤镜之后线性放大视频帧到原始分辨率,然后再运行环路还原滤镜(因此解码器也会在拿到视频流后先放大,再应用配置给完整分辨率的环路还原滤镜),相比参考缩放环路,超分辨率环路能够恢复更多高频信息。见 SVT-AV1 Docs。
图:超分辨率环路
取决于用户决定的 6 种模式:
ALTREF
ALTREF
一种低通滤镜,基本原理已在 x265 教程中说明,此处不再赘述。AV1 中根据变换块的大小不同,亮度块支持 4-tap、8-tap 和 14-tap 低通,色度块支持 4-tap 和 6-tap 插值。14-tap 插值需要变换块的宽和高都超过 16。
一种结合了 Mozilla Daala 编解码器的定向去振铃滤镜(Directional de-ringing filter)与 Cisco Thor 编解码器的定向低通滤镜(Constrained low pass filter),在去块滤镜之后应用的 8x8 块去振铃算法,见 SVT-AV1 Readme 。CDEF 主要由两个步骤组成:
检查当前块属于 8 种夹角图案中的哪一种。简单地说就是通过当前块与各个夹角图案中同位像素的值取平均,选其中差距最少的一个。
选择好夹角后,对判定为边缘纹理的临像素取值,进行类似子像素动态补偿的自适应 FIR 插值,分为两阶段:
两个阶段的强化计算都使用该式给出,输入待处理像素 \( p\left(i,j\right) \):
\[ P\left(i,j\right)= p\left(i,j\right) + \sum_{m,n} w_{m,n} f\left(p\left(m,n\right)-p\left(i,j\right),S_{\text{Strength}},D_{\text{Damp}}\right) \]当 \( p\left(m,n\right)-p\left(i,j\right) \) 的值偏小时,\( f\left(\ldots,S,D\right) = p\left(m,n\right)-p\left(i,j\right)\),代表当前状态下的滤镜运行类似于 FIR 插值;反过来当 \( p\left(m,n\right)-p\left(i,j\right) \) 的值偏大时,\( f\left(\ldots,S,D\right) = 0 \),代表当前状态下滤镜无效。
图:初阶段的插值取值和权重分配,权重取决于强度为奇数/偶数判断
图:二阶段的插值取值和权重分配,权重固定。可以看到这种 FIR 类似于 SAO 滤镜
在去块滤镜和 CDEF 之后,尝试还原已劣化采样(Degraded sample)的算法。噪声与失真的位置和程度在此变得不确定,所以常规的 FIR 滤镜会失效(滤镜强度与实际不符,反而产生新的失真,如 x265 中的 SAO)。
还原滤镜定义了还原单元(Restortion unit,RU)的滤镜强度范围,在每个 64×64,128×128 和/或 256×256 RU 中分别设定滤镜类型和滤镜强度,分为:
滤镜强度取决于每个 RU 分别建立的 LMS 的自适应模型,由找到模型的最低点定义。
在先前讨论的最小二乘法中,“最小化”这个概念来自于“解”的不存在或不成立。既知无解,数据分析的目标就会变为“尽可能合理”,即最小化。
LMS / \( \text{min}\left(\sigma^2\right) \) 是一种快速的贪心算法。其原理由通过迭代概率模型中的参数,从而逐步减小预测误差的均方值。效率高,而且易于实现,因此在实际应用中得到了广泛的应用。
一套自适应算法由 \( x_k \),\( y_k \) 两种输入信号构成:
\[ \hat{s}_k = y_k-\hat{n}_k = s_k+\left(n_k-\hat{n}_k\right) \]将上式取平方并展开后得到:
\[ \hat{s}_k^2 = s_k^2 + \left( n_k-\hat{n}_k \right)^2 + 2s_k\left( n_k-\hat{n}_k \right) \]套入平均值(即强度)函数 E 后得到均方值;\( \mathbb{E}\left(\left( n_k-\hat{n}_k \right)^2\right) \) 代表残余噪声的强度:
\[ \mathbb{E}\left( \hat{s}_k^2 \right) = \mathbb{E}\left( s_k^2 \right) + \mathbb{E}\left(\left( n_k-\hat{n}_k \right)^2\right) + 2\mathbb{E}\left( s_k \left( n_k-\hat{n}_k \right)\right) \]取期望——由于预测的信号 \( \hat{s}_k^2 \) 与噪声并无相关性(correlation),所以噪声交叉项等于零。剩下残余噪声交叉项:
\[ \mathbb{E}\left( \hat{s}_k^2 \right) = \mathbb{E}\left( s_k^2 \right) + \mathbb{E}\left(\left( n_k-\hat{n}_k \right)^2\right) \]重新排列后,得到的关系如下,即“预测信号的能量越小,则噪声残差强度越小,则信噪比越高”:
\[ \mathbb{E}\left( s_k^2 \right) = \mathbb{E}\left( \hat{s}_k^2 \right) - \mathbb{E}\left(\left( n_k-\hat{n}_k \right)^2\right) \]虽然上式非常难以理解,但现实中是有例可举的。如打靶所瞄准的目标大小和距离 \( \mathbb{E}\left( s_k^2 \right) \) 不变,只是将靶心 \( \mathbb{E}\left( \hat{s}_k^2 \right) \) 画的更小(\( \mathbb{E}\left( \hat{s}_k^2 \right) \) 趋近于 0),就导致了射击 \(\mathbb{E}\left(\left( n_k-\hat{n}_k \right)^2\right) \) 散布/噪声越小。
图:ASMS。见 Shashikant Sethy
同样地,噪声残余、弹道散布虽然被尽可能地缩小,但仍然会存在;对应了查找的是最小值,而非确切解(least but not exact)的道理。相对于率失真优化,这相当于“对率失真优化的优化”。
一种减少传输参数数量,并预制了强度配置的极简版维纳滤镜,起到自适应反失真的作用。其特点是利用 LMS 的制导,分别对横向和纵向卷积强度进行选择,并拼装出卷积内核,然后对扫描区域进行卷积计算。AV1 中,该卷积内核的动态更新(被精简)为每切换一个扫描区域 Restoration Unit(RU),就换一种预设好的横向,纵向强度。RU 支持 64x64~256x256 的范围。
亮度平面使用 7、5 或 3-tap,色度平面使用 5 或 3-tap 的横向和纵向反失真滤镜组。一项 3x3 的卷积内核可为:
\[ h = \begin{bmatrix} h_{-1,-1} & h_{-1,0} & h_{-1,1} \\ h_{0,-1} & h_{0,0} & h_{0,1} \\ h_{1,-1} & h_{1,0} & h_{1,1} \end{bmatrix} \]将原画块、压缩失真块、和重建目标块分别设为 \( B_0, B_1, B_2 \),则滤镜前后结果为(* 符表示卷积计算):
\[ B_2 = h * B_1 \]则重建块与原画误差越小越好(在此基础上推导 LMS):
\[ \text{MSE} = \frac{1}{N} \sum_{i,j} \left(B_0\left(i,j\right) - B_2\left(i,j\right)\right)^2 \]为了降低计算空域复杂度,维纳滤镜被附加了一些限制条件,所以全称叫做可拆分对称维纳滤镜:
图:SSW 滤镜分横纵向之别所查的卷积内核强度,以及利用对称性而只传输 3 个值的特性
注:从原版维纳滤镜的角度看,应当是内核在卷积过程中每位移一次就换一个(内核的所有值通过计算 LMS 得到),但这样可能会让计算过程慢数万倍;但反过来,优化版的 SSW 可能会因为对扫描区域的 LMS 预测不足、扫描区域设定过大、或所有滤镜预设都不适合当前画面的扫描区域而导致额外的失真。
向量的书面写法与点的坐标完全一样,如 \(v = \begin{bmatrix} 0 \\ 1 \end{bmatrix}\)。在坐标系中,它是一条从中心 0 点开始,拉伸到这个坐标上结束的双参数数量。只有大小的变量称为标量,向量在这个基础上增加了方向。将其写作坐标点,如三维空间下的 \(v = \begin{bmatrix} x \\ y \\ z \end{bmatrix}\) 是为了方便表示和计算,但也可以视作当前向量在坐标系中的投影的分量。
两个向量的组合由 \(w=c_1v+c_2v\) 给出。向量间的线性组合会产生新的向量。见 GeoGebra 的可互动例
图:不同于 \(y=mx+b\),向量 \(v\) 并不参与坐标轴的映射,结果仅仅是坐标分量的相加
图:两个向量在不同权重下的组合
摘自 x265 教程。通过计算两点分别取值的平方差 SSE 获得,如 GPS 的定位与实际位置的距离误差。此处用于测量向量的投影是否构成正交。
图:欧几里得距离利用平方差的算法,见维基百科
本节完全取自 tidystat。设定 \( \vec{X}=\left[\begin{array}{c} 3 \\ 2 \end{array} \right] \)、\( \vec{Y}=\left[\begin{array}{c} 1 \\ 3 \end{array} \right] \) 两条向量,则 \( \vec{Y} \) 与 \( \vec{X} \) 的最短距离与 \( \vec{X} \) 构成的直线垂直:
图:见tidystat
若向量 \( \vec{v} \) 和向量 \( \vec{w} \) 的点积为零,则向量 \( \vec{v} \) 与 \( \vec{w} \) 垂直,即:
\[ \vec{v} \cdot \vec{w} = 0 \]反过来将垂直作为限制条件,得到查找最短距离的算式:
\[ \left( \hat{Y}-\vec{Y} \right) \cdot \vec{X} = 0\]从上图可见,\( \hat{Y} \) 是向量 \( \vec{X} \) 长度的缩放,所以转换上式为:
\[ \left( c\vec{X}-\vec{Y} \right) \cdot \vec{X} = 0 \]将括号展开:
\[ c \vec{X} \cdot \vec{X} – \vec{Y} \cdot \vec{X} = 0 \]换算为:
\[ c = \frac{\vec{X} \cdot \vec{Y}}{\vec{X} \cdot \vec{X}} \]将点积部分展开:
\[ \vec{X} \cdot \vec{Y} = x_1 y_1 + x_2 y_2 + \ldots + x_n y_n = \sum \]\[ \vec{X} \cdot \vec{X} = x_1^2 + x_2^2 + \ldots + x_n^2 \]通过取导另一种查找最短距离的方法实现。使用欧几里得距离(平方差)对比 \( \vec{X} \) 任意一点中的距离 \( \vec{Y} \) 的长度,得到最短距离为:
\[\text{min} \sum_{i} \left(cX_{i}-Y\right)^2\]这个算式与缩放值 c 构成二次函数关系:
\[\frac{\delta}{\delta c} \sum_i (cX_{i}-Y_{i})^2 = 0\]取导数与换算结果为:
\[ \begin{align} \frac{\delta}{\delta c} \sum_i (cX_{i}-Y_{i})^2 &= \sum_i 2 X_{i} (cX_{i}-Y_{i}) \\ &=2 \sum_i X_{i} (cX_{i}-Y_{i}) \\ &= 2 \sum_i ( cX_{i} X_{i}-X_{i}Y_{i}) \end{align} \]最后,转换到向量点积的格式,得到算式:
\[ cX^{T} \cdot X - X^T \cdot Y = 0 \] \[ c= (X^{T} \cdot X)^{-1} \cdot X^{T} \cdot Y \]在任何维度空间中都不会因为变换而缩放或旋转(分量保持不变)的向量,一般作为参考(bound)使用,所谓的不变是通过不与坐标系锚定(不计算)实现的。可以视作客制化的 X 轴。
本节通过计算中解释“均值”的出处。见 tidystat.com
虽然 4/7~5/7 的过程曲折,但是回到二维坐标系后,这些概念就会落入线性回归的“点到直线的最短距离”题目里。
设二维常数向量 \( \vec{X_0}=\left[\begin{array}{c} 1 \\ 1 \end{array} \right] \),其张成的子空间 L 是一条 \( y=x \) 直线。从 \( \vec{Y} \) 找到与 L 垂直的线需要计算斜度 \( \beta \):
\[ \vec{Y} = \beta_0 X_0 = \beta_0 \left[\begin{array}{c} 1 \\ 1 \end{array}\right] \]这里的坐标轴由 2 次观测 Observation 得到,观测的具体方法由算法决定。因此,采样 \( Y \) 的向量坐标代表了两次观测得到的值。这里跳过观测,设定 \( Y = \left[\begin{array}{c} 1 \\ 3 \end{array}\right] \)。
图:见tidystat
找到 \( \beta_0 \) 需要满足以下条件:
5/7 的推导说明了 \( \beta_0 \) 代表向量 \( \vec{Y} \) 的均值,所以:
\[ \beta_0 = \frac{1+3}{2} = 2 \]而投影出的坐标,也就是预测向量为:
\[ \hat{Y} = \left[\begin{array}{c} 2 \\ 2 \end{array}\right] \]AV1 的 SGR 还原滤镜使用了三维空间分析。这里的坐标轴由 3 次观测得到,拥有两个 X 以及两个配套的斜度:
\[ \vec{Y} = \beta_0 \vec{X_0} + \beta_1 \vec{X_1} \]为了演示,所以直接设定这些数据(X 为矩阵)为:
\[ \vec{Y} = \left[\begin{array}{c} 1 \\ 3 \\ 1 \end{array} \right] \text{;} \hspace{2mm} \vec{X} =\left[\begin{array}{c} 1 & 2 \\ 1 & 3 \\ 1 & 3 \end{array} \right] \]由 \( \vec{X_0} \)、\( \vec{X_1} \) 构成的子空间 L 可以视作矩阵的列,所以也叫列空间 Column space:
图:见tidystat
但列空间 L 实际上并不局限于 \( \vec{X_0} \)、\( \vec{X_1} \) 之间。与二维中的例子一样,这个子空间由直线构成,而且是两个无限长的不平行直线(虽然这里的坐标是手动指定的),所以这个 L 实际上是一个无限大的二维平面,每个点对应了表示 L 的矩阵中某列的值:
图:见tidystat
这里的斜度由 5/7 所推导出的正交投影计算得到(查找列空间 L 上的点):
\[ \beta = (X^{T} \cdot X)^{-1} \cdot X^{T} \cdot Y = \]\[ \left(\left[\begin{array}{c} 1 & 1 &1 \\ 2 & 3 & 3 \end{array}\right] \left[\begin{array}{c} 1 & 2\\ 1 & 3 \\ 1 & 3 \end{array}\right]\right)^{-1} \left[\begin{array}{c} 1 & 1 &1 \\ 2 & 3 & 3 \end{array}\right] \left[\begin{array}{c} 1\\ 3 \\ 1 \end{array} \right] =\left[\begin{array}{c} -1 \\ 1 \end{array} \right] \]从而推导出预测向量 \( \hat{Y} \) 的坐标:
\[ \hat{Y} = \beta_0 \vec{X_0} + \beta_1 \vec{X_1} = -1\left[\begin{array}{ccc} 1 \\ 1 \\ 1 \end{array} \right] +1\left[\begin{array}{c} 2 \\ 3 \\ 3 \end{array} \right] = \left[\begin{array}{ccc} 1 \\ 2 \\ 2 \end{array} \right] \]投影结果如图:
图:见tidystat
通过简单空域滤镜,根据两种半径与方差 \(\{r_1, e_1\},\{r_2, e_2\}\) 作为参数生成 \(X_1 \text{,} \hspace{2mm} X_2\) 两张引导图像 Guided image,再分别减去劣化采样(压缩失真图像)\(X\) 得到引导叠加层 \(X_1-X \text{,} \hspace{2mm} X_2-X\),将两份叠加层分权重相加,再与劣化采样 \(X\) 相加还原图像 \(X_r\):
\[X_r = \beta_1\left( X_1-X \right) + \beta_2\left( X_2-X \right) + X\]权重 \(\beta_1, \beta_2\) 由正交投影点积计算得到 LMS 值:
\[ \beta_1 = \left( \left(X_1 - X\right)^T \left(X_1 - X\right) \right)^{-1} \left(X_1 - X\right)^T \]\[ \beta_2 = \left( \left(X_2 - X\right)^T \left(X_2 - X\right) \right)^{-1} \left(X_2 - X\right)^T \]使用 ffmpeg 内置的 libsvtav1 编码视频,拷贝音频,输出 .mp4 封装文件(推荐):
ffmpeg -i .\输入.mkv -c:v libsvtav1 -preset 3 -crf 30 -svtav1-params "keyint=12s" -c:a copy .\输出.mp4
ffmpeg -i .\输入.mkv -c:v libsvtav1 -preset 4 -crf 35 -svtav1-params "keyint=12s:enable-variance-boost=1:variance-boost-curve=2 :variance-boost-strength=3:film-grain=20:mastering-display=G(0.2649,0.6900)B(0.1500,0.0600)R(0.6800,0.3200)WP(0.3127,0.3290)L(1000.0,1)" -c:a copy .\输出.mp4
使用 ffmpeg 管道输出到独立 SVT-AV1 编码器程序,使用 -strict -1
解除 10bit y4m 管道格式限制,SVT-AV1 使用 12 秒关键帧间隔,CRF 35,预设 3,启用量化矩阵量化模式,完整显示进度条;导出未封装视频流:
ffmpeg -i .\输入.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 35 --enable-qm 1 --preset 3 --progress 2 -b .\WindAndNature_yuv420p10le_bt709_crf35_qm_preset3.ivf
导入有元数据的 yuv for mepg 视频流,指定使用 12 秒关键帧间隔,CRF 30,预设 3,懈怠显示进度条;导出未封装视频流:
SvtAv1EncApp -i .\输入.y4m --keyint 12s --crf 30 --preset 3 -b .\输出.ivf
导入无元数据的 yuv 视频流,并手动指定使用 bt709 色彩,3840x2160x24 大小,yuv420 空间,10bit 位深;指定使用 12 秒关键帧间隔,CRF 30,预设 3,SSIM 率失真优化,完整显示进度条;导出未封装视频流:
SvtAv1EncApp -i .\输入.yuv -w 3840 -h 2160 --input-depth 10 --color-format 1 --matrix-coefficients 1 --transfer-characteristics 1 --color-primaries 1 --fps 24 --keyint 12s --crf 30 --preset 3 --tune 2 --progress 2 -b .\输出.ivf
来源于 SVT-AV1 官方文档。注意随着编码器的版本更迭,参数的写法已经相较于较早版本有了变化。
--version
<开关>显示当前编译版本。
-i
<字符串路径>输入待压制的 .y4m,.yuv 流文件;或者选用 -
从管道输入。
-b
<字符串路径>输出未封装视频流文件 .ivf 的路径。
-n
<整数帧数>指定压制帧的数量。
--skip
<整数帧数>指定跳过前 n 帧后开始压制。
--errlog
<字符串路径>输出报错信息到文件(txt)的路径。
--enable-stat-report
<0/1,默认 0:关>启用逐帧 PSNR / SSIM 统计功能。
--stat-file
<字符串路径>输出逐帧 PSNR / SSIM 结果到文件。
--progress
<整数 0~2,默认 1(懈怠)>启用并指定进度条展示,1 与 2 为进度条样式。
Encoding 29
Encoding frame 29 629.42 kbps 2.06 fps
--input-depth
<8/10,默认 8,直接导入 .yuv 或从 rawvideo pipe 中导入时必须指定>指定输入视频的位深精度。与视频不符会导致主要为绿屏的严重画面错误。
-w
;-h
<整数 4~16384;整数 4~8704>指定输入视频的宽、高。
--fps
<整数 1~240,默认 25>指定视频帧率,可选用后者以精确表示小数帧率。
--fps-num
<整数 0~4294967295,默认 60000>指定视频帧率分子,便于表示小数帧率。
--fps-denom
<整数 0~4294967295,默认 1000;整数分子;整数分母>指定视频帧率分母,便于表示小数帧率。
--color-range
<0/1,默认 0:studio>指定使用有限或完整位深格式——0:studio,1:full
--tile-rows
<整数 0~6,默认 0:log2(x)
>指定横向瓦片数量,默认根据分辨率自适应。
--tile-columns
<整数 0~4,默认 0:log2(x)
429>指定纵向瓦片数量,默认根据分辨率自适应。
--profile
<整数 0~2,默认 0(main)>指定输出视频规格——0:main,1:high,2:professional。
规格 | Main | High | Professional |
---|---|---|---|
采样\位深 | 8/10 bit | 8/10 bit | 8/10/12 bit |
YUV 4:0:0 | √ | √ | √ |
YUV 4:2:0 | √ | √ | √ |
YUV 4:2:2 | × | × | √ |
YUV 4:4:4 | × | √ | √ |
表:见 维基百科 - AV1
--level
<0 / 浮点 2.0~7.3:输出,默认 0(自动)>指定输出视频级别。
seq_level_idx | 级别 Level | 最大宽高积 | 最大码率 | 最高分辨率@帧率举例 |
---|---|---|---|---|
0 | 2.0 | 147,456 | Main: 1.5 Mbps High: - |
426×240@30 fps |
1 | 2.1 | 278,784 | Main: 3 Mbps High: - |
640×360@30 fps |
4 | 3.0 | 665,856 | Main: 6 Mbps High: - |
854×480@30 fps |
5 | 3.1 | 1,065,024 | Main: 10 Mbps High: - |
1280×720@30 fps |
8 | 4.0 | 2,359,296 | Main: 12 Mbps High: 30 Mbps |
1920×1080@30 fps |
9 | 4.1 | Main: 20 Mbps High: 50 Mbps |
1920×1080@60 fps | |
12 | 5.0 | 8,912,896 | Main: 30 Mbps High: 100 Mbps |
3840×2160@30 fps |
13 | 5.1 | Main: 40 Mbps High: 160 Mbps |
3840×2160@60 fps | |
14 | 5.2 | Main: 60 Mbps High: 240 Mbps |
3840×2160@120 fps | |
15 | 5.3 | Main: 60 Mbps High: 240 Mbps |
3840×2160@120 fps | |
16 | 6.0 | 35,651,584 | Main: 60 Mbps High: 240 Mbps |
7680×4320@30 fps |
17 | 6.1 | Main: 100 Mbps High: 480 Mbps |
7680×4320@60 fps | |
18 | 6.2 | Main: 160 Mbps High: 800 Mbps |
7680×4320@120 fps | |
19 | 6.3 | Main: 160 Mbps High: 800 Mbps |
7680×4320@120 fps |
图:表:见 维基百科 - AV1
--chroma-sample-position
<整数 0~2,默认 0(留空)>指定色度采样缩减分辨率时所用的像素相对于缩小前像素的位置,涉及到解码端的色度像素对齐。如果源视频标注,则建议标注——1:左,2:左上。
--color-format
<整数 0~3,默认 1>指定输入视频的 YUV 色彩空间格式——0: 400,1: 420,2: 422,3: 444
--matrix-coefficients
<部分整数 0~14,默认 2(留空)>播放用矩阵格式/系数指标:
--transfer-characteristics
<部分整数 1~18,默认 2(留空)>传输特质:
--color-primaries
<部分整数 1~22,默认 2(留空)>三原色及白点指标,详见上述的国际电信联盟(ITU-T)H.273——Table 2:
HDR 信息分为硬件、软件、以及数据,共 3 类不统一的标准。为保证色彩正确,必须与源视频的元数据一致才能正确解码。
--master-display
<字符串 G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min)>用于高动态范围内容的绿、蓝、红、白点、光强信息
--content-light
<逗号分隔整数 MaxCLL,MaxFall>根据源视频的元数据设置最大内容光强与最大平均光强。
--nb
<整数 -1~\(1-2^{31}-1\),默认 -1:关>指定运行逻辑变更:先缓存(原视频解码后的)视频帧,再开始压制。适合内存空间大但内存延迟高(导致 CPU 占用不足的程度)的计算机。解码后每秒的内存占用可以粗略地算作:
\[ \frac{3_{\text{RGB 通道}} \times d_{\text{位深}} \times r_{\text{帧率}} \times w_{\text{宽}} \times h_{\text{高}}}{8_{\text{转字节}} \times 1048576_{\text{二进制 1 MB}}} \] \[ \frac{3 \times 60 \times 8 \times 1920 \times 1080}{8 \times 1048576} = 355.96 \hspace{2mm} \text{MBps (FHD60 8bit)} \] \[ \frac{3 \times 60 \times 10 \times 3840 \times 2160}{8 \times 1048576} = 1779.79 \hspace{2mm} \text{MBps (4K60 10bit)} \]--fast-decode
<整数 0~2,默认 0:关,被--hierarchical-levels
覆盖>指定低延迟模式(减少解码复杂度),适合直播的转码分发机制,以及算力不足的平台——1:普通限制,2:强限制。
--asm
<整数 0~11/字符串 c~max,默认 max:全部>指定弃用较新的 CPU 指令集以兼容旧式计算机平台。按照从旧到新排序为——c, mmx, sse, sse2, sse3, ssse3, sse4_1, sse4_2, avx, avx2, avx512, avx512icl, max。
--forced-maximum-frame-width
<整数 4~16384,>将输入帧宽度值设为强制。用途猜测:限制参考缩放环路与超分辨率环路。
--forced-maximum-frame-height
<整数 4~8704,用途未知>将输入帧高度值设为强制。用途猜测:限制参考缩放环路与超分辨率环路。
--avif
<0/1,默认 0:关>启用静态图像编码优化,在视频流仅为静态图像时提高编码速度、降低内存占用。
--lossless
<0/1,默认 0:关>启用无损压缩模式。
--lp
<整数 0~6,默认 0:全部>指定当前压制任务的线程数量。
--pin
<整数 0~n,默认 0:关>指定仅占用前 n 个 CPU 核心
--ss
<整数 -1~n>指定使用多节点系统中的特定节点编码。-1 表示自动选择。
--enable-qm
<0/1,默认 0:关>启用量化矩阵
--qm-min
<整数 0~15,默认 8:中低>指定量化矩阵的最小序号,序号值越小则允许使用越发陡峭、压缩越强的矩阵。
--qm-max
<整数 0~15,默认 15:最大>指定量化矩阵的最大序号,序号值越大则允许使用越发平坦、压缩越弱的矩阵。
--rc
<整数 0~2,默认 0:CRF 或 CQP>指定率控制模式——(--aq-mode 0
则为 CQP),1:VBR 模式,2:CBR 模式。
--qp
<整数 1~63,默认 35:中高量化>指定 CQP 模式下的固定值,CRF 模式下为初始 QP(类似于手动设置 x264/5 的 --cplxblur
)。由于 GOP 总以关键帧开始,所以 CRF 模式下推荐较低的值。
--crf
<整数 1~63,默认 35:中高量化>指定质量呼应码率模式的量化强度目标,SVT-AV1 中直接映射为 --rc 0 --aq-mode 2 --qp [_]
。
--sharpness
<整数 -7~7,默认 0:平均>指定码率控制模式分配码率到图片锐度低处到高处的范围。
相比于 AVC、HEVC 偏移 QP,QIndex 的精度比 QP 高 4 倍。同时,使用时应该注意 Dc_Qlookup
与 Ac_Qlookup
表格在不同位深下的替换(强度变更),并注意量化步长曲线走向与 AVC、HEVC 量化步长曲线的区别。
--use-fixed-qindex-offsets
<整数 0~2,默认 0:关>启用量化步长索引 QIndex 偏移。
--key-frame-qindex-offset
;--key-frame-chroma-qindex-offset
<整数 -64~63,默认 0>亮度与色度平面关键帧 QIndex 偏移,决定量化步长大小。
--luma-y-dc-qindex-offset
;--luma-y-ac-qindex-offset
;--chroma-u-dc-qindex-offset
;--chroma-u-ac-qindex-offset
;--chroma-v-dc-qindex-offset
;--chroma-v-ac-qindex-offset
<整数 -64~63,默认 0>指定 DC、AC 画面中,Y、Cb、Cr 平面的 QIndex 偏移。
--startup-qp-offset
<整数 -63~63,默认 0>指定 GOP 初始 QP 值偏移。
--qindex-offsets
<逗号分隔整数,默认 0,0,...,0>指定每层尖塔混合参考帧(--hierarchical-levels
)下级的量化步长索引偏移,决定量化步长大小。
--chroma-qindex-offsets
<逗号分隔整数,默认 0,0,...,0>指定每层色度尖塔混合参考帧(--hierarchical-levels
)下级的量化步长索引偏移,决定色度平面量化步长大小。
--enable-variance-boost
<0/1,默认 0:关>开启方差自适应量化的增强强度微调。
--variance-boost-curve
<整数 0~2,默认 0:默认曲线>指定方差自适应量化的增强曲线,作用类似于 x264/5 的 --qcomp
,但应用在了 VAQ 上
switch (curve) {
case 1: qstep_ratio = 0.25 * strength * (-log2((double)variance) + 8) + 1; break;
case 2: qstep_ratio = 0.15 * strength * (-log2((double)variance) + 10) + 1; break;
default: qstep_ratio = pow(1.018, strengths[strength] * (-10 * log2((double)variance) + 80)); break;
}
--variance-boost-strength
<整数 1~4,默认 2:弱>指定方差自适应量化的增强强度——1:微,2:弱,3:中:4:强
--variance-octile
<整数 1~8,默认 6:偏高>指定开启方差自适应量化增强条件“特大块中低对比度面积占比阈值”。但凡特大块中,低对比度面积达到 N/8,则对该特大块启用方差自适应量化增强(Octile 代表分母)。分子值越低,则触发的特大块越多,码率越高;而分子偏高则可能会导致特大块之间的画面失真不一致,导致一圈特大块中显现出 64x64、64x128、128x128,或/和 256x128 的块失真。
--aq-mode
<整数 0~2,默认 2:分瓣 VAQ + QP 偏移预测>指定自适应量化模式——0:关,1:分瓣 VAQ 调整;2:并且使用 QP 偏移预测
--tbr
<整数 1~100000,默认 2000:Kbps>指定 VBR 模式的目标码率,相当于 AVC、HEVC 的 --bitrate
。
--min-qp
;--max-qp
<整数 1~62,默认 1><整数 1~63,默认 63>指定限制 VBR、CBR 模式下的 QP 值赋值范围。
--overshoot-pct
<整数 0~100,默认 CBR:25,VBR:50>指定判定 VBR,CBR 模式下码率大小为超标的百分比。
--undershoot-pct
<整数 0~100,默认取决于率控制模式>指定判定 VBR,CBR 模式下码率大小为落标的百分比。
--gop-constraint-rc
<0/1,默认 0:关,需 VBR>将 VBR 模式的码率限制改为逐 GOP 应用,猜测:能够使每个 GOP 开始时有更充足的码率,但可能会消耗额外带宽。
SVT-AV1 中,CBR 模式代表以毫秒为单位的“时间缓冲区”定义缓冲区大小。如果解码用时高于或低于预期,则相应的调整压缩强度。控制参考缩放环路的动态模式。
--buf-sz
<整数 20-10000,默认 1000:毫秒>CBR 缓冲区极限大小,与 AVC、HEVC 的 --vbv-bufsize
有几分相似。
--buf-initial-sz
<整数 20-10000,默认 600:毫秒>CBR 缓冲区初始大小。
--buf-optimal-sz
<整数 20-10000,默认 600:毫秒>CBR 缓冲区中、后期大小。
--mbr
<整数 0~100000,默认 0:关>指定 CRF 模式的峰值码率,相当于 vbv-maxrate。
--mbr-overshoot-pct
<整数 0~100,默认 50>指定 Capped CRF 模式下,判定码率大小为超标的百分比。
TODO:分析源码查证参数说明,可能与编码 TU 有关。
--recode-loop
<整数 0~100,默认 0:关>猜测:当编码结果与率控制目标差异过大(码率过低、过高、解码用时低于或高于预期)。
ALTREF
)、金帧(GOLDEN
)重新编码,无视码率限制--preset
--tune
<整数 0~2,默认 1:PSNR(客观)>调整率失真优化对失真(rdmult)的定义方法,以及更改一些内部参数(VQ 涉及更改去块滤镜判断锐度级别、SSIM 涉及到更改 MiRow、MiCol(Marcoblock Index)大小)——0:心理视觉优化 Visual quality(主观),2:SSIM。
coding_loop.c
if (pcs->ppcs->blk_lambda_tuning) {
// 复制当前块几何信息与位置到模式决策
md_ctx->blk_geom = ed_ctx->blk_geom;
md_ctx->blk_org_x = ed_ctx->blk_org_x;
md_ctx->blk_org_y = ed_ctx->blk_org_y;
// 动态调整当前块的 Lambda 值
svt_aom_set_tuned_blk_lambda(md_ctx, pcs);
}
else if (pcs->ppcs->scs->static_config.tune == 2) { // tune 2
// 复制当前块几何信息与位置到模式决策
md_ctx->blk_geom = ed_ctx->blk_geom;
md_ctx->blk_org_x = ed_ctx->blk_org_x;
md_ctx->blk_org_y = ed_ctx->blk_org_y;
int mi_row = ed_ctx->blk_org_y / 4;
int mi_col = ed_ctx->blk_org_x / 4;
// 据当前块的空间位置使用 SSIM 统计 rdmult
aom_av1_set_ssim_rdmult(md_ctx, pcs, mi_row, mi_col);
}
enc_handle.c
static void derive_vq_params(SequenceControlSet* scs) {
VqCtrls* vq_ctrl = &scs->vq_ctrls;
if (scs->static_config.tune == 0) { // tune 0
// 启用锐度相关控制
vq_ctrl->sharpness_ctrls.scene_transition = 1;
vq_ctrl->sharpness_ctrls.tf = 1;
vq_ctrl->sharpness_ctrls.unipred_bias = 1;
vq_ctrl->sharpness_ctrls.ifs = 1;
vq_ctrl->sharpness_ctrls.cdef = 1;
vq_ctrl->sharpness_ctrls.restoration = 1;
vq_ctrl->sharpness_ctrls.rdoq = 1;
// 启用模式决策块间差异稳态化控制(perform_pred_depth_refinement())
vq_ctrl->stability_ctrls.depth_refinement = 1;
}
else { // tune 1, tune 2
vq_ctrl->sharpness_ctrls.scene_transition = 1;
vq_ctrl->sharpness_ctrls.tf = 0;
vq_ctrl->sharpness_ctrls.unipred_bias = 0;
vq_ctrl->sharpness_ctrls.ifs = 0;
vq_ctrl->sharpness_ctrls.cdef = 0;
vq_ctrl->sharpness_ctrls.restoration = 0;
vq_ctrl->sharpness_ctrls.rdoq = 0;
vq_ctrl->stability_ctrls.depth_refinement = 0;
}
// 低延迟模式、2-pass 非最后一遍时关闭转场优化
if (scs->static_config.pred_structure != SVT_AV1_PRED_RANDOM_ACCESS || scs->static_config.pass == ENC_FIRST_PASS)
vq_ctrl->sharpness_ctrls.scene_transition = 0;
}
enc_dec_process.c
static void perform_pred_depth_refinement(SequenceControlSet *scs, PictureControlSet *pcs, ModeDecisionContext *ctx, uint32_t sb_index) {
MdcSbData *results_ptr = &ctx->mdc_sb_array;
uint32_t blk_index = 0; // 当前块序号
// 是否启用基于成本带的深度调制(Cost band modulation):未启用分块深度细化、或当前帧非帧内编码且动态搜索成本方差低于阈值时启用
uint8_t use_cost_band_based_modulation = (!scs->vq_ctrls.stability_ctrls.depth_refinement || (pcs->slice_type != I_SLICE && pcs->ppcs->me_8x8_cost_variance[ctx->sb_index] < VQ_STABILITY_ME_VAR_TH));
// 非正方形细分块关
if (!ctx->nsq_geom_ctrls.enabled) {
// 禁用 4x4 细分块
if (ctx->disallow_4x4) {
memset(results_ptr->consider_block, 0, sizeof(uint8_t) * scs->max_block_cnt);
memset(results_ptr->refined_split_flag, 1, sizeof(uint8_t) * scs->max_block_cnt);
} else {
// 遍历分块并标记大于 4x4 的块
while (blk_index < scs->max_block_cnt) {
const BlockGeom *blk_geom = get_blk_geom_mds(blk_index);
bool split_flag = blk_geom->sq_size > 4 ? true : false;
results_ptr->consider_block[blk_index] = 0;
results_ptr->refined_split_flag[blk_index] = blk_geom->sq_size > 4 ? true : false;
blk_index += split_flag ? blk_geom->d1_depth_offset : blk_geom->ns_depth_offset;
}
}
} else {
// 启用 4x4 细分块——重设所有块的分块标记为默认,后续根据模式决策与预测块序列细分(md_blk_arr_nsq)
while (blk_index < scs->max_block_cnt) { // 遍历并加载默认值
const BlockGeom *blk_geom = get_blk_geom_mds(blk_index);
results_ptr->consider_block[blk_index] = 0;
results_ptr->refined_split_flag[blk_index] = blk_geom->sq_size > 4 ? true : false;
blk_index++;
}
}
// 获取选中分块深度 0 的最大/最小块大小(Get max/min PD0 selected block sizes)
uint16_t max_pd0_size = 0;
uint16_t min_pd0_size = 255;
if (ctx->depth_ctrls.limit_max_min_to_pd0)
get_max_min_pd0_depths(scs, pcs, ctx, &max_pd0_size, &min_pd0_size);
results_ptr->leaf_count = 0;
blk_index = 0;
bool pred_depth_only = 1;
// 遍历分块
while (blk_index < scs->max_block_cnt) {
const BlockGeom *blk_geom = get_blk_geom_mds(blk_index);
ctx->blk_ptr = &ctx->md_blk_arr_nsq[blk_index];
// 帧类型非 I 帧、或块大小小于 128x128 时允许检查分块(inject)
uint8_t is_blk_allowed = pcs->slice_type != I_SLICE ? 1 : (blk_geom->sq_size < 128) ? 1 : 0;
// 加载当前非正方形分块数据
bool split_flag = ctx->md_blk_arr_nsq[blk_index].split_flag;
if (is_blk_allowed) {
if (blk_geom->shape == PART_N) {
if (ctx->md_blk_arr_nsq[blk_index].split_flag == false) {
// 添加当前预测深度的分块
results_ptr->consider_block[blk_index] = 1;
results_ptr->refined_split_flag[blk_index] = false;
// 起始与结束深度(父子结构)
int8_t s_depth = ctx->depth_ctrls.s_depth;
int8_t e_depth = ctx->depth_ctrls.e_depth;
// 选定的深度应该可用,除非数据无效(如超出序列范围)。因此需要移除父子结构。
if (!ctx->cost_avail[blk_geom->sqi_mds]) {
s_depth = e_depth = 0;
} else {
if (ctx->avail_blk_flag[blk_geom->sqi_mds]) {
// 当前块可用旗标。依赖已测试区块信息的决策应在此处进行(?)
// 非方形分块的分块成本可能来自 H/V,而方形块没有分块成本信息(?)
if (ctx->depth_ctrls.use_pred_mode) {
// 帧间块限制起始与结束深度到 (-1,+1)
if (ctx->intra_ctrls.enable_intra && (ctx->blk_ptr->prediction_mode_flag == INTER_MODE)) {
s_depth = MAX(s_depth, -1);
e_depth = MIN(e_depth, 1);
}
}
}
}
// 选取多种分块深度则启用细化(refinement)
if (s_depth != 0 || e_depth != 0) {
// 4x4 blocks have no children
if (blk_geom->sq_size == 4)
e_depth = 0;
// 检查开始和结束深度是否在允许范围内
if (ctx->disallow_4x4) {
e_depth = (blk_geom->sq_size == 8) ? 0
: (blk_geom->sq_size == 16) ? MIN(1, e_depth)
: (blk_geom->sq_size == 32) ? MIN(2, e_depth)
: e_depth;
}
if (ctx->depth_removal_ctrls.enabled) {
if (ctx->depth_removal_ctrls.disallow_below_64x64) {
e_depth = (blk_geom->sq_size <= 64) ? 0
: (blk_geom->sq_size == 128) ? MIN(1, e_depth)
: e_depth;
} else if (ctx->depth_removal_ctrls.disallow_below_32x32) {
e_depth = (blk_geom->sq_size <= 32) ? 0
: (blk_geom->sq_size == 64) ? MIN(1, e_depth)
: (blk_geom->sq_size == 128) ? MIN(2, e_depth)
: e_depth;
} else if (ctx->depth_removal_ctrls.disallow_below_16x16) {
e_depth = (blk_geom->sq_size <= 16) ? 0
: (blk_geom->sq_size == 32) ? MIN(1, e_depth)
: (blk_geom->sq_size == 64) ? MIN(2, e_depth)
: (blk_geom->sq_size == 128) ? MIN(3, e_depth)
: e_depth;
}
}
if (ctx->depth_ctrls.limit_max_min_to_pd0 && max_pd0_size != min_pd0_size) {
// 如果深度 0 选择了深度,则忽略选择范围之外的深度
if (blk_geom->sq_size == max_pd0_size)
s_depth = 0;
if (blk_geom->sq_size == min_pd0_size)
e_depth = 0;
}
uint8_t sq_size_idx = 7 - (uint8_t)svt_log2f((uint8_t)blk_geom->sq_size);
int64_t th_offset = 0;
if (ctx->depth_refinement_ctrls.enabled && ctx->depth_refinement_ctrls.cost_band_based_modulation && use_cost_band_based_modulation && (s_depth != 0 || e_depth != 0)) {
update_pred_th_offset(ctx, blk_geom, &s_depth, &e_depth, &th_offset);
}
// 添加父级深度的块索引
// 基于成本的块深度细化仅适用于 [s_depth=-1, e_depth=1]
uint8_t add_parent_depth = 1;
ctx->parent_to_current_deviation = MIN_SIGNED_VALUE;
if (ctx->depth_refinement_ctrls.enabled && s_depth == -1 && ctx->avail_blk_flag[blk_index] &&
blk_geom->sq_size < ((scs->seq_header.sb_size == BLOCK_128X128) ? 128 : 64)) { // 检查当前块可用旗标,只有可用的块支持更新 default_cost
add_parent_depth = is_parent_to_current_deviation_small(pcs, ctx, blk_geom, th_offset);
}
// 添加子级深度的块索引
// 基于成本的块深度细化仅适用于 [s_depth=-1, e_depth=1]
uint8_t add_sub_depth = 1;
ctx->child_to_current_deviation = MIN_SIGNED_VALUE;
if (ctx->depth_refinement_ctrls.enabled && e_depth == 1 && ctx->avail_blk_flag[blk_index] && blk_geom->sq_size > 4) { // 检查当前块可用旗标,只有可用的块支持更新 default_cost
add_sub_depth = is_child_to_current_deviation_small(pcs, ctx, blk_geom, blk_index, th_offset);
}
// 每个块设最大深度为 2(PRED+父、或 PRED+子)
if (ctx->depth_refinement_ctrls.enabled && ctx->depth_refinement_ctrls.up_to_2_depth) {
if ((s_depth == -1) && add_parent_depth && (e_depth == 1) && add_sub_depth) {
if (ctx->parent_to_current_deviation != MIN_SIGNED_VALUE &&
ctx->child_to_current_deviation != MIN_SIGNED_VALUE) {
if (ctx->parent_to_current_deviation <= ctx->child_to_current_deviation) {
add_sub_depth = 0;
} else {
add_parent_depth = 0;
}
}
}
}
if (e_depth || s_depth)
pred_depth_only = 0;
if (s_depth != 0 && add_parent_depth) // 标记需处理的父块
set_parent_to_be_considered(ctx, results_ptr, blk_index, scs->seq_header.sb_size, (int8_t) blk_geom->depth, sq_size_idx, s_depth, !ctx->nsq_geom_ctrls.enabled);
if (e_depth != 0 && add_sub_depth) // 标记需处理的子块
set_child_to_be_considered(pcs, ctx, results_ptr, blk_index, sb_index, scs->seq_header.sb_size, (int8_t)blk_geom->depth, sq_size_idx, e_depth, !ctx->nsq_geom_ctrls.enabled);
}
}
}
}
// 遍历过程中跳过不用检测的块
blk_index += split_flag ? blk_geom->d1_depth_offset : blk_geom->ns_depth_offset;
}
// 当前块仅保留预测深度,不做调整
if (pred_depth_only)
ctx->pred_depth_only = 1;
}
--lambda-scale-factors
<逗号分隔整数×128,默认 128,...,128:关>指定各种帧类型下,精确到帧的的率失真斜度缩放值。“各种帧类型”代表 SvtAv1FrameUpdateType
下的类型。每个值会被编码器除以 128,所以默认值实际上是 1。
typedef enum SvtAv1FrameUpdateType {
SVT_AV1_KF_UPDATE, // 关键帧
SVT_AV1_LF_UPDATE, // 上帧
SVT_AV1_GF_UPDATE, // 金帧/远距离过去帧
SVT_AV1_ARF_UPDATE, // 支线被参考帧
SVT_AV1_OVERLAY_UPDATE, // 占位符帧
SVT_AV1_INTNL_OVERLAY_UPDATE, // 内部占位符帧
SVT_AV1_INTNL_ARF_UPDATE, // 内部支线被参考帧
SVT_AV1_FRAME_UPDATE_TYPES
} SvtAv1FrameUpdateType;
--passes
<1/2,默认 1:关>启用 2pass 模式。
--pass
<整数 0~2,默认 0:关,被 --preset
覆盖>指定多遍编码模式,1:pass 1,2:pass 2。Pass 1 仅支持 CRF 率控制模式,Pass 2: 仅支持 VBR,同时要求 --preset < 10
(见 SVT-AV1 app_config.c)。
--stats
<字符串路径,默认 "svtav1_2pass.log">输入输出多遍编码分析日志。
--keyint
<整数/整数带后缀 -2~2147483647 帧,支持后缀 s(秒)>设定 GOP 长度,替代旧版的 --intra-period
,映射到 intra_period_length
。SVT-AV1 官方推荐设置为 mini-GOP 长度(\( 2^{\text{hierarchical-levels}} \))的倍数之上再加 1,以避免将关键帧插入在 mini-GOP 之内,导致压缩率的降低。
--hierarchical-levels 3
:\(2^3 = 8\),即推荐值为 8 的倍数之上加 1--hierarchical-levels 4
:\(2^4 = 16\),即推荐值为 16 的倍数之上加 1--hierarchical-levels 5
:\(2^5 = 32\),即推荐值为 32 的倍数之上加 1--hierarchical-levels 6
(--preset <= 8
):\(2^6 = 64\),即推荐值为 64 的倍数之上加 1--irefresh-type
<1/2,默认 2:Closed GOP>指定关键帧类型,1:允许前向参考型(Open GOP),2:普通关键帧
--scd
<0/1,默认 0:关>开启转场检测。SVT-AV1 检测到转场后只会减少帧间参考,而不会插入关键帧,因此开启后仅会略微提高码率分配精度(见 SVT-AV1 common questions)映射到 transition_present
。另外,如果需要这种提高画质的 keyint GOP 拆分机制,SVT-AV1 还有前瞻进程中 mini-GOP 的实现可用。
--scm
<整数 0~2,默认 2:自适应>开启录屏特化功能模式(匹配使用 IBC、调色板帧内编码)开关控制所需的内容类型检测。
--lookahead
<整数 -1~120,默认 -1:自动>指定前瞻进程搜索距离
--hierarchical-levels
<整数 2~5,默认 4,--preset 12~13
下默认 5,覆盖--fast-decode
,被--pred-struct
覆盖>指定每个 GOP 于底层之上的分层预测结构层数。越高则帧间冗余功能越强、尖塔混合参考帧越多、负责解码每个 GOP 的 OBU 越多、编码速度越慢、解码压力越大(带宽压力越小)、串流时的网络信号质量要求越高。类似于设定连续 B 帧长度——2: 共 3 层,3: 共 4 层,5: 共 6 层。
--pred-struct
<整数 1~2,默认 2,覆盖 --hierarchical-levels
>指定帧间预测模式——1: 低延迟编解码(限为单层,关闭混合参考模式,并影响一些编码模式的强度,映射到 rtc_tune = true
),2: 支持随机访问(不限制,开启混合参考模式)。
/*
* 指定帧间预测模式,definitions.h 中为 PredStructure
*/
typedef enum SvtAv1PredStructure {
SVT_AV1_PRED_LOW_DELAY_P = 0, // 不再可用
SVT_AV1_PRED_LOW_DELAY_B = 1,
SVT_AV1_PRED_RANDOM_ACCESS = 2,
SVT_AV1_PRED_TOTAL_COUNT = 3, // 暂不可用
SVT_AV1_PRED_INVALID = 0xFF,
} SvtAv1PredStructure;
--enable-dg
<0/1,默认 1:开,需 --rc 0
,分辨率小于 4k,--fast-decode 0
,--pred-struct 2
,--preset <=7
>开启 GOP 层数的前期动态分析,拆分出 mini-GOP 以在 GOP 结构上提高对高时域复杂度场景的适应性,mini-GOP 默认长度为 16 帧。
--startup-mg-size
<整数 2~4 或 0,默认 0:关,需小于 --hierarchical-levels
>指定每个关键帧之后首个 mini-GOP 专用的分层预测结构层数。类似于设定连续 B 帧长度——2: 共 3 层,3: 共 4 层,4: 共 5 层。猜测:该功能可以在 GOP 本身较长的情况下,缓解 CBR 解码延迟的增长速率,从而使码率分配更合理。
--enable-tpl-la
<0/1,默认 1:开,需 CRF/CQP 率控制模式>开启前瞻时域依赖性建模,决定率控制的自动化。
--enable-tf
<整数 0~2,默认 1:开>时域降噪过滤,也代表启用 ALTREF
帧类型,同时涉及 OVERLAY
帧类型的建立——0:关、1:开、2:根据帧类型(关键帧、参考帧、亮度、色度)、以及偏移值 --tf-strength
决定强度衰减系数、最后由强度在视频中的变化决定。
--tf-strength
<整数 0~4,默认 3:较强>指定时域降噪过滤中,滤镜强度衰减的偏移值。
--enable-overlays
<0/1,默认 1:开>启用 OVERLAY
帧类型。
--enable-mfmv
<整数 -1~1,默认 -1:自动>开启向量场规划(MVRS)。
--enable-dlf
<0/1,默认 1:开>开启环路去块滤镜。
--enable-cdef
<0/1,默认 1:开>开启环路定向边缘强化滤镜。
--enable-restoration
<0/1,默认 1:开>开启环路还原滤镜。在快速高画质编码预设下可能会出现 SSW 滤镜因 RU 大小过大的模糊失真。
--film-grain
<整数 0~50,默认 0:关,被--film-grain-denoise
覆盖>开启 FGS 并指定噪点分离强度,涉及编码前的噪声的分离与建模、解码端的再合成。强度取决于画面类型,例如录像片源适合中~高强度、动画与录屏片源适合低强度(见 SVT-AV1 Common question)——1:最弱分离、50:最强分离。
--film-grain-denoise
<0/1,默认 0:关,覆盖--film-grain
>丢弃 FGS 分离的噪点,--film-grain
的分离强度间接转化为降噪强度。
--resize-mode
<整数 0~4,默认 0:关,需关闭超采样滤镜环路>启用参考缩放环路,并制定缩放模式。
--frame-resz-events
、--frame-resz-kf-denoms
、--frame-resz-denoms
指定视频中的多个分母--resize-denom
;--resize-kf-denom
<整数 8~16,默认 8:分母>指定参考缩放环路中“8÷缩放分母”的非关键帧、关键帧缩放分母——8:缩放到 8÷8,16:缩放到 1÷2。
--frame-resz-events
<逗号分隔整数帧号,默认空,需 --resize-mode 4
>启用参考缩放环路,并制定缩放模式。
--frame-resz-denom
;--frame-resz-kf-denom
<逗号分隔整数 8~16,默认 8:分母,需 --resize-mode 4
>指定参考缩放环路中每个 --frame-resz-events
的“8÷缩放分母”的非关键帧、关键帧缩放分母——8:缩放到 8÷8,16:缩放到 1÷2。
--superres-mode
<整数 0~4,默认 0:关,需关闭参考缩放环路>开启超分辨率环路,并指定一种缩小模式:
--superres-denom
指定 1 项“8÷缩小分母”中的分母,从而决定编码分辨率--superres-qthres
、--superres-kf-qthres
)判断增大和缩小分母,仅缩小关键帧与支线被参考帧 ALTREF
--superres-denom
;--superres-kf-denom
<整数 8~16,默认 8:分母>指定超分辨率环路中“8÷缩放分母”的非关键帧、关键帧缩放分母——8:缩放到 8÷8,16:缩放到 1÷2。
--superres-qthres
;--superres-kf-qthres
<整数 0~64,默认 43:中高>指定动态分母模式下非关键帧、关键帧的 QP 阈值,只要率控制模式指定了更高的 QP 值,就开始增加缩小分母大小。
注:SVT-AV1 的预设参数下牵扯着若干项强度的设定,且官方文档中仅实现了部分标注。以下内容主要来自于源代码分析,因此可能会有看错看晕或理解错误,但对于帮助设定该参数有着良性作用。
--preset
<整数 13~-1,默认 10:快速>SVT-AV1 中高度涉及编码功能强度设定的参数。大致上 13~7 用于实时和快速编码用途,6~4 为常规用途,3~1 为高压缩用途,-1 为替代 0 的自动(ENC_MR
,Research mode)模式。10~0 的部分预设范围见下,或 SVT-AV1 Common questions:
is_ref
:当前帧的类型为被参考帧is_base
:当前帧位于分层预测结构底层is_islice
:当前帧的帧类型属于 I 帧,即分层预测结构底部帧(PCS)transition_present
:设定的帧间范围含有转场coeff_level
:块内系子数量高低:{VLOW_LV=0, LOW_LVL=1, NORMAL_LVL=2, HIGH_LVL=3, INVALID_LVL=~0}
功能\预设值 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
TF level (需 --enable-tf 、--hierarchical-levels >1 、--lossless 0 ,否则关) |
--pred-struct 1 且分辨率大于等于 720p:2,小于 720p:0;否则 9
|
--pred-struct 1 且分辨率大于等于 720p:1,小于 720p:0;否则 8
|
5 | 3 | 2 | 1 | |||||
NSQ level | 关 | LOW_LVL, is_base :15,否则 0;HIGHT_LVL, is_base :17,否则 0;regular, is_base :16,否则 0 |
LOW_LVL, is_base :9,否则 12;HIGH_LVL, is_base :11,否则 14;regular, is_base :10,否则 13 |
is_base :7,否则 8 |
is_base :5,否则 6 |
is_ref :2,否则 4 |
|||||
HME SA | 搜索面积最小 240x240,最大 480x480 |
源分辨率大于等于 4k 时最小 32x32,最大 192x192; 否则与更快的预设一致 |
源分辨率小于等于 1080p 且场景复杂度高时:最小 16x16,最大 192x192; 否则与更快的预设一致 |
||||||||
HME Refine | 1、2 级分叉皆细化 16x16 | 1、2 级分叉皆细化 8x3 | |||||||||
TXT level |
LOW_LVL, is_base :4,否则 5;HIGH_LVL, is_base :8,否则 10;NORMAL_LVL :7
|
LOW_LVL :4;HIGH_LVL :7;NORMAL_LVL, is_base :4,否则 5
|
3 | 2 | |||||||
TXS level | is_islice :4,否则 0 |
is_base :4,否则 0 |
is_base :3,否则 0 |
3 | 2 | ||||||
OBMC level | 0 | is_base :4,否则 0 |
4 | 3 | 1 | ||||||
Filter Intra level | 0 | 2 | 1 | ||||||||
InterIntra level | 0 | trnasition_present :2,否则 0 |
is_base /trnasition_present :2,否则 0 |
2 | |||||||
COMP level | 0 | 4 | 3 | ||||||||
Chroma level | 5 | 4 | 1 | ||||||||
Update CDF level | 0 | is_base :1,否则 0 |
is_base :1,否则 3 |
is_base :1,否则 2 |
1 | ||||||
MRP level | 11 | 7 |
--pred-struct 1 --hierarchical-levels <= 3 :6;--pred-struct 1 --hierarchical-levels > 3 :5;--pred-struct 2 :7
|
5 | 4 | 3 | 2 | 1 | |||
TPL level (关缩放/超分辨率环路、 pred-struct 2 、aq-mode > 0 、pass > 1 ) |
6 | 5 | 4 | 2 | 1 | ||||||
GM level(关缩放/超分辨率环路) | is_ref :关,否则 6 |
5 | 4 | 3 | 2 | ||||||
Max CAN | 190 | 236 | 295 | 369 | 576 | 720 | 1000 | 1225 | |||
CDEF level(关 IBC) | is_base :8,否则针对 is_ref :9,否则 10 |
is_ref :8,否则 10 |
4 | 2 | 1 | ||||||
--hierarchical-levels |
5 | 6 | |||||||||
--aq-mode |
1 | ||||||||||
DRL 参考帧数量 | 2 | 5 | 7(最大) | ||||||||
整数像素动态搜索 ME | 开 | ||||||||||
子像素动态补偿 | 开 | ||||||||||
Superblock 大小 | 64 | 128 | |||||||||
最小细分块大小 | 8 | 4 | |||||||||
帧内编码 DC、SMOOTH/_H/_V、夹角、Paeth、CFL | 开 | ||||||||||
IBC level | 6 | 5 | 4 | 1 | |||||||
Palette level | is_base :2,否则 0 |
||||||||||
帧内编码递归插值模式 | 关 | 开 | |||||||||
单帧参考帧、混合参考帧 | 开 | ||||||||||
亮度 1/8 像素插值 | 开 | ||||||||||
子像素插值搜索 | 开 | ||||||||||
仿射变换动态补偿 | 开 | ||||||||||
--enable-mfmv |
1 | ||||||||||
重叠块运动补偿 | 关 | 开 | |||||||||
帧内帧间模式分权 | 关 | 开 | |||||||||
楔形蒙版预测分权 | 关 | 开 | |||||||||
帧间距离加权分权 | 关 | 开 | |||||||||
差值加权模式分权 | 关 | 开 | |||||||||
方差自适应量化 | --aq-mode > 0, --scd 1, --enable-variance-boost 时开,否则关 |
开 | |||||||||
SSW 还原滤镜 | 关 | 开 | |||||||||
SGR 还原滤镜 | 关 | 开 |
使用 R9 9900X(具体测试系统配置见测试版块)编码 3840x2160 帧大小的速度参考如下:
--preset 1
:0.10 fps--preset 3
:4.11 fpsSVT-AV1 会根据视频分辨率的积,在 --preset
参数之上进一步确立参数强度。
值 | 像素数量 | 像素数量 |
---|---|---|
INPUT_SIZE_240p_TH |
0x28500 | 165,120 |
INPUT_SIZE_360p_TH |
0x4CE00 | 314,880 |
INPUT_SIZE_480p_TH |
0xA1400 | 660,480 |
INPUT_SIZE_720p_TH |
0x16DA00 | 1,497,600 |
INPUT_SIZE_1080p_TH |
0x535200 | 5,460,480 |
INPUT_SIZE_4K_TH |
0x140A000 | 21,012,480 |
INPUT_SIZE_8K_TH |
0X5028000 | 84,049,920 |
每个预设强度的压缩率见 Discord/Emre 于 AV1 CommunitySVT-AV1 频道发布的测试图,版本为 SVT-AV1 3.0.1:
--preset <=4
,:8K 分辨率视频源(INPUT_SIZE_8K_TH
)仅支持 5 及更快的预设--pass
:不支持 Open GOP 流结构--pass 2
:不支持 CRF、CBR 率控制模式--pass 2
:在 --preset < 10
下不支持 VBR 率控制模式--keyint -1
:不支持 CRF 率控制模式--aq-mode 0
:使用率控制模式(VBR/CBR/CRF)时不能关闭--mbr
:仅支持 CRF 模式--rc 1~2
(CBR):不支持 --enable-dg 1
,请使用 CRF/CQP 模式--rc 1
(VBR):不支持 --keyint -1
,请使用 CRF 模式--rc 1
(VBR):不支持 --pred-struct 1
,请使用其它模式--rc 2
(CBR):不支持 --pred-struct 2
,请使用其它模式--tbr
:仅支持 --rc 1
,--rc 2
(VBR/CBR)--startup-qp-offset
:仅支持 --rc 0
(CRF/CQP)--profile 1
:要求视频源为 4:4:4 格式--profile 2
:位深度小于 10 时要求视频源为 4:2:2 格式--fast-decode
:不支持超分辨率环路--aq-mode
:不支持分辨率宽或高小于 64 的源,已设为关闭(0)--color-primaries
:某些值保留且不推荐使用--transfer-characteristics
:某些值保留且不推荐使用--matrix-coefficients
:某些值保留且不推荐使用--chroma-sample-position
:某些值保留且不推荐使用--scd 0
:SVT-AV1 不以场景检测添加关键帧--tile-rows >0
:建议使用 --fast-decode 1
、2,而不是瓦片数量以提高解码速度--tile-columns >0
:建议使用 --fast-decode 1
、2,而不是瓦片数量以提高解码速度--fast-decode
:与 --tune 1
一起使用时效果最佳--enable-dg
,:不支持 4K 分辨率及以上(INPUT_SIZE_4K_TH
)的视频源--preset
必须在 -1~MAX_ENC_PRESET(目前最大 13)范围内--profile
:最大允许 2--pass >0 --fast-decode 1
:多遍编码不支持低延迟模式--buf-sz
必须在 20~10000 范围内--buf-initial-sz
必须在 20~10000 范围内,且必须小于最大缓冲区大小--buf-optimal-sz
必须在 20~10000 范围内,且必须小于最大缓冲区大小--overshoot-pct
必须在 0~100 范围内--mbr-overshoot-pct
必须在 0~100 范围内--undershoot-pct
必须在 0~100 范围内--tbr
必须在 0~100000 Kbps 范围内--mbr
必须在 0~100000 Kbps 范围内-w
必须小于或等于 16384-h
必须小于或等于 8704--forced-maximum-frame-width
必须至少为 4,且小于或等于 16384--forced-maximum-frame-height
必须至少为 4,且小于或等于 8704--level
必须在 2.0~7.3 范围内--qp
必须在 0~MAX_QP_VALUE 范围内--hierarchical-levels
:必须在 0~5 范围内--keyint
必须在 -2~2^31-2 范围内--irefresh-type
必须在 1~2 范围内--fps
:最大允许 240,且必须大于 0 fps--fps-num
,--fps-denom
必须大于 0--recode-loop
必须在 0~4 范围内--rc
必须在 0~2 范围内--lookahead
必须在 0~MAX_LAD 范围内--tile rows --tile-columns
必须在 0~6 范围内--tile-columns
最大为 16--max-qp
必须在 1, MAX_QP_VALUE 范围内--min-qp
必须在 1, MAX_QP_VALUE-1 范围内,且必须小于 --max-qp
--use-fixed-qindex-offsets
必须在 0~2 范围内--key-frame-qindex-offset
必须在 -64~63 范围内--qindex-offsets
必须在 -64~63 范围内--luma-y-ac-qindex-offset
必须在 -64~63 范围内--luma-y-dc-qindex-offset
必须在 -64~63 范围内--chroma-u-dc-qindex-offset
必须在 -64~63 范围内--chroma-u-ac-qindex-offset
必须在 -64~63 范围内--chroma-v-dc-qindex-offset
必须在 -64~63 范围内--chroma-v-ac-qindex-offset
必须在 -64~63 范围内--startup-qp-offset
必须在 -63~63 范围内--enable-stat-report
必须在 0~1 范围内--enable-restoration
必须在 0~1 范围内--scm
必须在 0~2 范围内--aq-mode
必须在 0~2 范围内--input-depth
必须为 8 或 10--color-format
:仅支持 420--profile
:非 420 颜色格式必须指定使用 1 或 2--asm
:参数值无效--enable-mfmv
必须在 0~1 范围内,-1 表示自动--fast-decode
必须在 0~2 范围内--tune
必须在 0~2 范围内--superres-mode
必须在 SUPERRES_NONE
~SUPERRES_AUTO
范围内--superres-qthres
必须在 MIN_QP_VALUE
~MAX_QP_VALUE
范围内--superres-kf-qthres
必须在 MIN_QP_VALUE
~MAX_QP_VALUE
范围内--superres-kf-denom
必须在 MIN_SUPERRES_DENOM
~MAX_SUPERRES_DENOM
范围内--superres-denom
必须在 MIN_SUPERRES_DENOM
~MAX_SUPERRES_DENOM
范围内--resize-mode
必须在 RESIZE_NONE
~RESIZE_RANDOM_ACCESS
范围内--resize-kf-denom
必须在 MIN_RESIZE_DENOM
~MAX_RESIZE_DENOM
范围内--resize-denom
必须在 MIN_RESIZE_DENOM
~MAX_RESIZE_DENOM
范围内--matrix-coefficients 0
:identity 矩阵格式仅支持 YUV 4:4:4 格式--hierarchical-levels
:仅支持 2~5--pass
必须在 0~2 范围内--film-grain
必须在 0~50 范围内--film-grain-denoise
:必须为 0 或 1--enable-qm
:--qp-max
必须不大于 --qm-max
--startup-mg-size
:支持 0 及 2~4,且必须小于 --hierarchical-levels
--variance-boost-curve
必须在 0 到 2 之间--variance-boost-strength
必须在 1~4 之间--variance-octile
必须在 1~8 之间--tf-strength
必须在 0~4 之间--sharpness
必须在 -7~7 之间对于测试画质这种说不准的伪客观多变量虚拟单位,即曾仕强教授所言“只能对到一定程度、深度,再往深究就错了”。测量画质的方法论即 Image/Video Quality Assessment。IQA、VQA 分为主观、客观,绝对评价、相对评价,全参考、部分参考和无参考。见 百度百科。
主观画质测量指标受到视觉系统差异和认知理解差异拖累,因此需要大量参与者以及耗费大量时间测量和整理数据——需要协调群体完成。相比之下,由于主观评价最能贴近人眼视觉,这类指标成为客观指标的参考依据。客观测试具有结果高度可重复、高效率、无人值守、低成本的优点。当报告图像质量测量结果时,通常使用平均意见分数 Mean opinion score(MOS),或差异 Difference MOS(DMOS)平均意见分数表——以类似星级评价的测量方法(完全看不清~完美),见 videoclarity。VQA 与 IQA 使用了相同的评价体系分类,区别是视频要求观看距离和屏幕尺寸在测试中不变,且不暂停播放。
图:VQA 测试。见香港大学 IVP Lab
只涉及人类观察者的人眼视觉系统 Human visual system(HVS),分为外行评价者与内行评价者的测量方法。
借助反映人眼感知的算法,给出数学计算推导结果。
有损视频压缩必然会根据信息的动态强度而应用不同程度的量化,并在偏动态的画面中产生相比偏静态画面更多的“暂停时可见失真”;而另一方面,类似于观众对画质理解的差异,不同画质指标对于这种失真的“接受度”不同。基于图像的画质评价算法与“暂停观看评价”(图像序列逐帧对比)一致,所以必然会得出与基于视频的画质评价算法差异较大的分数。为了减少这种差异,测试环节就必然需要同时测量出“暂停观看评价”与“播放观看评价”两种指标,以保证合理性。
评价画质的指标五花八门,想要对这些指标进行优劣排序,就需要找出他们各自与主观指标数据的相关性,越高越好。
基于数据的大小排序,并将顺序本身作为参数,而衡量两排可能相关变量间的相关度。
\[\rho = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)}\] \[ \sum d_i^2 = \sum_{i=1}^n (\text{rank}(x_i) - \text{rank}(y_i))^2 \]这种评价方法忽略了数据大小,而是将每个数据都看成顺序,所以是单调指标、不是线性指标。
找出两个连续变量之间的线性相关性,例如身高与体重的相关性:
\[r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2 \sum (y_i - \bar{y})^2}}\]图:Spearman 等级相关系数(SROCC)所反映的指标相关性。见MSU Graphics Lab
图:Pearson 线性相关系数(PLCC)所反映的指标相关性,对理解视频画质指标的效益起到辅助作用。
SROCC | PSNR | SSIM | MS-SSIM | VMAF | WPSNR | XPSNR |
---|---|---|---|---|---|---|
参考 | 0.860 | 0.949 | 0.925 | 0.915 | 0.939 | 0.935 |
参考 | 0.523 | 0.694 | 0.732 | 0.752 | 0.605 | 0.675 |
参考 | 0.647 | 0.635 | 0.574 | 0.580 | 0.690 | 0.709 |
ECV | 0.762 | 0.916 | 0.881 | 0.736 | 0.859 | 0.816 |
EVV | 0.764 | 0.908 | 0.911 | 0.874 | 0.905 | 0.926 |
SJTU | 0.739 | 0.807 | 0.799 | 0.791 | 0.814 | 0.877 |
CfP | 0.739 | 0.810 | 0.881 | 0.867 | 0.724 | 0.866 |
参考 | 0.703 | 0.848 | 0.832 | 0.850 | 0.730 | 0.812 |
平均 | 0.717 | 0.821 | 0.817 | 0.796 | 0.783 | 0.827 |
表:XPSNR 论文 中使用 Spearman 等级相关系数(SROCC)所测量反映的指标相关性(数据仅供参考)。
PLCC | PSNR | SSIM | MS-SSIM | VMAF | WPSNR | XPSNR |
---|---|---|---|---|---|---|
参考 | 0.822 | 0.789 | 0.765 | 0.942 | 0.916 | 0.919 |
参考 | 0.539 | 0.626 | 0.675 | 0.729 | 0.637 | 0.702 |
参考 | 0.632 | 0.570 | 0.546 | 0.591 | 0.686 | 0.707 |
ECV | 0.733 | 0.879 | 0.853 | 0.830 | 0.848 | 0.784 |
EVV | 0.727 | 0.881 | 0.874 | 0.937 | 0.880 | 0.897 |
SJTU | 0.721 | 0.765 | 0.810 | 0.827 | 0.783 | 0.829 |
CfP | 0.717 | 0.794 | 0.743 | 0.862 | 0.692 | 0.863 |
参考 | 0.722 | 0.826 | 0.799 | 0.855 | 0.759 | 0.818 |
平均 | 0.702 | 0.766 | 0.758 | 0.822 | 0.775 | 0.815 |
表:XPSNR 论文 中使用 Pearson 线性相关系数(PLCC)所反映的指标相关性(数据仅供参考)。
基于均方差(MSE)衡量两张图像于像素级别的相似性,强调最大信号与噪声间的比值作为画质的全参考指标。PSNR 的优点有计算简单快速、被广泛使用于评价压缩失真。
\[ \text{PSNR} = 10 \log_{10} \left( \frac{2^{N}-1}{\text{MSE}} \right) \]\[ \text{PSNR}_{8\text{bit}} = 10 \log_{10} \left( \frac{2^{8\text{bit}}-1}{\text{MSE}} \right) \]\[ \text{MSE} = \frac{1}{n^2}\sum_{x=0}^{n-1}\sum_{y=0}^{n-1} \left| f(x,y) - f^\prime(x,y) \right|^2 \]PSNR 是目前最常用的指标,但在设计上仅统计客观差距,而不考虑感知差距。见 MSU Graphics Lab。
图:PSNR 看不出的各种感知性失真画面(GT 为原图)。见MSU Graphics Lab
衡量两张数字图像的亮度是否一致、对比度是否一致、以及结构上呈正相关性程度的全参考指标,见维基百科和 Medium.com。计算量略高于 PSNR,但也补充了 PSNR 所忽视的感知质量评价。SSIM 分数的取值范围因算法而异,但主流范围中取值在 -1~1 之间(并限制到 0~1 范围):
\[ \text{SSIM}\left(x,y\right) = \frac{(2\mu_x \mu_y + C_1)(2\sigma_{xy} + C_2)} {(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)} \](1/2)SSIM 的统计过程
图:内容不同的图片比失真结果拥有更高的 SSIM 分数。见MSU Graphics Lab
MS-SSIM 是对传统 SSIM 的扩展改进,并与 SSIM 一样是全参考指标。两者具体区别在于 MS-SSIM 会在不同的分辨率(通常为每次缩小 2 倍)迭代计算 SSIM,并确定每个分辨率的权重,最后通过权重将各个分辨率的得分整合,从而更贴近 HVS 的感知。这种“多尺度分析”使得 MS-SSIM 在不同分辨率下的比较更客观,而且额外计算成本较低,实现了比 SSIM 和 PSNR 更准确的感知质量计算。
一种结合了主观绝对评价、客观全参考指标、以及客观部分参考指标的多模型体系,考虑到 HVS 对于失真的判断与处理特性,并结合了机器学习模型与传统算法的部分参考加全参考指标。分数取值范围为 0~100。该算法内部机制较为复杂,本文略,详见 Netflix Tech Blog。
人眼所看到的图像是经过大脑后期处理的失真画面;例如视觉掩蔽效应、对高低频细节的敏感度不同、对不同对比度下的敏感度不同、对色度和亮度变化的感知不同等等。因此,将原图直接与失真图像做对比的评价是不能准确反应感知失真程度的,而是应该训练一种模拟 HVS 的机器学习滤镜,然后将原图与失真图像都提取出特征,再使用支持向量机进行融合预测,才能用于比较。
VMAF 所用到的具体评估方法有:
通过使用分块加权改变 MSE 的统计结果而改良的 PSNR 指标,见 WPSNR 论文,XPSNR 论文
XPSNR 将帧率算作感知活动范围的参数之一,并使用帧间 FIR 滤镜帧间高频信息(\(\text{HighFrequency}_{\text{Temporal}_i}\)),从而能比 WPSNR 更能准确反应视频画质。根据源论文,这种方案虽然不精确,但优点在于简单易算。
由于涉及视频帧时间基对齐问题,所以例子见下方版块。由于 ffmpeg XPSNR 运行时会持续打印信息,所以在区分并行的 CMD 窗口上可以使用 title 命令做标记。
将 dB 直接转换为线性会出现分数指数级增减,导致得分还是和 dB 一样不直观的问题,因此这里将 10~50 dB 的范围直接映射到 0~100 分的得分区间实现。这种方式虽然没有考虑 10bit 下的算法区别,但 XPSNR 在计算时已经统计了这一部分,因此这种映射法的失真不会特别离谱,而是类似于观察 dB 值的主观结果。此方法最终没有使用,但此处的优良分级将会被测试环节沿用。
param(
[Parameter(Position=0, Mandatory=$true)][double]$XPSNR_dB
)
# 10 dB 映射为 0 分,50 dB 映射为 100 分
$minDB = 10
$maxDB = 50
if ($XPSNR_dB -le $minDB) { return 0 }
elseif ($XPSNR_dB -ge $maxDB) { return 100 }
else { return (($XPSNR_dB - $minDB) / ($maxDB - $minDB)) * 100 }
<#
0
0
25
50
75
100
#>
param(
[Parameter(Position=0, Mandatory=$true, ValueFromRemainingArguments = $true)][double[]]$XPSNR_dB
)
# 10 dB 映射为 0 分,50 dB 映射为 100 分
$minDB = 10
$maxDB = 50
foreach ($db in $XPSNR_dB) {
if ($db -le $minDB) { $score = 0 }
elseif ($db -ge $maxDB) { $score = 100 }
else { $score = (($db - $minDB) / ($maxDB - $minDB)) * 100 }
# 遍历输出结果
[PSCustomObject]@{
InputValue = $db
Score = $score
}
}
<#
# 同时计算 Y、Cb、Cr 得分
InputValue Score
---------- -----
39.7625 74.40625
45.8456 89.614
45.8868 89.717
#>
一种对 MS-SSIM、DSSIM 的改进,被用于 JPEG-XL。全拼为 Structural similarity unveiling local & compression related artifacts。其特点在于对失真的统计方法上除了沿用 MS-SSIM 的多分辨率迭代,还通过生成亮度、色度失真热度图以避免直接将失真计做一项平均值,并且结合了块失真、边缘失真(蚊噪、振铃)识别以更准确的反应画质分数。见 Cloudinary。
失真热度图分为 SSIM 图、块失真振铃图、平滑模糊图 3 种。这些图分别以 6 种分辨率比例(1:1~1:32)对 X、Y、B 平面识别和累积得到共 3×6×3=54 张热度图。从中统计出 1-norm 和 4-norm 两值,共 108 个范数,通过加权求和得到最终的评分。权重由多种主观指标(CID22、TID2013、Kadid10k、KonFiG-IQA)对多种图像编码结果(JPEG、JPEG 2000、JPEG XL、WebP、AVIF、HEIC),以及人工添加失真的结果对比得到,见 GitHub/cloudinary;第三方对比结果见 jon-cld。
1-范数(L1)即所有差异的线性和:
\[ L_1 = \|e\|_1 = \sum_i \left|e_i\right| \]4-范数(L4)先对误差取 4 次幂,再求和,最后开 4 次根——局部失真对整体分数的影响更大:
\[ L_4 = \|e\|_4 = \sqrt[4]{\sum_i \left|e_i\right|^4} \]HVS 感知失真的程度与失真像素的“影响力”有关,因此使用范数来描述画质得分相比直接统计差异要准确。在范数函数中,范数越大则局部误差的影响力越强,因而具有统计影响力的性质。
magick identify -verbose .\image.png
,得到一行如“Colorspace: sRGB”的指标magick .\lack-icc.png -profile sRGBv2.icc .\icc_embedded.png
magick identify -verbose .\image.png | findstr -i "Profile-icc"
,成功则得到:Profile-icc: 3024 bytes
# 将 Image Magick 添加到环境变量,Image Magick 路径添加到环境变量中的 PATH 序列
# PowerShell 批量将 sRGB 图片嵌入 sRGB ICC 配置,并禁止 Magick 自动将图片转换为灰阶
# 指定不转换:在导出部分添加前缀,如 PNG24:output.png
$sRGBv2ICC = ".\sRGBv2.icc";
$imageCount = 3; # 填写图片数量 + 1
for ($i = 1; $i -le $imageCount - 1; $i++) {
$source = (".\frame{0:D4}.png" -f $i)
$embedded = (".\frame{0:D4}.png" -f $i)
magick $source +profile icc -profile $sRGBv2ICC PNG24:$embedded
if ($i % 100 -eq 0) { Write-Host "Conversion index: " $i }
}
# 如果 Magick CRC 报错的图像代表 Image2 没弄好,则手动通过该 CMD 命令重做(例如第 9774 帧损坏):
# ffmpeg -y -i .\源视频.mp4 -vf select='eq(n,9774)' -vframes 1 -f image2 .\frame9774.png
# 然后手动在另一个 PowerShell 窗口里运行该命令以嵌入 ICC 配置
# $sRGBv2ICC = ".\sRGBv2.icc"
# $source = .\frame9774.png
# $embedded = .\frame9774.png
# magick $source +profile icc -profile $sRGBv2ICC PNG24:$embedded
# 最后通过 SSIMULACRA 对比原图和失真图像并累计平均值:
$value = 0.000000000;
$frames = 14316;
for ($i=1; $i -le $frames; $i++) {
$source = (".\frame{0:D4}.png" -f $i)
$encoded = (".\frame{0:D4}.png" -f $i)
$value += .\ssimulacra2.exe $source $encoded 2>$null
if ($i % 100 -eq 0) {
"Index: " + $i + ", Current: " + $value + ", Avg: " + $value/$i;
}
}
"Index: " + $frames + ", Total: " + $value + ", Avg: " + $value/$frames;
ffmpeg -i .\源.mkv -vf select='eq(n,1859)' -vframes 1 -f image2 .\frame1859.png
由于行不通,所以本教程的原测试结果全部更换为 ssimulacra_rs(内置 VapourSynth LSMASH 视频解码器)跑分。
Guetzli JPEG 编码器内置的心理视觉优化算法,使用 XYB 色彩空间、滑动窗口统计、图像频段分解(通过模糊卷积处理拆分出高低频,模拟 HVS 对不同频段的感知)、2-norm(欧几里得距离)差异热度图累计等计算。
Butteraugli 结合了上述的多种算法思路(在滑动窗口、差异热度图上类似于 SSIMULACRA),还实现了分频段统计失真范围、以及在色度平面按照 HVS 感知质量的不同拆分权重,因此是本篇所录入指标中最先进的一种。见 github.com/google。
如上所述,SSIMULACRA 2.1、VMAF、XPSNR 三项指标能够可靠的反应画质。两者的优势包括客观全参考、SROCC 与 PLCC 等级相关系数大于等于 0.9、算法思路清晰、拥有测试数据支持、支持 10bit 位深、代码开源、结果易复现等。
编码器通过在 SVT-AV1 官方 GitLab 仓库下载(2025 年 3 月),据 官方说明(Visual Studio 2022、CMake、NASM)编译得到。视频源选择方面,应该查找编码难度偏高(高时域、空域复杂度),而不是任何编码器都擅长的视频源。
编译优化方面,更好的编译方案可以提高程序的运行性能,但这相当于一个一般用户不易获得的待测试变量,因此在测试上,本教程必须使用最短方法编译 SVT-AV1。
在尽可能贴近官方推荐用法上尝试微调,以及开启一些默认关闭的功能。所有项目必须一直使用 CRF 30(中)、35(中高)两个强度、较长的 12 秒关键帧间隔、以及对应 x265 slow/veryslow 预设的 Preset 3,从而使得各种待测试的功能有一定的发力空间,并对应 x265 的 CRF 18、22。在实际使用中,这些值可以根据视频内容的复杂度略微或大幅降低,以满足更苛刻的画质、解码性能等需求。
--tune
参数值(默认为 PSNR)使用 x264、x265 的编码结果作为对照组,对照组使用 CRF 18、20(画质好于默认、略好于默认)。对动画片源使用 x265 教程急用版的动画预设、对录像片源使用 x254 教程急用版的电影预设。
避免使用不满足条件的源、并将所有源的格式统一,以达到可靠的测试条件。
测试条件虽较为简陋,但编码时未遇到内存和硬盘 IO 瓶颈,因此尽管同 CPU 电脑的编码速度可能无法达到精准,但不同编码测试之间的速度差异不受影响。
ffmpeg -i .\SolLevante_HDR10_r2020_ST2084_UHD_24fps_1000nit.mov
-vf "format=yuv444p12le,
zscale=rin=tv:r=full:tin=smpte2084:min=bt2020nc:pin=bt2020,
zscale=transfer=linear,tonemap=hable:desat=3:peak=1000,
zscale=transfer=bt709:matrix=bt709:primaries=bt709,
format=yuv420p10le"
-color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:v rawvideo -pix_fmt yuv420p10le -strict experimental
.\SolLevante_yuv444p10le_bt709.yuv
由于 SSIMULACRA2_rs 只能使用 LSMAS 解码,而 LSMAS 解码不支持 .yuv
文件,因此这些源需要经过加工才能使用(当然为了数据可靠,曾经完成的测试也一并要重做),如:
ffmpeg -i .\SolLevante_HDR10_r2020_ST2084_UHD_24fps_1000nit.mov ^
-vf "format=yuv444p12le,
zscale=rin=tv:r=full:tin=smpte2084:min=bt2020nc:pin=bt2020,
zscale=transfer=linear,tonemap=hable:desat=3:peak=1000,
zscale=transfer=bt709:matrix=bt709:primaries=bt709,
format=yuv420p10le" ^
-color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:v rawvideo -pix_fmt yuv420p10le -strict experimental ^
-c:v ffv1 -context 1 -level 3 -g 1 ^
-c:a copy ^
.\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le_1.mkv
[ffv1 @ 000002d8a6eecac0] high bits_per_raw_sample, forcing range coder
Output #0, matroska, to '.\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv':
Metadata:
encoder : Lavf61.9.107
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv420p10le(tv, bt709, progressive), 3840x2160, q=2-31, 200 kb/s, 24 fps, 1k tbn
Metadata:
encoder : Lavc61.33.102 ffv1
[out#0/matroska @ 000002d8a6efda80] video:28020018KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.001075%
frame= 6314 fps=6.6 q=-0.0 Lsize=28020319KiB time=00:04:23.08 bitrate=872508.5kbits/s speed=0.274x
对于 LSMAS 不认识的 RGB 色彩空间,需要在源上预先转换到 yuv420p:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_rgb.video+audio.mkv ^
-pix_fmt yuv420p ^
-c:v ffv1 -context 1 -level 3 -g 1 ^
-c:a copy ^
.\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv
测试栏目中,数据会以编码参数 + 部分编码信息 + 画质指标信息的方式呈现。部分编码信息记录速度和码率,画质指标信息记录各种画质指标检测的结果,分别为:
注:如果衡量标准是以手机观看,则应将以上要求降低至少一个等级,如达标→良好。
使用 ffmpeg 测试 XPSNR、VMAF 时,源和编码结果的帧率虽然一样,但时间基 Time Base 可能完全不同,导致一些匪夷所思的跑分,以及“三帧烂一帧”的规律。使用 ffprobe -v debug -show_streams .\视频.mkv
命令可以看出,FFV1 time_base = 1/1000; SVT-AV1 time_base = 1/24,因此在测试的命令中添加手动对齐命令是有必要的。
XPSNR + VF-FPS + VF-SetPTS:手动提供视频帧率到 24fps,手动指定 setpts 到两个 time_base 的积(1/1000 * 1/24 = 1/24000):
ffmpeg -i .\源视频.mkv ^
-i .\压缩后.ivf" ^
-lavfi "[0:v]setpts=N*(1/24000)[src]; [1:v]setpts=N*(1/24000)[enc]; [src][enc]xpsnr=stats_file=-" ^
-f null -
注:不精确指定 setpts 不会导致分数统计错误,但可以避免 ffmpeg 产生大量的“DTS 未单调增加”报错。
VMAF + VF-FPS + VF-SetPTS:手动提供分辨率以及帧率,手动指定时间基:
ffmpeg -i .\源视频.mkv ^
-i .\压缩后.ivf" ^
-lavfi "[0:v]setpts=N*(1/24000)[src]; [1:v]setpts=N*(1/24000)[enc]; [src][enc]libvmaf=model=version=vmaf_v0.6.1\\:name=vmaf_1080p|version=vmaf_4k_v0.6.1\\:name=vmaf_4k" ^
-f null -
--crf 22
:
x265 --profile main10 --high-tier --tu-intra-depth 4 --tu-inter-depth 4 --max-tu-size 16 --tskip --tskip-fast --me umh --subme 3 --merange 56 --weightb --max-merge 5 --early-skip --ref 3 --no-open-gop --min-keyint 5 --keyint 288 --fades --bframes 16 --b-adapt 2 --bframe-bias 20 --constrained-intra --b-intra --crf 22 --crqpoffs -4 --cbqpoffs -2 --ipratio 1.6 --pbratio 1.3 --cu-lossless --psy-rdoq 2.3 --rdoq-level 2 --hevc-aq --aq-strength 0.9 --qg-size 8 --rd 3 --limit-modes --limit-refs 1 --rskip 1 --rc-lookahead 60 --rect --amp --psy-rd 1.5 --splitrd-skip --rdpenalty 2 --deblock -1:0 --limit-sao --sao-non-deblock --input .\SolLevante_yuv420p10le_bt709.yuv --input-depth 10 --input-res 3840x2160 --input-csp i420 --fps 24 --output .\SolLevante_yuv420p10le_bt709_crf22.hevc
x265 [INFO]: frame I: 67, Avg QP:25.05 kb/s: 50564.78 MB [647.82 MB]
x265 [INFO]: frame P: 1583, Avg QP:26.23 kb/s: 30733.05
x265 [INFO]: frame B: 4664, Avg QP:30.13 kb/s: 15442.59
x265 [INFO]: Weighted P-Frames: Y:5.3% UV:3.3%
x265 [INFO]: Weighted B-Frames: Y:10.9% UV:6.1%
encoded 6314 frames in 2322.18s (2.72 fps), 19648.80 kb/s, Avg QP:29.10
XPSNR average, 6314 frames y: 20.9812 u: 38.0531 v: 35.0405 (minimum: 20.9812)
VMAF 4k: 98.125428, VMAF 1080p: 96.795521
SSIMULACRA2_rs: Mean: 55.88148851 Median: 52.56807147 Std Dev: 34.29008946 5th Percentile: -2.62235865 95th Percentile: 100.00000000
--crf 18
:
x265 --profile main10 --high-tier --tu-intra-depth 4 --tu-inter-depth 4 --max-tu-size 16 --tskip --tskip-fast --me umh --subme 3 --merange 56 --weightb --max-merge 5 --early-skip --ref 3 --no-open-gop --min-keyint 5 --keyint 288 --fades --bframes 16 --b-adapt 2 --bframe-bias 20 --constrained-intra --b-intra --crf 18 --crqpoffs -4 --cbqpoffs -2 --ipratio 1.6 --pbratio 1.3 --cu-lossless --psy-rdoq 2.3 --rdoq-level 2 --hevc-aq --aq-strength 0.9 --qg-size 8 --rd 3 --limit-modes --limit-refs 1 --rskip 1 --rc-lookahead 60 --rect --amp --psy-rd 1.5 --splitrd-skip --rdpenalty 2 --deblock -1:0 --limit-sao --sao-non-deblock --input .\SolLevante_yuv420p10le_bt709.yuv --input-depth 10 --input-res 3840x2160 --input-csp i420 --fps 24 --output .\SolLevante_yuv420p10le_bt709_crf18.hevc
x265 [INFO]: frame I: 67, Avg QP:21.04 kb/s: 78567.86 MB [1082.8 MB]
x265 [INFO]: frame P: 1583, Avg QP:21.97 kb/s: 49405.12
x265 [INFO]: frame B: 4664, Avg QP:26.06 kb/s: 26591.04
x265 [INFO]: Weighted P-Frames: Y:5.3% UV:3.3%
x265 [INFO]: Weighted B-Frames: Y:10.9% UV:6.1%
encoded 6314 frames in 2636.64s (2.39 fps), 32862.36 kb/s, Avg QP:24.98
XPSNR average, 6314 frames y: 21.0524 u: 38.4039 v: 35.2750 (minimum: 21.0524)
VMAF 4k: 98.951545, VMAF 1080p: 98.200316
SSIMULACRA2_rs: Mean: 68.87327380 Median: 67.24602694 Std Dev: 23.64012811 5th Percentile: 28.23977369 95th Percentile: 99.82971151
--crf 22
:
ffmpeg -y -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -c:v libx265 -pix_fmt yuv420p10le -profile:v main10 -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=5:merange=56:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=216:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=22:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1.1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=43:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Netflix_Boat_10bit_420_crf22.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p10le(tv, bt709, progressive), 4096x2160 [SAR 1:1 DAR 256:135], q=2-31, 60 fps, 15360 tbn (default)
Metadata:
encoder : Lavc61.31.100 libx265
DURATION : 00:00:05.000000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 000001d15db09f80] video:19026KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.037869%
frame= 300 fps=2.0 q=35.5 Lsize= 19034KiB time=00:00:04.96 bitrate=31394.1kbits/s speed=0.0339x
x265 [info]: frame I: 2, Avg QP:25.41 kb/s: 270732.48
x265 [info]: frame P: 71, Avg QP:25.97 kb/s: 98330.85
x265 [info]: frame B: 227, Avg QP:34.84 kb/s: 8054.49
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
x265 [info]: Weighted B-Frames: Y:0.0% UV:0.0%
encoded 300 frames in 145.91s (2.06 fps), 31171.09 kb/s, Avg QP:32.67
XPSNR average, 300 frames y: 40.5607 u: 42.9254 v: 45.6857 (minimum: 40.5607)
VMAF 4k: 77.612357, VMAF 1080p: 68.300762
SSIMULACRA2_rs: Mean: 64.77780339 Median: 63.91098240 Std Dev: 3.68027547 5th Percentile: 60.04055450 95th Percentile: 71.22150529
--crf 18
:
ffmpeg -y -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -c:v libx265 -pix_fmt yuv420p10le -profile:v main10 -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=5:merange=56:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=216:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=18:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1.1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=43:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Netflix_Boat_10bit_420_crf18.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p10le(tv, bt709, progressive), 4096x2160 [SAR 1:1 DAR 256:135], q=2-31, 60 fps, 15360 tbn (default)
Metadata:
encoder : Lavc61.31.100 libx265
DURATION : 00:00:05.000000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 000002bbab409f80] video:37130KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.020100%
frame= 300 fps=1.5 q=31.7 Lsize= 37137KiB time=00:00:04.96 bitrate=61253.8kbits/s speed=0.0255x
x265 [info]: frame I: 2, Avg QP:21.42 kb/s: 407498.16
x265 [info]: frame P: 71, Avg QP:21.61 kb/s: 195279.65
x265 [info]: frame B: 227, Avg QP:30.87 kb/s: 15724.78
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
x265 [info]: Weighted B-Frames: Y:0.0% UV:0.0%
encoded 300 frames in 194.19s (1.54 fps), 60831.26 kb/s, Avg QP:28.61
XPSNR average, 300 frames y: 42.0499 u: 44.8382 v: 47.8922 (minimum: 42.0499)
VMAF 4k: 78.668415, VMAF 1080p: 69.732866
SSIMULACRA2_rs: Mean: 73.25259644 Median: 71.55939769 Std Dev: 3.68909897 5th Percentile: 69.44349186 95th Percentile: 79.86377007
--crf 22
:
ffmpeg -y -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -c:v libx265 -pix_fmt yuv420p10le -profile:v main10 -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=5:merange=56:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=540:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=22:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1.1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=108:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Netflix_WindAndNature_10bit_420_crf22.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p10le(tv, bt709, progressive), 4096x2160 [SAR 1:1 DAR 256:135], q=2-31, 60 fps, 15360 tbn (default)
Metadata:
encoder : Lavc61.31.100 libx265
DURATION : 00:00:19.984000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 0000020fd5c5c980] video:25550KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.056499%
frame= 1199 fps=2.5 q=33.1 Lsize= 25564KiB time=00:00:19.95 bitrate=10497.4kbits/s speed=0.0422x
x265 [info]: frame I: 3, Avg QP:26.66 kb/s: 90267.84
x265 [info]: frame P: 159, Avg QP:25.88 kb/s: 39593.85
x265 [info]: frame B: 1037, Avg QP:32.70 kb/s: 5776.06
x265 [info]: Weighted P-Frames: Y:22.6% UV:22.6%
x265 [info]: Weighted B-Frames: Y:6.8% UV:4.1%
encoded 1199 frames in 472.65s (2.54 fps), 10472.07 kb/s, Avg QP:31.78
XPSNR average, 1199 frames y: 39.8871 u: 42.1991 v: 42.3623 (minimum: 39.8871)
VMAF 4k: 91.383935, VMAF 1080p: 85.874477
SSIMULACRA2_rs: Mean: 61.03782816 Median: 62.22680342 Std Dev: 4.47912982 5th Percentile: 53.49027011 95th Percentile: 68.77075281
--crf 18
:
ffmpeg -y -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -c:v libx265 -pix_fmt yuv420p10le -profile:v main10 -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=5:merange=56:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=540:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=18:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1.1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=108:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Netflix_WindAndNature_10bit_420_crf18.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p10le(tv, bt709, progressive), 4096x2160 [SAR 1:1 DAR 256:135], q=2-31, 60 fps, 15360 tbn (default)
Metadata:
encoder : Lavc61.31.100 libx265
DURATION : 00:00:19.984000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 00000251debbc980] video:52111KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.028151%
frame= 1199 fps=2.1 q=28.5 Lsize= 52126KiB time=00:00:19.95 bitrate=21404.3kbits/s speed=0.0345x
x265 [info]: frame I: 3, Avg QP:22.65 kb/s: 142820.32
x265 [info]: frame P: 159, Avg QP:21.83 kb/s: 87918.92
x265 [info]: frame B: 1037, Avg QP:28.39 kb/s: 10804.12
x265 [info]: Weighted P-Frames: Y:22.6% UV:22.6%
x265 [info]: Weighted B-Frames: Y:6.8% UV:4.1%
encoded 1199 frames in 578.40s (2.07 fps), 21360.67 kb/s, Avg QP:27.50
XPSNR average, 1199 frames y: 40.9048 u: 43.5395 v: 43.4034 (minimum: 40.9048)
VMAF 4k: 92.753515, VMAF 1080p: 87.722631
SSIMULACRA2_rs: Mean: 68.23241143 Median: 68.96018756 Std Dev: 4.54572816 5th Percentile: 61.08936644 95th Percentile: 76.03682341
--crf 22
:
ffmpeg -y -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -c:v libx265 -profile:v main10 -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=3:merange=48:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=216:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=22:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=44:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf22.mp4
Metadata:
encoder : Lavf61.9.107
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080, q=2-31, 24 fps, 12288 tbn (default)
Metadata:
encoder : Lavc61.33.102 libx265
DURATION : 00:09:56.459000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: flac (fLaC / 0x43614C66), 48000 Hz, 5.1, s32 (24 bit) (default)
Metadata:
DURATION : 00:09:56.461000000
[out#0/mp4 @ 000002a1ef83ae40] video:188010KiB audio:223380KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.067803%
frame=14315 fps=8.5 q=27.8 Lsize= 411669KiB time=00:09:56.37 bitrate=5654.8kbits/s speed=0.354x
x265 [info]: frame I: 166, Avg QP:22.74 kb/s: 23021.68
x265 [info]: frame P: 3342, Avg QP:22.79 kb/s: 7557.41
x265 [info]: frame B: 10807, Avg QP:30.21 kb/s: 728.68
x265 [info]: Weighted P-Frames: Y:5.4% UV:2.2%
x265 [info]: Weighted B-Frames: Y:3.0% UV:0.9%
encoded 14315 frames in 1686.80s (8.49 fps), 2581.44 kb/s, Avg QP:28.39
XPSNR average, 14315 frames y: 33.3283 u: 40.1929 v: 41.3772 (minimum: 33.3283)
VMAF 4k: 87.920378, VMAF 1080p: 82.474976
SSIMULACRA2_rs: Mean: 77.79793375 Median: 78.10156956 Std Dev: 4.87145655 5th Percentile: 69.98188935 95th Percentile: 83.80652456
--crf 18
:
ffmpeg -y -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -c:v libx265 -profile:v main10 -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=3:merange=48:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=216:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=18:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=44:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf18.mp4
Metadata:
encoder : Lavf61.9.107
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080, q=2-31, 24 fps, 12288 tbn (default)
Metadata:
encoder : Lavc61.33.102 libx265
DURATION : 00:09:56.459000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: flac (fLaC / 0x43614C66), 48000 Hz, 5.1, s32 (24 bit) (default)
Metadata:
DURATION : 00:09:56.461000000
[out#0/mp4 @ 000001af7844ae40] video:315671KiB audio:223380KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.051745%
frame=14315 fps=6.7 q=23.8 Lsize= 539330KiB time=00:09:56.37 bitrate=7408.4kbits/s speed=0.278x
x265 [info]: frame I: 166, Avg QP:18.73 kb/s: 33599.27
x265 [info]: frame P: 3342, Avg QP:18.64 kb/s: 12503.49
x265 [info]: frame B: 10807, Avg QP:26.18 kb/s: 1359.15
x265 [info]: Weighted P-Frames: Y:5.4% UV:2.2%
x265 [info]: Weighted B-Frames: Y:3.0% UV:0.9%
encoded 14315 frames in 2144.46s (6.68 fps), 4334.79 kb/s, Avg QP:24.33
XPSNR average, 14315 frames y: 33.8165 u: 41.3520 v: 42.3812 (minimum: 33.8165)
VMAF 4k: 88.496245, VMAF 1080p: 83.188079
SSIMULACRA2_rs: Mean: 83.24602058 Median: 83.40918464 Std Dev: 3.43829355 5th Percentile: 78.01967156 95th Percentile: 87.57657407
--crf 22
:
ffmpeg -y -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -c:v libx265 -profile:v main -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=3:merange=48:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=216:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=22:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=44:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf22.mp4
Metadata:
encoder : Lavf61.9.107
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080, q=2-31, 24 fps, 12288 tbn (default)
Metadata:
encoder : Lavc61.33.102 libx265
DURATION : 00:10:53.792000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: flac (fLaC / 0x43614C66), 48000 Hz, 5.1, s32 (24 bit) (default)
Metadata:
ENCODER : Lavc58.84.100 flac
DURATION : 00:10:58.080000000
[out#0/mp4 @ 0000023a9d84c880] video:242759KiB audio:240232KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.063693%
frame=15691 fps=7.7 q=31.0 Lsize= 483299KiB time=00:10:53.70 bitrate=6056.5kbits/s speed=0.322x
x265 [info]: frame I: 166, Avg QP:23.38 kb/s: 14373.24
x265 [info]: frame P: 4279, Avg QP:23.62 kb/s: 6880.26
x265 [info]: frame B: 11246, Avg QP:29.96 kb/s: 1412.92
x265 [info]: Weighted P-Frames: Y:6.9% UV:1.9%
x265 [info]: Weighted B-Frames: Y:5.7% UV:1.0%
encoded 15691 frames in 2028.92s (7.73 fps), 3041.00 kb/s, Avg QP:28.16
XPSNR average, 15691 frames y: 32.7897 u: 44.5506 v: 44.2398 (minimum: 32.7897)
VMAF 4k: 83.679159, 77.135198
SSIMULACRA2_rs: Mean: 77.79793375 Median: 78.10156956 Std Dev: 4.87145655 5th Percentile: 69.98188935 95th Percentile: 83.80652456
--crf 18
:
ffmpeg -y -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -c:v libx265 -profile:v main -x265-params "high-tier=1:ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:rect=1:tskip=1:tskip-fast=1:me=star:subme=3:merange=48:weightb=1:ref=4:max-merge=5:open-gop=0:min-keyint=3:keyint=216:fades=1:bframes=8:b-adapt=2:analyze-src-pics=1:b-intra=1:crf=18:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1:qg-size=8:rd=5:limit-refs=0:rskip=0:rc-lookahead=44:psy-rd=1.6:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3" -fps_mode passthrough -c:a copy .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf18.mp4
Metadata:
encoder : Lavf61.9.107
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080, q=2-31, 24 fps, 12288 tbn (default)
Metadata:
encoder : Lavc61.33.102 libx265
DURATION : 00:10:53.792000000
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: flac (fLaC / 0x43614C66), 48000 Hz, 5.1, s32 (24 bit) (default)
Metadata:
ENCODER : Lavc58.84.100 flac
DURATION : 00:10:58.080000000
[out#0/mp4 @ 00000192244e6100] video:408715KiB audio:240232KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.047404%
frame=15691 fps=6.1 q=27.0 Lsize= 649255KiB time=00:10:53.70 bitrate=8136.2kbits/s speed=0.254x
x265 [info]: frame I: 166, Avg QP:19.38 kb/s: 21604.46
x265 [info]: frame P: 4279, Avg QP:19.55 kb/s: 11078.26
x265 [info]: frame B: 11246, Avg QP:25.87 kb/s: 2610.21
x265 [info]: Weighted P-Frames: Y:6.9% UV:1.9%
x265 [info]: Weighted B-Frames: Y:5.7% UV:1.0%
encoded 15691 frames in 2569.35s (6.11 fps), 5120.43 kb/s, Avg QP:24.08
XPSNR average, 15691 frames y: 33.2300 u: 45.4838 v: 45.1058 (minimum: 33.2300)
VMAF 4k: 84.281309, VMAF 1080p: 77.912665
SSIMULACRA2_rs: Mean: 83.24602058 Median: 83.40918464 Std Dev: 3.43829355 5th Percentile: 78.01967156 95th Percentile: 87.57657407
--crf 22
:
ffmpeg -y -i .\TestFootage\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -c:v libx265 -pix_fmt yuv420p -profile:v main -x265-params "high-tier=1:tu-intra-depth=4:tu-inter-depth=4:max-tu-size=16:tskip=1:tskip-fast=1:me=umh:subme=3:merange=48:weightb=1:max-merge=5:early-skip=1:ref=3:open-gop=0:min-keyint=5:keyint=288:fades=1:bframes=16:b-adapt=2:bframe-bias=20:b-intra=1:crf=22:crqpoffs=-4:cbqpoffs=-2:ipratio=1.6:pbratio=1.3:cu-lossless=1:psy-rdoq=2.3:rdoq-level=2:hevc-aq=1:aq-strength=0.9:qg-size=8:rd=3:limit-modes=1:limit-refs=1:rskip=1:rc-lookahead=60:rect=1:amp=1:psy-rd=1.5:splitrd-skip=1:rdpenalty=2:deblock=-1,0:limit-sao=1:sao-non-deblock=1" -fps_mode passthrough -an .\MAIDRAGON-S_Vol.3_1920x1080_23.976fps_8bit_420_crf22.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 24k tbn
Metadata:
encoder : Lavc61.31.100 libx265
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 00000176866bf8c0] video:337732KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.108592%
frame=34080 fps= 24 q=26.0 Lsize= 338099KiB time=00:23:41.33 bitrate=1948.7kbits/s speed=0.99x
x265 [info]: frame I: 581, Avg QP:22.14 kb/s: 20863.28
x265 [info]: frame P: 7169, Avg QP:25.13 kb/s: 5719.51
x265 [info]: frame B: 26330, Avg QP:30.79 kb/s: 500.71
x265 [info]: Weighted P-Frames: Y:4.1% UV:2.6%
x265 [info]: Weighted B-Frames: Y:3.2% UV:1.6%
encoded 34080 frames in 1436.25s (23.73 fps), 1945.67 kb/s, Avg QP:29.45
XPSNR average, 34080 frames y: 40.8455 u: 42.8648 v: 43.3141 (minimum: 40.8455)
VMAF 4k: 85.672864, VMAF 1080p: 78.839019
SSIMULACRA2_rs: Mean: 73.91282871 Median: 77.92521321 Std Dev: 12.82405548 5th Percentile: 46.40877591 95th Percentile: 85.66813206
--crf 18
:
ffmpeg -y -i .\TestFootage\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -c:v libx265 -pix_fmt yuv420p -profile:v main -x265-params "high-tier=1:tu-intra-depth=4:tu-inter-depth=4:max-tu-size=16:tskip=1:tskip-fast=1:me=umh:subme=3:merange=48:weightb=1:max-merge=5:early-skip=1:ref=3:open-gop=0:min-keyint=5:keyint=288:fades=1:bframes=16:b-adapt=2:bframe-bias=20:b-intra=1:crf=18:crqpoffs=-4:cbqpoffs=-2:ipratio=1.6:pbratio=1.3:cu-lossless=1:psy-rdoq=2.3:rdoq-level=2:hevc-aq=1:aq-strength=0.9:qg-size=8:rd=3:limit-modes=1:limit-refs=1:rskip=1:rc-lookahead=60:rect=1:amp=1:psy-rd=1.5:splitrd-skip=1:rdpenalty=2:deblock=-1,0:limit-sao=1:sao-non-deblock=1" -fps_mode passthrough -an .\MAIDRAGON-S_Vol.3_1920x1080_23.976fps_8bit_420_crf18.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 24k tbn
Metadata:
encoder : Lavc61.31.100 libx265
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 0000026d75b5f8c0] video:548860KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.067457%
frame=34080 fps= 21 q=22.0 Lsize= 549230KiB time=00:23:41.33 bitrate=3165.5kbits/s speed=0.878x
x265 [info]: frame I: 581, Avg QP:18.15 kb/s: 31412.56
x265 [info]: frame P: 7169, Avg QP:20.72 kb/s: 9317.84
x265 [info]: frame B: 26330, Avg QP:26.75 kb/s: 863.12
x265 [info]: Weighted P-Frames: Y:4.1% UV:2.6%
x265 [info]: Weighted B-Frames: Y:3.2% UV:1.6%
encoded 34080 frames in 1618.34s (21.06 fps), 3162.45 kb/s, Avg QP:25.34
XPSNR average, 34080 frames y: 42.5171 u: 44.2124 v: 44.5470 (minimum: 42.5171)
VMAF 4k: 86.089327, VMAF 1080p: 79.410981
SSIMULACRA2_rs: Mean: 80.15751958 Median: 82.75859474 Std Dev: 8.38815893 5th Percentile: 62.41689237 95th Percentile: 88.08307654
--crf 22
:
ffmpeg -y -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -c:v libx265 -pix_fmt yuv420p -profile:v main -x265-params "high-tier=1:tu-intra-depth=4:tu-inter-depth=4:max-tu-size=16:tskip=1:tskip-fast=1:me=umh:subme=3:merange=48:weightb=1:max-merge=5:early-skip=1:ref=3:open-gop=0:min-keyint=5:keyint=288:fades=1:bframes=16:b-adapt=2:bframe-bias=20:b-intra=1:crf=22:crqpoffs=-4:cbqpoffs=-2:ipratio=1.6:pbratio=1.3:cu-lossless=1:psy-rdoq=2.3:rdoq-level=2:hevc-aq=1:aq-strength=0.9:qg-size=8:rd=3:limit-modes=1:limit-refs=1:rskip=1:rc-lookahead=60:rect=1:amp=1:psy-rd=1.5:splitrd-skip=1:rdpenalty=2:deblock=-1,0:limit-sao=1:sao-non-deblock=1" -fps_mode passthrough -an .\氷菓_Vol.4_1920x1080_23.976fps_8bit_420_crf22.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 24k tbn
Metadata:
encoder : Lavc61.31.100 libx265
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 000001c440b205c0] video:156007KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.233448%
frame=36996 fps= 26 q=23.0 Lsize= 156372KiB time=00:25:42.95 bitrate= 830.2kbits/s speed= 1.1x
x265 [info]: frame I: 529, Avg QP:22.55 kb/s: 11556.74
x265 [info]: frame P: 5880, Avg QP:25.49 kb/s: 2907.35
x265 [info]: frame B: 30587, Avg QP:30.09 kb/s: 242.08
x265 [info]: Weighted P-Frames: Y:2.8% UV:1.0%
x265 [info]: Weighted B-Frames: Y:2.7% UV:0.4%
encoded 36996 frames in 1408.71s (26.26 fps), 827.47 kb/s, Avg QP:29.25
XPSNR average, 36996 frames y: 39.3288 u: 42.4070 v: 42.9840 (minimum: 39.3288)
VMAF 4k: 88.251216, VMAF 1080p: 82.140527
SSIMULACRA2_rs: Mean: 74.36000528 Median: 75.52608593 Std Dev: 8.47076723 5th Percentile: 60.49981158 95th Percentile: 83.57375015
--crf 18
:
ffmpeg -y -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -c:v libx265 -pix_fmt yuv420p -profile:v main -x265-params "high-tier=1:tu-intra-depth=4:tu-inter-depth=4:max-tu-size=16:tskip=1:tskip-fast=1:me=umh:subme=3:merange=48:weightb=1:max-merge=5:early-skip=1:ref=3:open-gop=0:min-keyint=5:keyint=288:fades=1:bframes=16:b-adapt=2:bframe-bias=20:b-intra=1:crf=18:crqpoffs=-4:cbqpoffs=-2:ipratio=1.6:pbratio=1.3:cu-lossless=1:psy-rdoq=2.3:rdoq-level=2:hevc-aq=1:aq-strength=0.9:qg-size=8:rd=3:limit-modes=1:limit-refs=1:rskip=1:rc-lookahead=60:rect=1:amp=1:psy-rd=1.5:splitrd-skip=1:rdpenalty=2:deblock=-1,0:limit-sao=1:sao-non-deblock=1" -fps_mode passthrough -an .\氷菓_Vol.4_1920x1080_23.976fps_8bit_420_crf18.mp4
Metadata:
encoder : Lavf61.9.104
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 24k tbn
Metadata:
encoder : Lavc61.31.100 libx265
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 000002bc553d05c0] video:260392KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: 0.140495%
frame=36996 fps= 25 q=19.0 Lsize= 260757KiB time=00:25:42.95 bitrate=1384.4kbits/s speed=1.02x
x265 [info]: frame I: 529, Avg QP:18.62 kb/s: 17690.74
x265 [info]: frame P: 5880, Avg QP:21.03 kb/s: 5054.60
x265 [info]: frame B: 30587, Avg QP:26.06 kb/s: 393.50
x265 [info]: Weighted P-Frames: Y:2.8% UV:1.0%
x265 [info]: Weighted B-Frames: Y:2.7% UV:0.4%
encoded 36996 frames in 1505.87s (24.57 fps), 1381.65 kb/s, Avg QP:25.15
XPSNR average, 36996 frames y: 40.4798 u: 43.4753 v: 43.8205 (minimum: 40.4798)
VMAF 4k: 88.690842, VMAF 1080p: 82.720369
SSIMULACRA2_rs: Mean: 79.68937613 Median: 80.29604784 Std Dev: 5.62411048 5th Percentile: 71.18435582 95th Percentile: 86.68939060
--preset 3 --crf 35
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 -b .\SolLevante_yuv420p10le_bt709_CRF35_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 495945952 15048.56 kbps
Channel 1
Average Speed: 4.334 fps
Total Encoding Time: 1456698 ms
Total Execution Time: 1457806 ms
Average Latency: 82314 ms
Max Latency: 176557 ms
XPSNR average, 6314 frames y: 37.4796 u: 41.3010 v: 42.1299 (minimum: 37.4796)
VMAF 4k: 98.234294, VMAF 1080p: 96.876956
SSIMULACRA2_rs: Mean: 65.97162016 Median: 59.94357483 Std Dev: 23.20466288 5th Percentile: 32.53194259 95th Percentile: 100.00000000
--preset 3 --crf 30
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 -b .\SolLevante_yuv420p10le_bt709_CRF30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 696100941 21280.89 kbps
Channel 1
Average Speed: 4.336 fps
Total Encoding Time: 1456120 ms
Total Execution Time: 1457182 ms
Average Latency: 82424 ms
Max Latency: 183572 ms
XPSNR average, 6314 frames y: 37.8511 u: 41.6377 v: 42.6135 (minimum: 37.8511)
VMAF 4k: 98.615379, VMAF 1080p: 97.452872
SSIMULACRA2_rs: Mean: 72.01245585 Median: 66.82872302 Std Dev: 18.74429742 5th Percentile: 45.26125476 95th Percentile: 99.29705787
启用量化矩阵,增加编解码难度:--preset 3 --crf 35 --enable-qm 1
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 -b .\SolLevante_yuv420p10le_bt709_CRF35_preset3_qm.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 485999453 15081.03 kbps
Channel 1
Average Speed: 4.377 fps
Total Encoding Time: 1441289 ms
Total Execution Time: 1442440 ms
Average Latency: 81542 ms
Max Latency: 170543 ms
XPSNR average, 6314 frames y: 37.4825 u: 41.2973 v: 42.1271 (minimum: 37.4825)
VMAF 4k: 98.245816, VMAF 1080p: 96.897842
SSIMULACRA2_rs: Mean: 66.03889685 Median: 60.02430719 Std Dev: 23.13374066 5th Percentile: 32.57622116 95th Percentile: 98.68322379
启用全部量化矩阵,进一步增加编解码难度:--preset 3 --crf 35 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 --qm-min 0 -b .\SolLevante_yuv420p10le_bt709_CRF35_preset3_qmMin0.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 485999453 14778.57 kbps
Channel 1
Average Speed: 4.379 fps
Total Encoding Time: 1441948 ms
Total Execution Time: 1443100 ms
Average Latency: 81579 ms
Max Latency: 170621 ms
XPSNR average, 6314 frames y: 37.4555 u: 41.2608 v: 42.0718 (minimum: 37.4555)
VMAF 4k: 98.231956, VMAF 1080p: 96.875528
SSIMULACRA2_rs: Mean: 65.73858934 Median: 59.78007333 Std Dev: 23.31712901 5th Percentile: 32.03486931 95th Percentile: 98.68322379
启用量化矩阵,增加编解码难度:--preset 3 --crf 30 --enable-qm 1
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 -b .\SolLevante_yuv420p10le_bt709_CRF30_preset3_qm.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 696100941 21167.47 kbps
Channel 1
Average Speed: 4.333 fps
Total Encoding Time: 1457254 ms
Total Execution Time: 1458394 ms
Average Latency: 82586 ms
Max Latency: 182655 ms
XPSNR average, 6314 frames y: 37.8514 u: 41.6337 v: 42.6076 (minimum: 37.8514)
VMAF 4k: 98.622843, VMAF 1080p: 97.462467
SSIMULACRA2_rs: Mean: 72.03421424 Median: 66.91038305 Std Dev: 18.70887673 5th Percentile: 45.24524990 95th Percentile: 100.00000000
--preset 3 --crf 30 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 -b .\SolLevante_yuv420p10le_bt709_CRF30_preset3_qmMin0.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 679827926 20672.63 kbps
Channel 1
Average Speed: 4.409 fps
Total Encoding Time: 1431988 ms
Total Execution Time: 1433144 ms
Average Latency: 81135 ms
Max Latency: 175083 ms
XPSNR average, 6314 frames y: 37.8158 u: 41.5928 v: 42.5431 (minimum: 37.8158)
VMAF 4k: 98.601947, VMAF 1080p: 97.423990
SSIMULACRA2_rs: Mean: 71.61725400 Median: 66.48754073 Std Dev: 18.99833478 5th Percentile: 44.37356138 95th Percentile: 100.00000000
--preset 3 --crf 35 --tune 2
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 2 -b .\SolLevante_yuv420p10le_bt709_crf35_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 539763652 16413.47 kbps
Channel 1
Average Speed: 4.111 fps
Total Encoding Time: 1536046 ms
Total Execution Time: 1537104 ms
Average Latency: 76876 ms
Max Latency: 176111 ms
XPSNR average, 6314 frames y: 31.4607 u: 41.8239 v: 39.4703 (minimum: 31.4607)
VMAF 4k: 98.078654, VMAF 1080p: 96.635140
SSIMULACRA2_rs: Mean: 65.28679182 Median: 59.20220066 Std Dev: 23.29595566 5th Percentile: 31.85868858 95th Percentile: 100.00000000
--preset 3 --crf 35 --tune 0
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 0 -b .\SolLevante_yuv420p10le_bt709_crf35_preset3_tuneVQ.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 504213067 15332.42 kbps
Channel 1
Average Speed: 4.399 fps
Total Encoding Time: 1435448 ms
Total Execution Time: 1436490 ms
Average Latency: 81034 ms
Max Latency: 176268 ms
XPSNR average, 6314 frames y: 37.4686 u: 41.3226 v: 42.1316 (minimum: 37.4686)
VMAF 4k: 98.235196, VMAF 1080p: 96.859568
SSIMULACRA2_rs: Mean: 66.23793043 Median: 60.04863790 Std Dev: 23.02009876 5th Percentile: 32.76133609 95th Percentile: 98.81171438
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 -b .\SolLevante_yuv420p10le_bt709_crf35_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 657975207 20008.12 kbps
Channel 1
Average Speed: 4.383 fps
Total Encoding Time: 1440538 ms
Total Execution Time: 1441596 ms
Average Latency: 81376 ms
XPSNR average, 6314 frames y: 37.3834 u: 41.2295 v: 42.0278 (minimum: 37.3834)
VMAF 4k: 98.078654, VMAF 1080p: 96.635140
SSIMULACRA2_rs: Mean: 71.49626144 Median: 66.18785330 Std Dev: 18.79315072 5th Percentile: 44.68539708 95th Percentile: 100.00000000
VQ:--preset 3 --crf 30 --tune 0
:
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 712471110 21665.26 kbps
Channel 1
Average Speed: 4.432 fps
Total Encoding Time: 1424758 ms
Total Execution Time: 1425870 ms
Average Latency: 80551 ms
Max Latency: 177584 ms
XPSNR average, 6314 frames y: 37.8410 u: 41.6606 v: 42.6222 (minimum: 37.8410)
VMAF 4k: 98.632120, VMAF 1080p: 97.439903
SSIMULACRA2_rs: Mean: 72.33149666 Median: 67.03434155 Std Dev: 18.54564401 5th Percentile: 45.65975990 95th Percentile: 100.00000000
--preset 3 --crf 35
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 -b .\WindAndNature_yuv420p10le_bt709_crf35_preset3.ivf
Metadata:
encoder : Lavf61.9.107
Stream #0:0: Video: av1 (av01 / 0x31307661), yuv420p10le(tv, bt709, progressive), 4096x2160 [SAR 1:1 DAR 256:135], q=2-31, 60 fps, 15360 tbn (default)
Metadata:
encoder : Lavc61.33.102 libsvtav1
DURATION : 00:00:19.984000000
[out#0/mp4 @ 00000206e666e5c0] video:16241KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.028303%
frame= 1199 fps=6.0 q=35.0 Lsize= 16245KiB time=00:00:19.96 bitrate=6665.2kbits/s speed= 0.1x
XPSNR average, 1199 frames y: 37.3362 u: 43.4853 v: 43.1529 (minimum: 37.3362)
VMAF 4k: 92.806035, VMAF 1080p: 87.777087
SSIMULACRA2_rs: Mean: 65.63168941 Median: 67.48283309 Std Dev: 4.11945531 5th Percentile: 58.42780742 95th Percentile: 70.41150630
--preset 3 --crf 30
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -c:v libsvtav1 -preset 3 -crf 30 -svtav1-params "keyint=12s" -c:a copy .\WindAndNature_yuv420p10le_bt709_crf30_preset3.mp4
Metadata:
encoder : Lavf61.9.107
Stream #0:0: Video: av1 (av01 / 0x31307661), yuv420p10le(tv, bt709, progressive), 4096x2160 [SAR 1:1 DAR 256:135], q=2-31, 60 fps, 15360 tbn (default)
Metadata:
encoder : Lavc61.33.102 libsvtav1
DURATION : 00:00:19.984000000
[out#0/mp4 @ 00000122177de5c0] video:22568KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.020922%
frame= 1199 fps=5.3 q=30.0 Lsize= 22572KiB time=00:00:19.96 bitrate=9261.1kbits/s speed=0.0886x
XPSNR average, 1199 frames y: 37.5399 u: 43.7761 v: 43.4111 (minimum: 37.5399)
VMAF 4k: 93.308794, VMAF 1080p: 88.447753
SSIMULACRA2_rs: Mean: 68.92250911Median: 70.75917283 Std Dev: 3.78970924 5th Percentile: 62.09646559 95th Percentile: 73.04270951
--preset 3 --crf 35 --enable-qm
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 35 --enable-qm 1 --preset 3 --progress 2 -b .\WindAndNature_yuv420p10le_bt709_crf35_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 16582480 6638.52 kbps
Channel 1
Average Speed: 5.606 fps
Total Encoding Time: 213860 ms
Total Execution Time: 214990 ms
Average Latency: 52045 ms
Max Latency: 74255 ms
XPSNR average, 1199 frames y: 34.4809 u: 42.5478 v: 40.5093 (minimum: 34.4809)
VMAF 4k: 94.393281, VMAF 1080p: 89.852731
SSIMULACRA2_rs: Mean: 65.62441101 Median: 67.46571858 Std Dev: 4.12340782 5th Percentile: 58.31453649 95th Percentile: 70.38503641
--preset 3 --crf 35 --enable-qm --qm-min 0
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 35 --enable-qm 1 --qm-min 0 --preset 3 --progress 2 -b .\WindAndNature_yuv420p10le_bt709_crf35_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 16469762 6593.40 kbps
Channel 1
Average Speed: 5.555 fps
Total Encoding Time: 215838 ms
Total Execution Time: 216986 ms
Average Latency: 52440 ms
Max Latency: 74129 ms
XPSNR average, 1199 frames y: 34.4778 u: 42.4815 v: 40.4485 (minimum: 34.4778)
VMAF 4k: 94.281057, VMAF 1080p: 89.713395
SSIMULACRA2_rs: Mean: 65.50754114 Median: 67.41629557 Std Dev: 4.14355522 5th Percentile: 58.20332960 95th Percentile: 70.29080931
--preset 3 --crf 30 --enable-qm
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --enable-qm 1 --preset 3 --progress 2 -b .\WindAndNature_yuv420p10le_bt709_crf35_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 22909500 9171.44 kbps
Channel 1
Average Speed: 5.076 fps
Total Encoding Time: 236192 ms
Total Execution Time: 237336 ms
Average Latency: 57271 ms
Max Latency: 81815 ms
XPSNR average, 1199 frames y: 34.6036 u: 42.7509 v: 40.6414 (minimum: 34.6036)
VMAF 4k: 94.757020, VMAF 1080p: 90.344565
SSIMULACRA2_rs: Mean: 68.91905952 Median: 70.73052286 Std Dev: 3.79137116 5th Percentile: 62.10079590 95th Percentile: 73.08080131
--preset 3 --crf 30 --enable-qm --qm-min 0
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --enable-qm 1 --qm-min 0 --preset 3 --progress 2 -b .\WindAndNature_yuv420p10le_bt709_crf35_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 22909500 9171.44 kbps
Channel 1
Average Speed: 5.046 fps
Total Encoding Time: 237610 ms
Total Execution Time: 238846 ms
Average Latency: 57575 ms
Max Latency: 81414 ms
XPSNR average, 1199 frames y: 34.5935 u: 42.6956 v: 40.5930 (minimum: 34.5935)
VMAF 4k: 94.697077, VMAF 1080p: 90.274703
SSIMULACRA2_rs: Mean: 68.80260246 Median: 70.67784608 Std Dev: 3.83469802 5th Percentile: 61.91905432 95th Percentile: 73.02160275
--preset 3 --crf 35 --tune 0
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -i .\WindAndNature_yuv420p10le_bt709_crf35_preset3_tuneVQ.ivf -lavfi libvmaf="model=version=vmaf_v0.6.1\\:name=vmaf_1080p|version=vmaf_4k_v0.6.1\\:name=vmaf_4k" -f null -
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 17795549 7124.16 kbps
Channel 1
Average Speed: 5.623 fps
Total Encoding Time: 213218 ms
Total Execution Time: 214358 ms
Average Latency: 51687 ms
Max Latency: 73526 ms
XPSNR average, 1199 frames y: 34.4899 u: 42.5401 v: 40.5767 (minimum: 34.4899)
VMAF 4k: 94.823117, VMAF 1080p: 90.429029
SSIMULACRA2_rs: Mean: 66.04194395 Median: 67.69334252 Std Dev: 4.21918608 5th Percentile: 58.67352770 95th Percentile: 70.90097115
--preset 3 --crf 30 --tune 0
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p - | .\SvtAv1EncApp -i - --keyint 12s --crf 30 --enable-qm 1 --qm-min 0 --preset 3 --progress 2 --tune 0 -b .\WindAndNature_yuv420p10le_bt709_crf30_preset3_tuneVQ.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 25134483 10062.18 kbps
Channel 1
Average Speed: 5.125 fps
Total Encoding Time: 233934 ms
Total Execution Time: 235084 ms
Average Latency: 56692 ms
Max Latency: 80027 ms
XPSNR average, 1199 frames y: 34.5941 u: 42.7320 v: 40.7056 (minimum: 34.5941)
VMAF 4k: 93.875844, VMAF 1080p: 89.245974
SSIMULACRA2_rs: Mean: 69.04057766 Median: 70.76173066 Std Dev: 4.03527187 5th Percentile: 61.63058503 95th Percentile: 73.41046502
--preset 3 --crf 35 --tune 2
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p - | .\SvtAv1EncApp -i - --keyint 12s --crf 30 --enable-qm 1 --qm-min 0 --preset 3 --progress 2 --tune 2 -b .\WindAndNature_yuv420p10le_bt709_crf30_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 16432334 6578.42 kbps
Channel 1
Average Speed: 5.573 fps
Total Encoding Time: 215132 ms
Total Execution Time: 216324 ms
Average Latency: 52295 ms
Max Latency: 74032 ms
XPSNR average, 1199 frames y: 34.4740 u: 42.5145 v: 40.4584 (minimum: 34.4740)
VMAF 4k: 94.230593, VMAF 1080p: 89.647985
SSIMULACRA2_rs: Mean: 65.70502123 Median: 67.36990713 Std Dev: 3.81579500 5th Percentile: 58.95460314 95th Percentile: 70.03019595
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\Netflix_WindAndNature_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p - | .\SvtAv1EncApp -i - --keyint 12s --crf 30 --enable-qm 1 --qm-min 0 --preset 3 --progress 2 --tune 2 -b .\WindAndNature_yuv420p10le_bt709_crf30_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
1199 60.00 fps 22835760 9141.92 kbps
Channel 1
Average Speed: 5.174 fps
Total Encoding Time: 231714 ms
Total Execution Time: 232860 ms
Average Latency: 55913 ms
Max Latency: 79668 ms
XPSNR average, 1199 frames y: 34.5897 u: 42.7322 v: 40.6001 (minimum: 34.5897)
VMAF 4k: 94.750709, VMAF 1080p: 90.340893
SSIMULACRA2_rs: Mean: 68.93928567 Median: 70.61041299 Std Dev: 3.54621458 5th Percentile: 62.56205008 95th Percentile: 72.72085333
--preset 3 --crf 35
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --progress 2 -b .\Netflix_Boat_yuv420p10le_bt709_crf35_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 13942940 21798.79 kbps
Channel 1
Average Speed: 3.515 fps
Total Encoding Time: 85344 ms
Total Execution Time: 86698 ms
Average Latency: 46597 ms
Max Latency: 75421 ms
XPSNR average, 301 frames y: 32.1465 u: 40.6428 v: 42.6896
VMAF 4k: 76.746842, VMAF 1080p: 67.250902
SSIMULACRA2_rs: Mean: 65.44279924 Median: 65.24821957 Std Dev: 1.86269647 5th Percentile: 62.76749146 95th Percentile: 68.60554732
--preset 3 --crf 30
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --progress 2 --tune 0 -b .\Netflix_Boat_yuv420p10le_bt709_crf30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 18819560 30111.30 kbps
Channel 1
Average Speed: 3.398 fps
Total Encoding Time: 88290 ms
Total Execution Time: 89448 ms
Average Latency: 48355 ms
Max Latency: 78434 ms
XPSNR average, 301 frames y: 32.2371 u: 40.8458 v: 42.8932 (minimum: 32.2371)
VMAF 4k: 77.517816, VMAF 1080p: 68.330515
SSIMULACRA2_rs: Mean: 70.46943646 Median: 70.32725873 Std Dev: 1.44849029 5th Percentile: 68.33790856 95th Percentile: 73.00295684
--preset 3 --crf 35 --enable-qm 1
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --enable-qm 1 --preset 3 --progress 2 -b .\Netflix_Boat_yuv420p10le_bt709_crf35_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 13669704 21871.53 kbps
Channel 1
Average Speed: 3.512 fps
Total Encoding Time: 85422 ms
Total Execution Time: 86632 ms
Average Latency: 47233 ms
Max Latency: 75556 ms
XPSNR average, 301 frames y: 32.1469 u: 40.6214 v: 42.6628 (minimum: 32.1469)
VMAF 4k: 76.766875, VMAF 1080p: 67.279102
SSIMULACRA2_rs: Mean: 65.51104289 Median: 65.27929578 Std Dev: 1.86209612 5th Percentile: 62.79561741 95th Percentile: 68.67732264
--preset 3 --crf 30 --enable-qm 1
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --enable-qm 1 --preset 3 --progress 2 -b .\Netflix_Boat_yuv420p10le_bt709_crf30_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 18841936 30147.10 kbps
Channel 1
Average Speed: 3.368 fps
Total Encoding Time: 89064 ms
Total Execution Time: 90260 ms
Average Latency: 49036 ms
Max Latency: 79536 ms
XPSNR average, 301 frames y: 32.2376 u: 40.8178 v: 42.8621 (minimum: 32.2376)
VMAF 4k: 77.534536, VMAF 1080p: 68.353681
SSIMULACRA2_rs: Mean: 70.48941736 Median: 70.34330051 Std Dev: 1.45603910 5th Percentile: 68.32600577 95th Percentile: 73.00726519
--preset 3 --crf 35 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --enable-qm 1 --qm-min 0 --preset 3 --progress 2 -b .\Netflix_Boat_yuv420p10le_bt709_crf35_qmMin0_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 13422485 21475.98 kbps
Channel 1
Average Speed: 3.473 fps
Total Encoding Time: 86388 ms
Total Execution Time: 87572 ms
Average Latency: 47676 ms
Max Latency: 76437 ms
XPSNR average, 301 frames y: 32.1264 u: 40.5581 v: 42.5867 (minimum: 32.1264)
VMAF 4k: 76.725852, VMAF 1080p: 67.221263
SSIMULACRA2_rs: Mean: 65.26716472 Median: 65.11628273 Std Dev: 1.81914745 5th Percentile: 62.62584510 95th Percentile: 68.37429589
--preset 3 --crf 30 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --enable-qm 1 --qm-min 0 --preset 3 --progress 2 -b .\Netflix_Boat_yuv420p10le_bt709_crf30_qmMin0_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 18436630 29498.61 kbps
Channel 1
Average Speed: 3.293 fps
Total Encoding Time: 91114 ms
Total Execution Time: 92276 ms
Average Latency: 50162 ms
Max Latency: 81030 ms
XPSNR average, 301 frames y: 32.2176 u: 40.7572 v: 42.7955 (minimum: 32.2176)
VMAF 4k: 77.503960, VMAF 1080p: 68.314713
SSIMULACRA2_rs: Mean: 70.20741785 Median: 70.07957787 Std Dev: 1.37105614 5th Percentile: 68.14975116 95th Percentile: 72.58938147
--preset 3 --crf 35 --tune 0
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --progress 2 --tune 0 -b .\Netflix_Boat_yuv420p10le_bt709_crf35_tuneVQ_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 13942940 22308.70 kbps
Channel 1
Average Speed: 3.538 fps
Total Encoding Time: 84788 ms
Total Execution Time: 85964 ms
Average Latency: 46044 ms
Max Latency: 74289 ms
XPSNR average, 301 frames y: 32.1609 u: 40.6217 v: 42.6716 (minimum: 32.1609)
VMAF 4k: 77.176024, VMAF 1080p: 67.782053
SSIMULACRA2_rs: Mean: 65.62472343 Median: 65.33376302 Std Dev: 2.05862478 5th Percentile: 62.92247971 95th Percentile: 68.71991106
--preset 3 --crf 30 --tune 0
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --progress 2 --tune 0 -b .\Netflix_Boat_yuv420p10le_bt709_crf35_tuneVQ_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 19558058 31292.89 kbps
Channel 1
Average Speed: 3.372 fps
Total Encoding Time: 88976 ms
Total Execution Time: 90144 ms
Average Latency: 48427 ms
Max Latency: 78907 ms
XPSNR average, 301 frames y: 32.2467 u: 40.8241 v: 42.8826 (minimum: 32.2467)
VMAF 4k: 77.863401, VMAF 1080p: 68.746449
SSIMULACRA2_rs: Mean: 70.60364934 Median: 70.44573796 Std Dev: 1.64924424 5th Percentile: 68.31306315 95th Percentile: 73.43305347
--preset 3 --crf 35 --tune 2
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --progress 2 --tune 2 -b .\Netflix_Boat_yuv420p10le_bt709_crf35_tuneSSIM_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 13237107 21179.37 kbps
Channel 1
Average Speed: 3.449 fps
Total Encoding Time: 86972 ms
Total Execution Time: 88174 ms
Average Latency: 47998 ms
Max Latency: 77237 ms
XPSNR average, 301 frames y: 32.1297 u: 40.5922 v: 42.5990 (minimum: 32.1297)
VMAF 4k: 76.574269, VMAF 1080p: 67.017956
SSIMULACRA2_rs: Mean: 64.66386301 Median: 64.46980413 Std Dev: 1.91379239 5th Percentile: 61.83743679 95th Percentile: 67.85317053
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.video.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --progress 2 --tune 2 -b .\Netflix_Boat_yuv420p10le_bt709_crf30_tuneSSIM_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
300 60.00 fps 18408379 29453.41 kbps
Channel 1
Average Speed: 3.360 fps
Total Encoding Time: 89276 ms
Total Execution Time: 90462 ms
Average Latency: 48900 ms
Max Latency: 79541 ms
XPSNR average, 301 frames y: 32.2267 u: 40.7993 v: 42.8276 (minimum: 32.2267)
VMAF 4k: 77.399249, VMAF 1080p: 68.178157
SSIMULACRA2_rs: Mean: 69.94324986 Median: 69.84754035 Std Dev: 1.42894718 5th Percentile: 67.71075445 95th Percentile: 72.35572415
--preset 3 --crf 35
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | .\SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf35_preset3.ivf
Encoding frame 14315 1346.27 kbps 32.47 fps
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 100374592 1346.27 kbps
Channel 1
Average Speed: 32.473 fps
Total Encoding Time: 440834 ms
Total Execution Time: 441172 ms
Average Latency: 10543 ms
Max Latency: 20496 ms
XPSNR average, 14315 frames y: 33.5011 u: 40.8278 v: 41.5891 (minimum: 33.5011)
VMAF 4K: 87.787175, VMAF 1080p: 82.260282
SSIMULACRA2_rs: Mean: 75.32415905 Median: 75.39024480 Std Dev: 6.96410086 5th Percentile: 63.93803446 95th Percentile: 85.70591457
--preset 3 --crf 30
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | .\SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 137432666 1843.32 kbps
Channel 1
Average Speed: 31.806 fps
Total Encoding Time: 450070 ms
Total Execution Time: 450386 ms
Average Latency: 10795 ms
Max Latency: 20098 ms
XPSNR average, 14315 frames y: 33.7512 u: 41.3003 v: 42.0430 (minimum: 33.7512)
VMAF 4K: 88.153931, VMAF 1080p: 82.723244
SSIMULACRA2_rs: Mean: 78.85317925 Median: 78.87951009 Std Dev: 5.64017338 5th Percentile: 69.7591437695th Percentile: 87.17429615
--preset 3 --crf 35 --enable-qm 1
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf35_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 98975837 1327.51 kbps
Channel 1
Average Speed: 32.462 fps
Total Encoding Time: 440976 ms
Total Execution Time: 441308 ms
Average Latency: 10562 ms
Max Latency: 20593 ms
XPSNR average, 14315 frames y: 33.4773 u: 40.7428 v: 41.5310 (minimum: 33.4773)
VMAF 4K: 87.791335, VMAF 1080p: 82.277206
SSIMULACRA2_rs: Mean: 75.27920286 Median: 75.36589160 Std Dev: 6.91814465 5th Percentile: 63.95092010 95th Percentile: 85.45230956
--preset 3 --crf 30 --enable-qm 1
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf30_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 134966115 1810.23 kbps
Channel 1
Average Speed: 31.701 fps
Total Encoding Time: 451570 ms
Total Execution Time: 451898 ms
Average Latency: 10844 ms
Max Latency: 20395 ms
XPSNR average, 14315 frames y: 33.7239 u: 41.1964 v: 41.9703 (minimum: 33.7239)
VMAF 4K: 88.161816, VMAF 1080p: 82.745566
SSIMULACRA2_rs: Mean: 78.79998864 Median: 78.83792127 Std Dev: 5.60273973 5th Percentile: 69.77388681 95th Percentile: 87.09225295
--preset 3 --crf 35 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 --qm-min 0 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf35_qmMin0_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 97348892 1305.69 kbps
Channel 1
Average Speed: 32.369 fps
Total Encoding Time: 442240 ms
Total Execution Time: 442582 ms
Average Latency: 10620 ms
Max Latency: 20319 ms
XPSNR average, 14315 frames y: 33.3821 u: 40.5867 v: 41.4067 (minimum: 33.3821)
VMAF 4K: 87.706740, VMAF 1080p: 82.188623
SSIMULACRA2_rs: Mean: 74.87515728 Median: 74.97725064 Std Dev: 6.88201854 5th Percentile: 63.59227335 95th Percentile: 84.98997361
--preset 3 --crf 30 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 0 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf30_qmMin0_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 131722647 1766.73 kbps
Channel 1
Average Speed: 31.602 fps
Total Encoding Time: 452982 ms
Total Execution Time: 453314 ms
Average Latency: 10892 ms
Max Latency: 20369 ms
XPSNR average, 14315 frames y: 33.6135 u: 41.0278 v: 41.8223 (minimum: 33.6135)
VMAF 4K: 88.077043, VMAF 1080p: 82.657963
SSIMULACRA2_rs: Mean: 78.30231156 Median: 78.36263621 Std Dev: 5.57336865 5th Percentile: 69.29068078 95th Percentile: 86.43200391
--preset 3 --crf 35 --tune 0
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 0 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf35_tuneVQ_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 106818911 1432.71 kbps
Channel 1
Average Speed: 34.039 fps
Total Encoding Time: 420550 ms
Total Execution Time: 420892 ms
Average Latency: 10023 ms
Max Latency: 19538 ms
XPSNR average, 14315 frames y: 33.4972 u: 40.8966 v: 41.5483 (minimum: 33.4972)
VMAF 4K: 87.790515, VMAF 1080p: 82.249598
SSIMULACRA2_rs: Mean: 75.77570949 Median: 75.86107014 Std Dev: 6.95487455 5th Percentile: 64.25930676 95th Percentile: 86.08970133
--preset 3 --crf 30 --tune 0
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf30_tuneVQ_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 145230445 1947.90 kbps
Channel 1
Average Speed: 33.204 fps
Total Encoding Time: 431122 ms
Total Execution Time: 431450 ms
Average Latency: 10313 ms
Max Latency: 19430 ms
XPSNR average, 14315 frames y: 33.7393 u: 41.3689 v: 42.0001 (minimum: 33.7393)
VMAF 4K: 88.171916, VMAF 1080p: 82.733681
SSIMULACRA2_rs: Mean: 79.26591280 Median: 79.29272234 Std Dev: 5.60606982 5th Percentile: 70.15623321 95th Percentile: 87.64869908
--preset 3 --crf 35 --tune 2
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe - | .\SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 2 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf35_tuneSSIM_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 97018725 1301.26 kbps
Channel 1
Average Speed: 31.926 fps
Total Encoding Time: 448388 ms
Total Execution Time: 448732 ms
Average Latency: 10698 ms
Max Latency: 20351 ms
XPSNR average, 14315 frames y: 33.4781 u: 40.7613 v: 41.5222 (minimum: 33.4781)
VMAF 4K: 87.644933, VMAF 1080p: 82.078680
SSIMULACRA2_rs: Mean: 75.14899784 Median: 75.34139171 Std Dev: 6.90857273 5th Percentile: 63.89165676 95th Percentile: 85.37767059
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420p.mkv -f yuv4mpegpipe -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 -b .\Big-Buck-Bunny_1920x1080_24fps_8bit_yuv420_crf30_tuneSSIM_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
14315 24.00 fps 132194899 1773.06 kbps
Channel 1
Average Speed: 31.300 fps
Total Encoding Time: 457356 ms
Total Execution Time: 457690 ms
Average Latency: 10947 ms
Max Latency: 20324 ms
XPSNR average, 14315 frames y: 33.7302 u: 41.2343 v: 41.9781 (minimum: 33.7302)
VMAF 4K: 88.039656, VMAF 1080p: 82.574113
SSIMULACRA2_rs: Mean: 78.67407409 Median: 78.87376130 Std Dev: 5.62830977 5th Percentile: 69.61758813 95th Percentile: 86.97921263
--preset 3 --crf 35
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf35_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 129126202 1580.03 kbps
Channel 1
Average Speed: 28.329 fps
Total Encoding Time: 553882 ms
Total Execution Time: 554216 ms
Average Latency: 12395 ms
Max Latency: 35052 ms
XPSNR average, 15691 frames y: 32.7320 u: 44.8539 v: 44.0970 (minimum: 32.7320)
VMAF 4K: 83.397669, VMAF 1080p: 76.747974
SSIMULACRA2_rs: Mean: 73.73228925 Median: 73.37285235 Std Dev: 11.15518315 5th Percentile: 54.85785930 95th Percentile: 93.57457526
--preset 3 --crf 30
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 184180183 2253.69 kbps
Channel 1
Average Speed: 27.780 fps
Total Encoding Time: 564834 ms
Total Execution Time: 565188 ms
Average Latency: 12671 ms
Max Latency: 34505 ms
XPSNR average, 15691 frames y: 32.9889 u: 45.2554 v: 44.5165 (minimum: 32.9889)
VMAF 4K: 83.837285, VMAF 1080p: 77.317822
SSIMULACRA2_rs: Mean: 77.95534397 Median: 77.60633320 Std Dev: 9.06659246 5th Percentile: 63.26160259 95th Percentile: 94.46343097
--preset 3 --crf 35 --enable-qm 1
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf35_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 128879607 1577.01 kbps
Channel 1
Average Speed: 28.297 fps
Total Encoding Time: 554502 ms
Total Execution Time: 554864 ms
Average Latency: 12420 ms
Max Latency: 35116 ms
XPSNR average, 15691 frames y: 32.7234 u: 44.8500 v: 44.0883 (minimum: 32.7234)
VMAF 4K: 83.403132, VMAF 1080p: 76.755183
SSIMULACRA2_rs: Mean: 73.73402693 Median: 73.37710154 Std Dev: 11.11831836 5th Percentile: 54.97472344 95th Percentile: 93.56296734
--preset 3 --crf 30 --enable-qm 1
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_qm_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 183193889 2241.62 kbps
Channel 1
Average Speed: 27.516 fps
Total Encoding Time: 570242 ms
Total Execution Time: 570604 ms
Average Latency: 12779 ms
Max Latency: 35105 ms
XPSNR average, 15691 frames y: 32.9777 u: 45.2444 v: 44.4971 (minimum: 32.9777)
VMAF 4K: 83.838933, VMAF 1080p: 77.320776
SSIMULACRA2_rs: Mean: 77.92935682 Median: 77.58905525 Std Dev: 9.03994764 5th Percentile: 63.31099239 95th Percentile: 94.51506590
--preset 3 --crf 35 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 --qm-min 0 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf35_qmMin0_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 127077234 1554.96 kbps
Channel 1
Average Speed: 28.546 fps
Total Encoding Time: 549666 ms
Total Execution Time: 550004 ms
Average Latency: 12317 ms
Max Latency: 34404 ms
XPSNR average, 15691 frames y: 32.6843 u: 44.8147 v: 44.0403 (minimum: 32.6843)
VMAF 4K: 83.372865, VMAF 1080p: 76.725816
SSIMULACRA2_rs: Mean: 73.45726871 Median: 73.05525303 Std Dev: 11.17768033 5th Percentile: 54.67047875 95th Percentile: 93.51371218
--preset 3 --crf 30 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 0 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_qmMin0_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 180017842 2202.75 kbps
Channel 1
Average Speed: 27.992 fps
Total Encoding Time: 560548 ms
Total Execution Time: 560878 ms
Average Latency: 12585 ms
Max Latency: 33609 ms
XPSNR average, 15691 frames y: 32.9266 u: 45.1970 v: 44.4345 (minimum: 32.9266)
VMAF 4K: 83.801251, VMAF 1080p: 77.282728
SSIMULACRA2_rs: Mean: 77.57799079 Median: 77.16378592 Std Dev: 9.11892568 5th Percentile: 62.90816047 95th Percentile: 94.43395281
--preset 3 --crf 35 --tune 0
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 0 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf35_tuneVQ_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 135503631 1658.06 kbps
Channel 1
Average Speed: 28.784 fps
Total Encoding Time: 545136 ms
Total Execution Time: 545496 ms
Average Latency: 12166 ms
Max Latency: 34785 ms
XPSNR average, 15691 frames y: 32.7453 u: 44.7811 v: 44.0312 (minimum: 32.7453)
VMAF 4K: 83.459934, VMAF 1080p: 76.814418
SSIMULACRA2_rs: Mean: 74.14842410 Median: 73.84100191 Std Dev: 10.98839947 5th Percentile: 55.40642910 95th Percentile: 93.51694390
--preset 3 --crf 30 --tune 0
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_tuneVQ_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 192130387 2350.97 kbps
Channel 1
Average Speed: 28.319 fps
Total Encoding Time: 554072 ms
Total Execution Time: 554416 ms
Average Latency: 12413 ms
Max Latency: 33819 ms
XPSNR average, 15691 frames y: 32.9975 u: 45.1853 v: 44.4520 (minimum: 32.9975)
VMAF 4K: 83.893225, VMAF 1080p: 77.376995
SSIMULACRA2_rs: Mean: 78.28962734 Median: 77.96771217 Std Dev: 8.88251466 5th Percentile: 63.73580664 95th Percentile: 94.47657123
--preset 3 --crf 35 --tune 2
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 2 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf35_tuneSSIM_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 125701805 1538.13 kbps
Channel 1
Average Speed: 28.038 fps
Total Encoding Time: 559638 ms
Total Execution Time: 559974 ms
Average Latency: 12517 ms
Max Latency: 35104 ms
XPSNR average, 15691 frames y: 32.7050 u: 44.8079 v: 44.0565 (minimum: 32.7050)
VMAF 4K: 83.268914, VMAF 1080p: 76.577435
SSIMULACRA2_rs: Mean: 73.52346418 Median: 73.17031873 Std Dev: 10.92597508 5th Percentile: 55.30870611 95th Percentile: 93.05800747
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_tuneSSIM_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 179319956 2194.22 kbps
Channel 1
Average Speed: 27.445 fps
Total Encoding Time: 571734 ms
Total Execution Time: 572062 ms
Average Latency: 12825 ms
Max Latency: 35179 ms
XPSNR average, 15691 frames y: 32.9654 u: 45.2091 v: 44.4717 (minimum: 32.9654)
VMAF 4K: 83.734283, VMAF 1080p: 77.179085
SSIMULACRA2_rs: Mean: 77.76087565 Median: 77.42435303 Std Dev: 8.84153156 5th Percentile: 63.51118754 95th Percentile: 93.97271621
--preset 3 --crf 35
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf35_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 229128149 1289.57 kbps
Channel 1
Average Speed: 35.645 fps
Total Encoding Time: 956098 ms
Total Execution Time: 956438 ms
Average Latency: 9587 ms
Max Latency: 23299 ms
XPSNR average, 34081 frames y: 31.5394 u: 38.5571 v: 38.5871 (minimum: 31.5394)
VMAF 4K: 85.898294, VMAF 1080p: 79.145894
SSIMULACRA2_rs: Mean: 77.79595955 Median: 80.76951847 Std Dev: 10.11701970 5th Percentile: 55.35706082 95th Percentile: 87.21367204
--preset 3 --crf 30
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 310395382 1746.96 kbps
Channel 1
Average Speed: 34.714 fps
Total Encoding Time: 981746 ms
Total Execution Time: 982074 ms
Average Latency: 9867 ms
Max Latency: 23064 ms
XPSNR average, 34081 frames y: 31.6802 u: 38.7924 v: 38.8041 (minimum: 31.6802)
VMAF 4K: 86.088653, VMAF 1080p: 79.403111
SSIMULACRA2_rs: Mean: 80.72932330 Median: 83.21056950 Std Dev: 8.14238366 5th Percentile: 62.57713789 95th Percentile: 88.27199543
--preset 3 --crf 35 --enable-qm 1
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf35_preset3_qm.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 224669811 1264.48 kbps
Channel 1
Average Speed: 35.269 fps
Total Encoding Time: 966280 ms
Total Execution Time: 966594 ms
Average Latency: 9703 ms
Max Latency: 23187 ms
XPSNR average, 34081 frames y: 31.5227 u: 38.4858 v: 38.5249 (minimum: 31.5227)
VMAF 4K: 85.894749, VMAF 1080p: 79.146527
SSIMULACRA2_rs: Mean: 77.69886550 Median: 80.69600714 Std Dev: 10.07073719 5th Percentile: 55.34029248 95th Percentile: 87.02358295
--preset 3 --crf 30 --enable-qm 1
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf35_preset3_qmMin0.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 302278722 1701.28 kbps
Channel 1
Average Speed: 34.394 fps
Total Encoding Time: 990860 ms
Total Execution Time: 991192 ms
Average Latency: 9975 ms
Max Latency: 22972 ms
XPSNR average, 34081 frames y: 31.6603 u: 38.7179 v: 38.7374 (minimum: 31.6603)
VMAF 4K: 86.085526, VMAF 1080p: 79.402306
SSIMULACRA2_rs: Mean: 80.59807135 Median: 83.09262696 Std Dev: 8.07536797 5th Percentile: 62.58511914 95th Percentile: 88.03572868
--preset 3 --crf 35 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 --qm-min 0 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf35_preset3_qmMin0.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 223526152 1258.04 kbps
Channel 1
Average Speed: 35.512 fps
Total Encoding Time: 959670 ms
Total Execution Time: 960008 ms
Average Latency: 9655 ms
Max Latency: 23401 ms
XPSNR average, 34081 frames y: 31.4662 u: 38.3831 v: 38.4344 (minimum: 31.4662)
VMAF 4K: 85.853214, VMAF 1080p: 79.101217
SSIMULACRA2_rs: Mean: 77.31179694 Median: 80.33342245 Std Dev: 10.03786961 5th Percentile: 54.98487067 95th Percentile: 86.47179056
--preset 3 --crf 30 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 0 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf30_preset3_qmMin0.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 298304463 1678.91 kbps
Channel 1
Average Speed: 34.683 fps
Total Encoding Time: 982628 ms
Total Execution Time: 982950 ms
Average Latency: 9914 ms
Max Latency: 22521 ms
XPSNR average, 34081 frames y: 31.5949 u: 38.6159 v: 38.6444 (minimum: 31.5949)
VMAF 4K: 86.048160, VMAF 1080p: 79.360748
SSIMULACRA2_rs: Mean: 80.13878722 Median: 82.67207598 Std Dev: 8.06846175 5th Percentile: 62.13033310 95th Percentile: 87.57267954
--preset 3 --crf 35 --tune 0
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 0 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf35_preset3_tuneVQ.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 241383269 1358.55 kbps
Channel 1
Average Speed: 37.573 fps
Total Encoding Time: 907038 ms
Total Execution Time: 907382 ms
Average Latency: 9051 ms
Max Latency: 22549 ms
XPSNR average, 34081 frames y: 31.5195 u: 38.5399 v: 38.5579 (minimum: 31.5195)
VMAF 4K: 85.827040, VMAF 1080p: 79.043595
SSIMULACRA2_rs: Mean: 78.18404438 Median: 81.09807098 Std Dev: 9.84990473 5th Percentile: 56.41780640 95th Percentile: 87.31498990
--preset 3 --crf 30 --tune 0
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf30_preset3_tuneVQ.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 327278175 1841.98 kbps
Channel 1
Average Speed: 36.461 fps
Total Encoding Time: 934688 ms
Total Execution Time: 935034 ms
Average Latency: 9360 ms
Max Latency: 23189 ms
XPSNR average, 34081 frames y: 31.6595 u: 38.7775 v: 38.7775 (minimum: 31.6595)
VMAF 4K: 86.030722, VMAF 1080p: 79.317153
SSIMULACRA2_rs: Mean: 81.05760560 Median: 83.45341781 Std Dev: 7.86579295 5th Percentile: 63.52342983 95th Percentile: 88.37986377
--preset 3 --crf 35 --tune 2
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 2 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf35_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 216845087 1220.44 kbps
Channel 1
Average Speed: 34.559 fps
Total Encoding Time: 986132 ms
Total Execution Time: 986468 ms
Average Latency: 9884 ms
Max Latency: 23539 ms
XPSNR average, 34081 frames y: 31.5036 u: 38.4679 v: 38.5017 (minimum: 31.5036)
VMAF 4K: 85.782189, VMAF 1080p: 78.989417
SSIMULACRA2_rs: Mean: 77.31163552 Median: 79.89184789 Std Dev: 9.84733036 5th Percentile: 55.58016882 95th Percentile: 87.02450024
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\MAIDRAGON-S-Vol.3-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 -b .\MAIDRAGON-S-23.976fps_8bit_yuv420_crf30_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
34080 23.98 fps 295880102 1665.26 kbps
Channel 1
Average Speed: 33.994 fps
Total Encoding Time: 1002516 ms
Total Execution Time: 1002870 ms
Average Latency: 10073 ms
Max Latency: 23448 ms
XPSNR average, 34081 frames y: 31.6558 u: 38.7259 v: 38.7405 (minimum: 31.6558)
VMAF 4K: 86.009089, VMAF 1080p: 79.289779
SSIMULACRA2_rs: Mean: 80.37004198 Median: 82.49914773 Std Dev: 7.94219220 5th Percentile: 62.83002581 95th Percentile: 88.19626015
--preset 3 --crf 35
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 -b .\HYOUKA-23.976fps_8bit_yuv420_crf35_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 120742679 626.00 kbps
Channel 1
Average Speed: 44.830 fps
Total Encoding Time: 825260 ms
Total Execution Time: 825594 ms
Average Latency: 7581 ms
Max Latency: 23175 ms
XPSNR average, 36997 frames y: 33.0814 u: 41.2298 v: 41.8182 (minimum: 33.0814)
VMAF 4K: 88.520954, VMAF 1080p: 82.506768
SSIMULACRA2_rs: Mean: 79.82507743 Median: 81.09452443 Std Dev: 6.55502720 5th Percentile: 67.96711951 95th Percentile: 86.41015394
--preset 3 --crf 30
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 -b .\HYOUKA-23.976fps_8bit_yuv420_crf30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 163854463 849.51 kbps
Channel 1
Average Speed: 43.113 fps
Total Encoding Time: 858116 ms
Total Execution Time: 858460 ms
Average Latency: 7907 ms
Max Latency: 21213 ms
XPSNR average, 36997 frames y: 33.2199 u: 41.4836 v: 42.0629 (minimum: 33.2199)
VMAF 4K: 88.706578, VMAF 1080p: 82.750268
SSIMULACRA2_rs: Mean: 82.03787385 Median: 83.02565519 Std Dev: 5.22592578 5th Percentile: 72.68777288 95th Percentile: 87.46544644
--preset 3 --crf 35 --enable-qm 1
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 -b .\HYOUKA-23.976fps_8bit_yuv420_crf35_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 118814985 616.00 kbps
Channel 1
Average Speed: 45.157 fps
Total Encoding Time: 819272 ms
Total Execution Time: 819602 ms
Average Latency: 7533 ms
Max Latency: 22795 ms
XPSNR average, 36997 frames y: 33.0730 u: 41.1885 v: 41.7834 (minimum: 33.0730)
VMAF 4K: 88.522282, VMAF 1080p: 82.511748
SSIMULACRA2_rs: Mean: 79.80505612 Median: 81.06671569 Std Dev: 6.52002979 5th Percentile: 67.99861326 95th Percentile: 86.31858358
--preset 3 --crf 30 --enable-qm 1
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 -b .\HYOUKA-23.976fps_8bit_yuv420_crf30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 160124885 830.18 kbps
Channel 1
Average Speed: 43.246 fps
Total Encoding Time: 855468 ms
Total Execution Time: 855806 ms
Average Latency: 7896 ms
Max Latency: 22073 ms
XPSNR average, 36997 frames y: 33.2107 u: 41.4386 v: 42.0205 (minimum: 33.2107)
VMAF 4K: 88.707766, VMAF 1080p: 82.756303
SSIMULACRA2_rs: Mean: 82.00116606 Median: 82.99097252 Std Dev: 5.19948680 5th Percentile: 72.65484942 95th Percentile: 87.35281267
--preset 3 --crf 35 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --enable-qm 1 -b .\HYOUKA-23.976fps_8bit_yuv420_crf35_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 116723071 605.16 kbps
Channel 1
Average Speed: 45.103 fps
Total Encoding Time: 820264 ms
Total Execution Time: 820608 ms
Average Latency: 7554 ms
Max Latency: 23381 ms
XPSNR average, 36997 frames y: 33.0321 u: 41.1181 v: 41.7172 (minimum: 33.0321)
VMAF 4K: 88.466964, VMAF 1080p: 82.448090
SSIMULACRA2_rs: Mean: 79.57465176 Median: 80.79647596 Std Dev: 6.50993171 5th Percentile: 67.84670635 95th Percentile: 86.04946409
--preset 3 --crf 30 --enable-qm 1 --qm-min 0
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 -b .\HYOUKA-23.976fps_8bit_yuv420_crf30_preset3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 155745474 807.47 kbps
Channel 1
Average Speed: 43.430 fps
Total Encoding Time: 851860 ms
Total Execution Time: 852210 ms
Average Latency: 7874 ms
Max Latency: 21885 ms
XPSNR average, 36997 frames y: 33.1681 u: 41.3567 v: 41.9452 (minimum: 33.1681)
VMAF 4K: 88.663308, VMAF 1080p: 82.705071
SSIMULACRA2_rs: Mean: 81.74212195 Median: 82.69693318 Std Dev: 5.20176841 5th Percentile: 72.40613868 95th Percentile: 87.02325300
--preset 3 --crf 35 --tune 0
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 0 -b .\HYOUKA-23.976fps_8bit_yuv420_crf30_preset3_tuneVQ.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 128216536 664.75 kbps
Channel 1
Average Speed: 46.994 fps
Total Encoding Time: 787254 ms
Total Execution Time: 787636 ms
Average Latency: 7203 ms
Max Latency: 22723 ms
XPSNR average, 36997 frames y: 33.0548 u: 41.1949 v: 41.7885 (minimum: 33.0548)
VMAF 4K: 88.473032, VMAF 1080p: 82.430565
SSIMULACRA2_rs: Mean: 80.11321607 Median: 81.29575302 Std Dev: 6.37928685 5th Percentile: 68.60815332 95th Percentile: 86.52427010
--preset 3 --crf 30 --tune 0
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 -b .\HYOUKA-23.976fps_8bit_yuv420_crf30_preset3_tuneVQ.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 174981394 907.20 kbps
Channel 1
Average Speed: 44.810 fps
Total Encoding Time: 825614 ms
Total Execution Time: 825974 ms
Average Latency: 7578 ms
Max Latency: 20879 ms
XPSNR average, 36997 frames y: 33.1894 u: 41.4471 v: 42.0314 (minimum: 33.1894)
VMAF 4K: 88.664737, VMAF 1080p: 82.685052
SSIMULACRA2_rs: Mean: 82.24667640 Median: 83.14431623 Std Dev: 5.08056753 5th Percentile: 73.18248350 95th Percentile: 87.50851431
--preset 3 --crf 35 --tune 2
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 35 --preset 3 --tune 2 -b .\HYOUKA-23.976fps_8bit_yuv420_crf35_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 116585010 604.44 kbps
Channel 1
Average Speed: 44.168 fps
Total Encoding Time: 837622 ms
Total Execution Time: 837976 ms
Average Latency: 7695 ms
Max Latency: 23198 ms
XPSNR average, 36997 frames y: 33.0569 u: 41.1617 v: 41.7536 (minimum: 33.0569)
VMAF 4K: 88.418474, VMAF 1080p: 82.371516
SSIMULACRA2_rs: Mean: 79.60067877 Median: 80.69420144 Std Dev: 6.47687427 5th Percentile: 67.82885960 95th Percentile: 86.27542652
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\氷菓-Vol.4-1920x1080-23.976fps-8bit-420.m2ts -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 -b .\HYOUKA-23.976fps_8bit_yuv420_crf30_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36996 23.98 fps 158466339 821.58 kbps
Channel 1
Average Speed: 42.132 fps
Total Encoding Time: 878090 ms
Total Execution Time: 878464 ms
Average Latency: 8095 ms
Max Latency: 22030 ms
XPSNR average, 36997 frames y: 33.2012 u: 41.4268 v: 42.0096 (minimum: 33.2012)
VMAF 4K: 88.632980, VMAF 1080p: 82.651362
SSIMULACRA2_rs: Mean: 81.85594740 Median: 82.74166944 Std Dev: 5.18134927 5th Percentile: 72.57400971 95th Percentile: 87.35136827
注:由于数据量非常庞大,所以难以避免抄写或打字错误,但整体上能够保证准确。
编码器 | 编码选项 | 速度 fps | 码率 kbps | XPSNR-Y dB | XPSNR-U dB | XPSNR-V dB | VMAF 4k | VMAF 1080p | S2.1:均值 | S2.1:中位 | S2.1:第 5% | S2.1:第 95% |
---|---|---|---|---|---|---|---|---|---|---|---|---|
x265 | Netflix_Boat CRF22 | 2.06 | 31171.09 | 40.5607 | 42.9254 | 45.6857 | 77.612357 | 68.300762 | 64.77780339 | 63.9109824 | 60.0405545 | 71.22150529 |
SVT-AV1 | Netflix_Boat CRF35 P3 | 3.515 | 21798.79 | 32.1465 | 40.6428 | 42.6896 | 76.746842 | 67.250902 | 65.44279924 | 65.24821957 | 62.76749146 | 68.60554732 |
SVT-AV1 | Netflix_Boat CRF35 QM | 3.512 | 21871.53 | 32.1469 | 40.6214 | 42.6628 | 76.766875 | 67.279102 | 65.51104289 | 65.27929578 | 62.79561741 | 68.67732264 |
SVT-AV1 | Netflix_Boat CRF35 QM0 | 3.473 | 21475.98 | 32.1264 | 40.5581 | 42.5867 | 76.725852 | 67.221263 | 65.26716472 | 65.11628273 | 62.6258451 | 68.37429589 |
SVT-AV1 | Netflix_Boat CRF35 VQ | 3.537 | 22308.7 | 32.1609 | 40.6217 | 42.6716 | 77.176024 | 67.782053 | 65.62472343 | 65.33376302 | 62.92247971 | 68.71991106 |
SVT-AV1 | Netflix_Boat CRF35 SSIM | 3.449 | 21179.37 | 32.1297 | 40.5922 | 42.599 | 76.574269 | 67.017956 | 64.66386301 | 64.46980413 | 61.83743679 | 67.85317053 |
x265 | Netflix_Boat CRF18 | 1.54 | 60831.26 | 42.0499 | 44.8382 | 47.8922 | 78.668415 | 69.732866 | 73.25259644 | 71.55939769 | 69.44349186 | 79.86377007 |
SVT-AV1 | Netflix_Boat CRF30 P3 | 3.35 | 31292.89 | 32.2467 | 40.8241 | 42.8826 | 77.863401 | 68.746449 | 70.60364934 | 70.44573796 | 68.31306315 | 73.43305347 |
SVT-AV1 | Netflix_Boat CRF30 QM | 3.368 | 30147.1 | 32.2376 | 40.8178 | 42.8621 | 77.534536 | 68.353681 | 70.48941736 | 70.34330051 | 68.32600577 | 73.00726519 |
SVT-AV1 | Netflix_Boat CRF30 QM0 | 3.293 | 29498.61 | 32.2176 | 40.7572 | 42.7955 | 77.50396 | 68.314713 | 70.20741785 | 70.07957787 | 68.14975116 | 72.58938147 |
SVT-AV1 | Netflix_Boat CRF30 VQ | 3.53 | 22308.7 | 32.2371 | 40.8458 | 42.8932 | 77.517816 | 68.330515 | 70.46943646 | 70.32725873 | 68.33790856 | 73.00295684 |
SVT-AV1 | Netflix_Boat CRF30 SSIM | 3.36 | 29453.41 | 32.2267 | 40.7993 | 42.8276 | 77.399249 | 68.178157 | 69.94324986 | 69.84754035 | 67.71075445 | 72.35572415 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | 特殊 | |||
x265 | WindAndNature CRF22 | 2.54 | 10472.07 | 39.8871 | 42.1991 | 42.3623 | 91.383935 | 85.874477 | 61.03782816 | 62.22680342 | 53.49027011 | 68.77075281 |
SVT-AV1 | WindAndNature CRF35 P3 | 6 | 6665.2 | 37.3362 | 43.4853 | 43.1529 | 92.806035 | 87.777087 | 65.63168941 | 67.48283309 | 58.42780742 | 70.4115063 |
SVT-AV1 | WindAndNature CRF35 QM | 5.606 | 6638.52 | 34.4809 | 42.5478 | 40.5093 | 94.393281 | 89.852731 | 65.62441101 | 67.46571858 | 58.31453649 | 70.38503641 |
SVT-AV1 | WindAndNature CRF35 QM0 | 5.555 | 6593.4 | 34.4778 | 42.4815 | 40.4485 | 94.281057 | 89.713395 | 65.50754114 | 67.41629557 | 58.2033296 | 70.29080931 |
SVT-AV1 | WindAndNature CRF35 VQ | 5.623 | 7124.16 | 34.4899 | 42.5401 | 40.5767 | 94.823117 | 90.429029 | 66.04194395 | 67.69334252 | 58.6735277 | 70.90097115 |
SVT-AV1 | WindAndNature CRF35 SSIM | 5.573 | 6578.42 | 34.474 | 42.5145 | 40.4584 | 94.230593 | 89.647985 | 65.70502123 | 67.36990713 | 58.95460314 | 70.03019595 |
x265 | WindAndNature CRF18 | 2.07 | 21360.67 | 40.9048 | 43.5395 | 43.4034 | 92.753515 | 87.722631 | 68.23241143 | 68.96018756 | 61.08936644 | 76.03682341 |
SVT-AV1 | WindAndNature CRF30 P3 | 5.3 | 9261.1 | 37.5399 | 43.7761 | 43.4111 | 93.308794 | 88.447753 | 68.92250911 | 70.75917283 | 62.09646559 | 73.04270951 |
SVT-AV1 | WindAndNature CRF30 QM | 5.076 | 9171.44 | 34.6036 | 42.7509 | 40.6414 | 94.75702 | 90.344565 | 68.91905952 | 70.73052286 | 62.1007959 | 73.08080131 |
SVT-AV1 | WindAndNature CRF30 QM0 | 5.046 | 9171.44 | 34.5935 | 42.6956 | 40.593 | 94.697077 | 90.274703 | 68.80260246 | 70.67784608 | 61.91905432 | 73.02160275 |
SVT-AV1 | WindAndNature CRF30 VQ | 5.125 | 10062.18 | 34.5941 | 42.732 | 40.7056 | 93.875844 | 89.245974 | 69.04057766 | 70.76173066 | 61.63058503 | 73.41046502 |
SVT-AV1 | WindAndNature CRF30 SSIM | 5.174 | 9141.92 | 34.5897 | 42.7322 | 40.6001 | 94.750709 | 90.340893 | 68.93928567 | 70.61041299 | 62.56205008 | 72.72085333 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | 特殊 | |||
x265 | BigBuckBunny CRF22 | 8.49 | 2581.44 | 33.3283 | 40.1929 | 41.3772 | 87.920378 | 82.474976 | 77.79793375 | 78.10156956 | 69.98188935 | 83.80652456 |
SVT-AV1 | BigBuckBunny CRF35 | 32.473 | 1346.27 | 33.5011 | 40.8278 | 41.5891 | 87.787175 | 82.260282 | 75.32415905 | 75.3902448 | 63.93803446 | 85.70591457 |
SVT-AV1 | BigBuckBunny CRF35 QM | 32.462 | 1327.51 | 33.4773 | 40.7428 | 41.531 | 87.791335 | 82.277206 | 75.27920286 | 75.3658916 | 63.9509201 | 85.45230956 |
SVT-AV1 | BigBuckBunny CRF35 QM Min0 | 32.369 | 1305.69 | 33.3821 | 40.5867 | 41.4067 | 87.70674 | 82.188623 | 74.87515728 | 74.97725064 | 63.59227335 | 84.98997361 |
SVT-AV1 | BigBuckBunny CRF35 VQ | 34.039 | 1432.71 | 33.4972 | 40.8966 | 41.5483 | 87.790515 | 82.249598 | 75.77570949 | 75.86107014 | 64.25930676 | 86.08970133 |
SVT-AV1 | BigBuckBunny CRF35 SSIM | 31.926 | 1301.26 | 33.4781 | 40.7613 | 41.5222 | 87.644933 | 82.07868 | 75.14899784 | 75.34139171 | 63.89165676 | 85.37767059 |
x265 | BigBuckBunny CRF18 | 6.68 | 4334.79 | 33.8165 | 41.352 | 42.3812 | 88.496245 | 83.188079 | 83.24602058 | 83.40918464 | 78.01967156 | 87.57657407 |
SVT-AV1 | BigBuckBunny CRF30 | 31.806 | 1843.32 | 33.7512 | 41.3003 | 42.043 | 88.153931 | 82.723244 | 78.85317925 | 78.87951009 | 69.75914376 | 87.17429615 |
SVT-AV1 | BigBuckBunny CRF30 QM | 31.701 | 1810.23 | 33.7239 | 41.1964 | 41.9703 | 88.161816 | 82.745566 | 78.79998864 | 78.83792127 | 69.77388681 | 87.09225295 |
SVT-AV1 | BigBuckBunny CRF30 QM Min0 | 31.602 | 1766.73 | 33.6135 | 41.0278 | 41.8223 | 88.077043 | 82.657963 | 78.30231156 | 78.36263621 | 69.29068078 | 86.43200391 |
SVT-AV1 | BigBuckBunny CRF30 VQ | 33.204 | 1947.9 | 33.7393 | 41.3689 | 42.0001 | 88.171916 | 82.733681 | 79.2659128 | 79.29272234 | 70.15623321 | 87.64869908 |
SVT-AV1 | BigBuckBunny CRF30 SSIM | 31.3 | 1773.06 | 33.7302 | 41.2343 | 41.9781 | 88.039656 | 82.574113 | 78.67407409 | 78.8737613 | 69.61758813 | 86.97921263 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | 特殊 | |||
x265 | ElephantsDream CRF22 | 7.73 | 3041 | 32.7897 | 44.5506 | 44.2398 | 83.679159 | 77.135198 | 77.79793375 | 78.10156956 | 69.98188935 | 83.80652456 |
SVT-AV1 | ElephantsDream CRF35 P3 | 28.329 | 1580.03 | 32.732 | 44.8539 | 44.097 | 83.397669 | 76.747974 | 73.73228925 | 73.37285235 | 54.8578593 | 93.57457526 |
SVT-AV1 | ElephantsDream CRF35 QM | 28.297 | 1577.01 | 32.7234 | 44.85 | 44.0883 | 83.403132 | 76.755183 | 73.73402693 | 73.37710154 | 54.97472344 | 93.56296734 |
SVT-AV1 | ElephantsDream CRF35 QM Min0 | 28.546 | 1554.96 | 32.6843 | 44.8147 | 44.0403 | 83.372865 | 76.725816 | 73.45726871 | 73.05525303 | 54.67047875 | 93.51371218 |
SVT-AV1 | ElephantsDream CRF35 VQ | 28.784 | 1658.06 | 32.7453 | 44.7811 | 44.0312 | 83.459934 | 76.814418 | 74.1484241 | 73.84100191 | 55.4064291 | 93.5169439 |
SVT-AV1 | ElephantsDream CRF35 SSIM | 28.038 | 1538.13 | 32.705 | 44.8079 | 44.0565 | 83.268914 | 76.577435 | 73.52346418 | 73.17031873 | 55.30870611 | 93.05800747 |
x265 | ElephantsDream CRF18 | 6.11 | 5120.43 | 33.23 | 45.4838 | 45.1058 | 84.281309 | 77.912665 | 83.24602058 | 83.40918464 | 78.01967156 | 87.57657407 |
SVT-AV1 | ElephantsDream CRF30 P3 | 27.78 | 2253.69 | 32.9889 | 45.2554 | 44.5165 | 83.837285 | 77.317822 | 77.95534397 | 77.6063332 | 63.26160259 | 94.46343097 |
SVT-AV1 | ElephantsDream CRF30 QM | 27.516 | 2241.62 | 32.9777 | 45.2444 | 44.4971 | 83.838933 | 77.320776 | 77.92935682 | 77.58905525 | 63.31099239 | 94.5150659 |
SVT-AV1 | ElephantsDream CRF30 QM Min0 | 27.992 | 2202.75 | 32.9266 | 45.197 | 44.4345 | 83.801251 | 77.282728 | 77.57799079 | 77.16378592 | 62.90816047 | 94.43395281 |
ElephantsDream CRF30 VQ | 28.319 | 2350.97 | 32.9975 | 45.1853 | 44.452 | 83.893225 | 77.376995 | 78.28962734 | 77.96771217 | 63.73580664 | 94.47657123 | |
SVT-AV1 | ElephantsDream CRF30 SSIM | 27.445 | 2194.22 | 32.9654 | 45.2091 | 44.4717 | 83.734283 | 77.179085 | 77.76087565 | 77.42435303 | 63.51118754 | 93.97271621 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | 特殊 | |||
x265 | SolLevante CRF22 | 2.73 | 19648.8 | 20.9812 | 38.0531 | 35.0405 | 98.125428 | 96.795521 | 55.88148851 | 52.56807147 | -2.62235865 | 100 |
SVT-AV1 | SolLevante CRF35 P3 | 4.334 | 15048.56 | 37.4796 | 41.301 | 42.1299 | 98.234294 | 96.876956 | 65.97162016 | 59.94357483 | 32.53194259 | 100 |
SVT-AV1 | SolLevante CRF35 P3 QM | 4.379 | 15081.03 | 37.4796 | 41.301 | 42.1299 | 98.234294 | 96.876956 | 66.03889685 | 60.02430719 | 32.57622116 | 98.68322379 |
SVT-AV1 | SolLevante CRF35 P3 QM Min0 | 4.377 | 14778.57 | 37.4555 | 41.2608 | 42.0718 | 98.231956 | 96.875528 | 65.73858934 | 59.78007333 | 32.03486931 | 98.68322379 |
SVT-AV1 | SolLevante CRF35 P3 VQ | 4.399 | 15332.42 | 37.4686 | 41.3226 | 42.1316 | 98.235196 | 96.859568 | 66.23793043 | 60.0486379 | 32.76133609 | 98.81171438 |
SVT-AV1 | SolLevante CRF35 P3 SSIM | 4.111 | 16413.47 | 31.4607 | 41.8239 | 39.4703 | 98.078654 | 96.63514 | 65.28679182 | 59.20220066 | 31.85868858 | 100 |
x265 | SolLevante CRF18 | 2.39 | 32862.36 | 21.0524 | 38.4039 | 35.275 | 98.951545 | 98.200316 | 68.8732738 | 67.24602694 | 28.23977369 | 99.82971151 |
SVT-AV1 | SolLevante CRF30 P3 | 4.336 | 21280.89 | 37.8511 | 41.6377 | 42.6135 | 98.615379 | 97.452872 | 72.01245585 | 66.82872302 | 45.26125476 | 99.29705787 |
SVT-AV1 | SolLevante CRF30 P3 QM | 4.333 | 21167.47 | 37.8514 | 41.6337 | 42.6076 | 98.622843 | 97.462467 | 72.03421424 | 66.91038305 | 45.2452499 | 100 |
SVT-AV1 | SolLevante CRF30 P3 QM Min0 | 4.409 | 20672.63 | 37.8158 | 41.5928 | 42.5431 | 98.601947 | 97.42399 | 71.617254 | 66.48754073 | 44.37356138 | 100 |
SVT-AV1 | SolLevante CRF30 P3 VQ | 4.432 | 21665.26 | 37.4686 | 41.3226 | 42.1316 | 98.63212 | 97.439903 | 72.33149666 | 67.03434155 | 45.6597599 | 100 |
SVT-AV1 | SolLevante CRF30 P3 SSIM | 4.383 | 20008.12 | 37.3834 | 41.2295 | 42.0278 | 98.078654 | 96.63514 | 71.49626144 | 66.1878533 | 44.68539708 | 100 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | 特殊 | |||
x265 | MAIDRAGON CRF22 | 23.73 | 1945.67 | 40.8455 | 42.8648 | 43.3141 | 85.672864 | 78.839019 | 73.91282871 | 77.92521321 | 46.40877591 | 85.66813206 |
SVT-AV1 | MAIDRAGON CRF35 P3 | 35.645 | 1289.57 | 31.5394 | 38.5571 | 38.5871 | 85.898294 | 79.145894 | 77.79595955 | 80.76951847 | 55.35706082 | 87.21367204 |
SVT-AV1 | MAIDRAGON CRF35 QM | 35.269 | 1264.48 | 31.5227 | 38.4858 | 38.5249 | 85.894749 | 79.146527 | 77.6988655 | 80.69600714 | 55.34029248 | 87.02358295 |
SVT-AV1 | MAIDRAGON CRF35 QM Min0 | 35.512 | 1258.04 | 31.4662 | 38.3831 | 38.4344 | 85.853214 | 79.101217 | 77.31179694 | 80.33342245 | 54.98487067 | 86.47179056 |
SVT-AV1 | MAIDRAGON CRF35 VQ | 37.573 | 1358.55 | 31.5195 | 38.5399 | 38.5579 | 85.82704 | 79.043595 | 78.18404438 | 81.09807098 | 56.4178064 | 87.3149899 |
SVT-AV1 | MAIDRAGON CRF35 SSIM | 34.559 | 1220.44 | 31.5036 | 38.4679 | 38.5017 | 85.782189 | 78.989417 | 77.31163552 | 79.89184789 | 55.58016882 | 87.02450024 |
x265 | MAIDRAGON CRF18 | 21.06 | 3162.45 | 42.5171 | 44.2124 | 44.547 | 86.089327 | 79.410981 | 80.15751958 | 82.75859474 | 62.41689237 | 88.08307654 |
SVT-AV1 | MAIDRAGON CRF30 P3 | 34.714 | 1746.96 | 31.6802 | 38.7924 | 38.8041 | 86.088653 | 79.403111 | 80.7293233 | 83.2105695 | 62.57713789 | 88.27199543 |
SVT-AV1 | MAIDRAGON CRF30 QM | 34.394 | 1701.28 | 31.6603 | 38.7179 | 38.7374 | 86.085526 | 79.402306 | 80.59807135 | 83.09262696 | 62.58511914 | 88.03572868 |
SVT-AV1 | MAIDRAGON CRF30 QM Min0 | 34.683 | 1678.91 | 31.5949 | 38.6159 | 38.6444 | 86.04816 | 79.360748 | 80.13878722 | 82.67207598 | 62.1303331 | 87.57267954 |
SVT-AV1 | MAIDRAGON CRF30 VQ | 36.461 | 1841.98 | 31.6595 | 38.7775 | 38.7775 | 86.030722 | 79.317153 | 81.0576056 | 83.45341781 | 63.52342983 | 88.37986377 |
SVT-AV1 | MAIDRAGON CRF30 SSIM | 33.994 | 1665.26 | 31.6558 | 38.7259 | 38.7405 | 86.009089 | 79.289779 | 80.37004198 | 82.49914773 | 62.83002581 | 88.19626015 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | 特殊 | |||
x265 | HYOUKA CRF22 | 26.26 | 827.47 | 39.3288 | 42.407 | 42.984 | 88.251216 | 82.140527 | 74.36000528 | 75.52608593 | 60.49981158 | 83.57375015 |
SVT-AV1 | HYOUKA CRF35 P3 | 44.83 | 626 | 33.0814 | 41.2298 | 41.8182 | 88.520954 | 82.506768 | 79.82507743 | 81.09452443 | 67.96711951 | 86.41015394 |
SVT-AV1 | HYOUKA CRF35 QM | 45.157 | 616 | 33.073 | 41.1885 | 41.7834 | 88.522282 | 82.511748 | 79.80505612 | 81.06671569 | 67.99861326 | 86.31858358 |
SVT-AV1 | HYOUKA CRF35 QM Min0 | 45.103 | 605.16 | 33.0321 | 41.1181 | 41.7172 | 88.466964 | 82.44809 | 79.57465176 | 80.79647596 | 67.84670635 | 86.04946409 |
SVT-AV1 | HYOUKA CRF35 VQ | 46.994 | 664.75 | 33.0548 | 41.1949 | 41.7885 | 88.473032 | 82.430565 | 80.11321607 | 81.29575302 | 68.60815332 | 86.5242701 |
SVT-AV1 | HYOUKA CRF35 SSIM | 44.168 | 604.44 | 33.0569 | 41.1617 | 41.7536 | 88.418474 | 82.371516 | 79.60067877 | 80.69420144 | 67.8288596 | 86.27542652 |
x265 | HYOUKA CRF18 | 24.57 | 1381.65 | 40.4798 | 43.4753 | 43.8205 | 88.690842 | 82.720369 | 79.68937613 | 80.29604784 | 71.18435582 | 86.6893906 |
SVT-AV1 | HYOUKA CRF30 P3 | 43.113 | 849.51 | 33.2199 | 41.4836 | 42.0629 | 88.706578 | 82.750268 | 82.03787385 | 83.02565519 | 72.68777288 | 87.46544644 |
SVT-AV1 | HYOUKA CRF30 QM | 43.246 | 830.18 | 33.2107 | 41.4386 | 42.0205 | 88.707766 | 82.756303 | 82.00116606 | 82.99097252 | 72.65484942 | 87.35281267 |
SVT-AV1 | HYOUKA CRF30 QM Min0 | 43.43 | 807.47 | 33.1681 | 41.3567 | 41.9452 | 88.663308 | 82.705071 | 81.74212195 | 82.69693318 | 72.40613868 | 87.023253 |
SVT-AV1 | HYOUKA CRF30 VQ | 44.81 | 907.2 | 33.1894 | 41.4471 | 42.0314 | 88.664737 | 82.685052 | 82.2466764 | 83.14431623 | 73.1824835 | 87.50851431 |
SVT-AV1 | HYOUKA CRF30 SSIM | 42.132 | 821.58 | 33.2012 | 41.4268 | 42.0096 | 88.63298 | 82.651362 | 81.8559474 | 82.74166944 | 72.57400971 | 87.35136827 |
注:“高暂停画质”指 Still-image tuning。
--preset 3 --crf 30 --enable-qm 1 --qm-min 2 --tune 0
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 2 --tune 0 -b .\SolLevante_yuv420p10le_bt709_CRF30_qmMin2_Tune0.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 691552791 21029.16 kbps
Channel 1
Average Speed: 4.434 fps
Total Encoding Time: 1424006 ms
Total Execution Time: 1425096 ms
Average Latency: 80656 ms
Max Latency: 176001 ms
XPSNR average, 6314 frames y: 37.8142 u: 41.6312 v: 42.5653 (minimum: 37.8142)
VMAF 4k: 98.626000, VMAF 1080p: 97.451733
SSIMULACRA2_rs: Mean: 71.52760837 Median: 66.53989790 Std Dev: 19.01065963 5th Percentile: 44.47004001 95th Percentile: 99.71058625
--preset 3 --crf 30 --enable-qm 1 --qm-min 2 --tune 0 --enable-variance-boost 1 --variance-boost-strength 1 --variance-boost-curve 2
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 2 --tune 0 --enable-variance-boost 1 --variance-boost-curve 2 --variance-boost-strength 1 -b .\SolLevante_yuv420p10le_bt709_CRF30_qmMin2_Tune0_VarBoost2_BoostStrength1.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 934195069 28407.58 kbps
Channel 1
Average Speed: 3.935 fps
Total Encoding Time: 1604714 ms
Total Execution Time: 1605766 ms
Average Latency: 91289 ms
Max Latency: 200428 ms
XPSNR average, 6314 frames y: 38.1206 u: 41.9041 v: 42.9981 (minimum: 38.1206)
VMAF 4k: 98.787193, VMAF 1080p: 97.657617
SSIMULACRA2_rs: Mean: 77.11751053 Median: 73.30616969 Std Dev: 14.77053796 5th Percentile: 56.12591123 95th Percentile: 99.70758759
--preset 3 --crf 30 --enable-qm 1 --qm-min 2 --tune 0 --enable-variance-boost 1 --variance-boost-strength 2 --variance-boost-curve 2
(默认:variance-boost-strength 2):
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 2 --tune 0 --enable-variance-boost 1 --variance-boost-strength 2 --variance-boost-curve 2 -b .\SolLevante_yuv420p10le_bt709_CRF30_qmMin2_Tune0_VarBoostCurve2.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 1054592259 32068.69 kbps
Channel 1
Average Speed: 3.783 fps
Total Encoding Time: 1669072 ms
Total Execution Time: 1670178 ms
Average Latency: 95345 ms
Max Latency: 206596 ms
XPSNR average, 6314 frames y: 38.2139 u: 42.0063 v: 43.1546 (minimum: 38.2139)
VMAF 4k: 98.855014, VMAF 1080p: 97.758044
SSIMULACRA2_rs: Mean: 78.55870691 Median: 74.84582529 Std Dev: 13.70934750 5th Percentile: 59.02903995 95th Percentile: 100.00000000
--preset 3 --crf 30 --enable-qm 1 --qm-min 2 --tune 0 --enable-variance-boost 1 --variance-boost-strength 3
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 2 --tune 0 --enable-variance-boost 1 --variance-boost-strength 3 -b .\SolLevante_yuv420p10le_bt709_CRF30_qmMin2_Tune0_VarBoost_BoostStrength3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 1003134687 30503.94 kbps
Channel 1
Average Speed: 3.715 fps
Total Encoding Time: 1699740 ms
Total Execution Time: 1700756 ms
Average Latency: 97186 ms
Max Latency: 212994 ms
XPSNR average, 6314 frames y: 38.1868 u: 41.9916 v: 43.1142 (minimum: 38.1868)
VMAF 4k: 98.806389, VMAF 1080p: 97.692013
SSIMULACRA2_rs: Mean: 77.84789625 Median: 74.02788802 Std Dev: 14.29035779 5th Percentile: 57.78096614 95th Percentile: 100.00000000
--preset 3 --crf 30 --enable-variance-boost 1 --variance-boost-curve 2 --variance-boost-strength 3
(Tune 默认):
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-variance-boost 1 --variance-boost-curve 2 --variance-boost-strength 3 -b .\SolLevante_yuv420p10le_bt709_CRF30_qmMin2_VarBoost1_BoostCurve2_BoostStrength3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 1244688788 37849.26 kbps
Channel 1
Average Speed: 3.680 fps
Total Encoding Time: 1715892 ms
Total Execution Time: 1716984 ms
Average Latency: 97946 ms
Max Latency: 217733 ms
XPSNR average, 6314 frames y: 38.2583 u: 42.0998 v: 43.2996 (minimum: 38.2583)
VMAF 4k: 99.255388, VMAF 1080p: 98.668085
SSIMULACRA2_rs: Mean: 79.03375770 Median: 75.19569402 Std Dev: 13.30729640 5th Percentile: 60.18905311 95th Percentile: 100.00000000
--preset 3 --crf 30 --enable-qm 1 --qm-min 2 --tune 0 --variance-octile 4
:结果与本轮首项完全一致
--preset 3 --crf 30 --enable-qm 1 --qm-min 2 --tune 0 --variance-octile 8
:结果与本轮首项完全一致
--preset 3 --crf 30 --enable-qm 1 --qm-min 2 --tune 0 --variance-octile 2 --enable-variance-boost 1 --variance-boost-strength 2 --variance-boost-curve 2
(默认:variance-boost-strength 2):
ffmpeg -i .\Netflix_Boat_4096x2160_60fps_10bit_420.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-qm 1 --qm-min 2 --tune 0 --variance-octile 2 --enable-variance-boost 1 --variance-boost-strength 2 --variance-boost-curve 2 -b .\SolLevante_yuv420p10le_bt709_CRF30_qmMin2_Tune0_.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 1305987436 39713.27 kbps
Channel 1
Average Speed: 3.695 fps
Total Encoding Time: 1708864 ms
Total Execution Time: 1710030 ms
Average Latency: 97679 ms
Max Latency: 209255 ms
XPSNR average, 6314 frames y: 38.4039 u: 42.2333 v: 43.4886 (minimum: 38.4039)
VMAF 4k: 98.995607, VMAF 1080p: 97.949086
SSIMULACRA2_rs: Mean: 80.73591880 Median: 77.06076447 Std Dev: 12.30163252 5th Percentile: 62.63733727 95th Percentile: 100.00000000
--preset 3 --crf 30 --tune 0 --enable-variance-boost 1 --variance-boost-curve 2 --variance-boost-strength 3
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --enable-variance-boost 1 --variance-boost-curve 2 --variance-boost-strength 3 -b .\SolLevante_yuv420p10le_bt709_CRF30_qmMin2_Tune0_VarBoost_BoostCurve2_BoostStrength3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 1484772034 45149.86 kbps
Channel 1
Average Speed: 3.597 fps
Total Encoding Time: 1755190 ms
Total Execution Time: 1756264 ms
Average Latency: 100118 ms
Max Latency: 219874 ms
XPSNR average, 6314 frames y: 38.3074 u: 42.1168 v: 43.3133 (minimum: 38.3074)
VMAF 4k: 98.883611, VMAF 1080p: 97.775126
SSIMULACRA2_rs: 79.82330296 Median: 76.53311341 Std Dev: 12.67870103 5th Percentile: 61.14050056 95th Percentile: 99.69831884
--preset 3 --crf 30 --variance-octile 2 --enable-variance-boost 1 --variance-boost-curve 2 --variance-boost-strength 3
:
ffmpeg -i .\SolLevante_yuv420p10le_bt709_3840x2160_24fps_yuv420p10le.mkv -f yuv4mpegpipe -pix_fmt yuv420p10le -strict unofficial - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --variance-octile 2 --enable-variance-boost 1 --variance-boost-curve 2 --variance-boost-strength 3 -b .\SolLevante_yuv420p10le_bt709_CRF30_PSNR_VarOct2_VarBoost_BoostCurve2_BoostStrength3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
6314 24.00 fps 1271444001 38662.85 kbps
Channel 1
Average Speed: 3.554 fps
Total Encoding Time: 1776600 ms
Total Execution Time: 1777736 ms
Average Latency: 101301 ms
Max Latency: 226049 ms
XPSNR average, 6314 frames y: 38.3566 u: 42.2197 v: 43.4743 (minimum: 38.3566)
VMAF 4k: 98.993032, VMAF 1080p: 97.920108
SSIMULACRA2_rs: Mean: 79.07579506 Median: 75.54317772 Std Dev: 13.21970057 5th Percentile: 59.66073892 95th Percentile: 99.71539232
SVT-AV1 编码选项 | 速度 fps | 码率 kbps | XPSNR-Y dB | XPSNR-U dB | XPSNR-V dB | VMAF 4k | VMAF 1080p | S2.1:均值 | S2.1:中位 | S2.1:第 5% | S2.1:第 95% |
---|---|---|---|---|---|---|---|---|---|---|---|
SolLevante CRF30 P3 | 4.336 | 21280.89 | 37.8511 | 41.6377 | 42.6135 | 98.615379 | 97.452872 | 72.01245585 | 66.82872302 | 45.26125476 | 99.29705787 |
SolLevante CRF30 P3 QM | 4.333 | 21167.47 | 37.8514 | 41.6337 | 42.6076 | 98.622843 | 97.462467 | 72.03421424 | 66.91038305 | 45.2452499 | 100 |
SolLevante CRF30 P3 QM Min0 | 4.409 | 20672.63 | 37.8158 | 41.5928 | 42.5431 | 98.601947 | 97.42399 | 71.617254 | 66.48754073 | 44.37356138 | 100 |
SolLevante CRF30 P3 VQ | 4.432 | 21665.26 | 37.4686 | 41.3226 | 42.1316 | 98.63212 | 97.439903 | 72.33149666 | 67.03434155 | 45.6597599 | 100 |
SolLevante CRF30 P3 SSIM | 4.383 | 20008.12 | 37.3834 | 41.2295 | 42.0278 | 98.078654 | 96.63514 | 71.49626144 | 66.1878533 | 44.68539708 | 100 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | |||
SolLevante CRF30 P3 QM Min2 VQ | 4.434 | 21029.16 | 37.8142 | 41.6312 | 42.5653 | 98.626000 | 97.451733 | 71.52760837 | 66.53989790 | 44.47004001 | 99.71058625 |
SolLevante CRF30 P3 QM Min2 VQ VB-Curve2Strength1 | 3.935 | 28407.58 | 38.1206 | 41.9041 | 42.9981 | 98.787193 | 97.657617 | 77.11751053 | 73.02775126 | 56.12591123 | 99.70758759 |
SolLevante CRF30 P3 QM Min2 VQ VB-Curve2Strength2 | 3.783 | 32068.69 | 38.2139 | 42.0063 | 43.1546 | 98.855014 | 97.758044 | 78.75015548 | 75.21661802 | 59.31524830 | 99.70655998 |
SolLevante CRF30 P3 QM Min2 PSNR VB-Strength3 | 3.715 | 30503.94 | 38.1868 | 41.9916 | 43.1142 | 98.806389 | 97.692013 | 79.0337577 | 75.19569402 | 60.18905311 | 100 |
SolLevante CRF30 P3 QM Min2 VQ VarOct2 VB-Curve2Strength2 | 3.680 | 37849.26 | 38.2583 | 42.0998 | 43.2996 | 99.255388 | 98.668085 | 80.73591880 | 77.06076447 | 62.63733727 | 100 |
SolLevante CRF30 P3 PSNR VarOct2 VB-Curve2Strength3 | 3.597 | 45149.86 | 38.3074 | 42.1168 | 43.3133 | 98.883611 | 97.775126 | 79.82330296 | 76.53311341 | 61.14050056 | 99.69831884 |
SolLevante CRF30 P3 VQ VB-Curve2Strength3 | 3.554 | 38662.85 | 38.4039 | 42.2333 | 43.4886 | 98.993032 | 97.920108 | 79.07579506 | 75.54317772 | 59.66073892 | 99.71539232 |
--variance-boost-strength 3
的增益不如 --variance-boost-curve 2
好--preset 3 --crf 30 --enable-tf 2 --tf-strength 1
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-tf 2 --tf-strength 1 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_preset3_tf2-Strength1.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 187264735 2291.43 kbps
Channel 1
Average Speed: 27.095 fps
Total Encoding Time: 579110 ms
Total Execution Time: 579464 ms
Average Latency: 12984 ms
Max Latency: 35644 ms
XPSNR average, 15691 frames y: 33.0077 u: 45.2598 v: 44.5232 (minimum: 33.0077)
VMAF 4k: 83.883905, VMAF 1080p: 77.371160
SSIMULACRA2_rs: Mean: 78.22777773 Median: 77.90825341 Std Dev: 9.02169880 5th Percentile: 63.48438667 95th Percentile: 94.69709169
--preset 3 --crf 30 --enable-tf 2 --tf-strength 2
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-tf 2 --tf-strength 2 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_preset3_tf2-Strength2.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 187348255 2292.45 kbps
Channel 1
Average Speed: 27.074 fps
Total Encoding Time: 579550 ms
Total Execution Time: 579938 ms
Average Latency: 12990 ms
Max Latency: 35438 ms
XPSNR average, 15691 frames y: 33.0076 u: 45.2605 v: 44.5243 (minimum: 33.0076)
VMAF 4k: 83.883826, VMAF 1080p: 77.371034
SSIMULACRA2_rs: Mean: Mean: 78.22557615 Median: 77.90530599 Std Dev: 9.01950210 5th Percentile: 63.51705712 95th Percentile: 94.67345211
--preset 3 --crf 30 --enable-tf 2 --tf-strength 3
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-tf 2 --tf-strength 3 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_preset3_tf2-Strength3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 187286565 2291.70 kbps
Channel 1
Average Speed: 27.083 fps
Total Encoding Time: 579376 ms
Total Execution Time: 579720 ms
Average Latency: 12987 ms
Max Latency: 35645 ms
XPSNR average, 15691 frames y: 33.0074 u: 45.2613 v: 44.5211 (minimum: 33.0074)
VMAF 4k: 83.880991, VMAF 1080p: 77.368641
SSIMULACRA2_rs: Mean: 78.22252190 Median: 77.91453155 Std Dev: 9.02118174 5th Percentile: 63.50577407 95th Percentile: 94.67894894
--preset 3 --crf 30 --enable-tf 2 --tf-strength 4
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --enable-tf 2 --tf-strength 4 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_preset3_tf2-Strength4.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 187340016 2292.35 kbps
Channel 1
Average Speed: 27.089 fps
Total Encoding Time: 579230 ms
Total Execution Time: 579684 ms
Average Latency: 12993 ms
Max Latency: 35463 ms
XPSNR average, 15691 frames y: 33.0074 u: 45.2620 v: 44.5231 (minimum: 33.0074)
VMAF 4k: 83.875521, VMAF 1080p: 77.365725
SSIMULACRA2_rs: Mean: 78.22642014 Median: 77.90742740 Std Dev: 9.02076622 5th Percentile: 63.54598795 95th Percentile: 94.68495096
--preset 3 --crf 30 --tune 0 --enable-tf 2 --tf-strength 1
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --enable-tf 2 --tf-strength 1 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_tuneVQ_preset3_tf2-Strength1.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 193999864 2373.84 kbps
Channel 1
Average Speed: 27.559 fps
Total Encoding Time: 569370 ms
Total Execution Time: 569814 ms
Average Latency: 12745 ms
Max Latency: 34960 ms
XPSNR average, 15691 frames y: 33.0033 u: 45.1779 v: 44.4447 (minimum: 33.0033)
VMAF 4k: 83.923292, VMAF 1080p: 77.415802
SSIMULACRA2_rs: Mean: 78.34140551 Median: 78.02652168 Std Dev: 8.94275489 5th Percentile: 63.69285703 95th Percentile: 94.68040064
--preset 3 --crf 30 --tune 0 --enable-tf 2 --tf-strength 2
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --enable-tf 2 --tf-strength 2 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_tuneVQ_preset3_tf2-Strength2.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 193934908 2373.05 kbps
Channel 1
Average Speed: 27.553 fps
Total Encoding Time: 569480 ms
Total Execution Time: 569806 ms
Average Latency: 12751 ms
Max Latency: 34618 ms
XPSNR average, 15691 frames y: 33.0032 u: 45.1805 v: 44.4446 (minimum: 33.0032)
VMAF 4k: 83.917920, VMAF 1080p: 77.411099
SSIMULACRA2_rs: Mean: 78.34621137 Median: 78.03496570 Std Dev: 8.93514404 5th Percentile: 63.70885484 95th Percentile: 94.68040064
--preset 3 --crf 30 --tune 0 --enable-tf 2 --tf-strength 3
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --enable-tf 2 --tf-strength 3 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_tuneVQ_preset3_tf2-Strength3.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 194037522 2374.30 kbps
Channel 1
Average Speed: 27.679 fps
Total Encoding Time: 566892 ms
Total Execution Time: 567246 ms
Average Latency: 12698 ms
Max Latency: 34187 ms
XPSNR average, 15691 frames y: 33.0030 u: 45.1770 v: 44.4432 (minimum: 33.0030)
VMAF 4k: 83.919227, VMAF 1080p: 77.410876
SSIMULACRA2_rs: Mean: 78.34247749 Median: 78.03666873 Std Dev: 8.94058885 5th Percentile: 63.68956267 95th Percentile: 94.67801513
--preset 3 --crf 30 --tune 0 --enable-tf 2 --tf-strength 4
:
ffmpeg -i .\Elephants-Dream_1920x1080_24fps_8bit_yuv420.mkv -f yuv4mpegpipe - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --enable-tf 2 --tf-strength 4 -b .\Elephants-Dream_1920x1080_24fps_8bit_yuv420_crf30_tuneVQ_preset3_tf2-Strength4.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
15691 24.00 fps 193994872 2373.78 kbps
Channel 1
Average Speed: 27.608 fps
Total Encoding Time: 568352 ms
Total Execution Time: 568696 ms
Average Latency: 12725 ms
Max Latency: 34603 ms
XPSNR average, 15691 frames y: 33.0029 u: 45.1808 v: 44.4414 (minimum: 33.0029)
VMAF 4k: 83.919000, VMAF 1080p: 77.411903
SSIMULACRA2_rs: Mean: 78.34317414 Median: 78.04531049 Std Dev: 8.94038278 5th Percentile: 63.70302548 95th Percentile: 94.68040064
SVT-AV1 编码选项 | 速度 fps | 码率 kbps | XPSNR-Y dB | XPSNR-U dB | XPSNR-V dB | VMAF 4k | VMAF 1080p | S2.1:均值 | S2.1:中位 | S2.1:第 5% | S2.1:第 95% |
---|---|---|---|---|---|---|---|---|---|---|---|
ElephantsDream CRF30 P3 | 27.78 | 2253.69 | 32.9889 | 45.2554 | 44.5165 | 83.837285 | 77.317822 | 77.95534397 | 77.6063332 | 63.26160259 | 94.46343097 |
Elephants-Dream CRF30 P3 TF2-Strength1 | 27.095 | 2291.43 | 33.0077 | 45.2598 | 44.5232 | 83.883905 | 77.371160 | 78.22777773 | 77.90825341 | 63.48438667 | 94.69709169 |
Elephants-Dream CRF30 P3 TF2-Strength2 | 27.074 | 2292.45 | 33.0076 | 45.2605 | 44.5243 | 83.883826 | 77.371034 | 78.22557615 | 77.90530599 | 63.51705712 | 94.67345211 |
Elephants-Dream CRF30 P3 TF2-Strength3 | 27.083 | 2291.70 | 33.0074 | 45.2613 | 44.5211 | 83.880991 | 77.368641 | 78.22252190 | 77.91453155 | 63.50577407 | 94.67894894 |
Elephants-Dream CRF30 P3 TF2-Strength4 | 27.089 | 2292.35 | 33.0074 | 45.2620 | 44.5231 | 83.875521 | 77.365725 | 78.22642014 | 77.90742740 | 63.54598795 | 94.68495096 |
字体颜色: | 视觉无损 | 优秀 | 良好 | 达标 | 待达标 | 背景颜色: | 第一 | 第二 | |||
ElephantsDream CRF30 VQ | 28.319 | 2350.97 | 32.9975 | 45.1853 | 44.452 | 83.893225 | 77.376995 | 78.28962734 | 77.96771217 | 63.73580664 | 94.47657123 |
Elephants-Dream CRF30 P3 VQ TF2-Strength1 | 27.559 | 2373.84 | 33.0033 | 45.1779 | 44.4447 | 83.923292 | 77.415802 | 78.34140551 | 78.02652168 | 63.69285703 | 94.68040064 |
Elephants-Dream CRF30 P3 VQ TF2-Strength2 | 27.553 | 2373.05 | 33.0032 | 45.1805 | 44.4446 | 83.917920 | 77.411099 | 78.34621137 | 78.03496570 | 63.70885484 | 94.68040064 |
Elephants-Dream CRF30 P3 VQ TF2-Strength3 | 27.679 | 2374.30 | 33.0030 | 45.1770 | 44.4432 | 83.919227 | 77.410876 | 78.34247749 | 78.03666873 | 63.68956267 | 94.67801513 |
Elephants-Dream CRF30 P3 VQ TF2-Strength4 | 27.608 | 2373.78 | 33.0029 | 45.1808 | 44.4414 | 83.919000 | 77.411903 | 78.34317414 | 78.04531049 | 63.70302548 | 94.68040064 |
--enable-tf 2
后都隐隐有些画质提升,但这明显是码率增加换来的--enable-tf 2
后,1920x1080 视频编码 fps 却下降了 0.707,而降低 CRF 非但能够达到同样的画质提升,并且不会拖累编码速度观察 FGS 对胶片颗粒片源的还原程度。不包括将 FGS 用于降噪(--film-grain-denoise
)的场景。
--preset 3 --crf 30 --tune 1
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 1 -b .\Ultraman1_crf30_preset3_tunePSNR.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 316918233 1669.85 kbps
Channel 1
Average Speed: 28.734 fps
Total Encoding Time: 1266902 ms
Total Execution Time: 1267234 ms
Average Latency: 12379 ms
Max Latency: 17555 ms
XPSNR average, 36403 frames y: 38.1204 u: 36.5504 v: 41.9289 (minimum: 36.5504)
VMAF 4k: 97.738160, VMAF 1080p: 95.464609
SSIMULACRA2_rs: Mean: 53.36636097 Median: 53.61311143 5th Percentile: 38.06738244 95th Percentile: 70.01810194
--preset 3 --crf 30 --tune 1 --film-grain 1
(经过 2 次反复压制和测量,得到与前者完全相同的分数):
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 1 --film-grain 1 -b .\Ultraman1_crf30_preset3_tunePSNR_fg1.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 318162662 1676.41 kbps
Channel 1
Average Speed: 21.955 fps
Total Encoding Time: 1658036 ms
Total Execution Time: 1658382 ms
Average Latency: 16205 ms
Max Latency: 24333 ms
XPSNR average, 36403 frames y: 38.1204 u: 36.5504 v: 41.9289 (minimum: 36.5504)
VMAF 4k: 97.738160, VMAF 1080p: 95.464609
SSIMULACRA2_rs: Mean: 53.36636097 Median: 53.61311143 Std Dev: 9.34304536 5th Percentile: 38.06738244 95th Percentile: 70.01810194
--preset 3 --crf 30 --tune 1 --film-grain 11
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 1 --film-grain 11 -b .\Ultraman1_crf30_preset3_tunePSNR_fg11.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 321332445 1693.11 kbps
Channel 1
Average Speed: 22.027 fps
Total Encoding Time: 1652640 ms
Total Execution Time: 1652962 ms
Average Latency: 16153 ms
Max Latency: 24457 ms
XPSNR average, 36403 frames y: 36.5453 u: 35.3250 v: 39.5036 (minimum: 35.3250)
VMAF 4k: 97.430726, VMAF 1080p: 95.150845
SSIMULACRA2_rs: Mean: 52.02663259 Median: 52.22005542 Std Dev: 9.37747875 5th Percentile: 36.72168384 95th Percentile: 68.78530314
--preset 3 --crf 30 --tune 1 --film-grain 21
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 1 --film-grain 21 -b .\Ultraman1_crf30_preset3_tunePSNR_fg21.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 321728662 1695.20 kbps
Channel 1
Average Speed: 22.029 fps
Total Encoding Time: 1652470 ms
Total Execution Time: 1652810 ms
Average Latency: 16152 ms
Max Latency: 24498 ms
XPSNR average, 36403 frames y: 35.5426 u: 34.1543 v: 39.0581 (minimum: 34.1543)
VMAF 4k: 97.235338, VMAF 1080p: 94.835942
SSIMULACRA2_rs: Mean: 49.62544972 Median: 49.86805064 Std Dev: 9.77985158 5th Percentile: 33.69016033 95th Percentile: 67.56729955
--preset 3 --crf 30 --tune 1 --film-grain 31
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 1 --film-grain 31 -b .\Ultraman1_crf30_preset3_tunePSNR_fg31.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 321841457 1695.79 kbps
Channel 1
Average Speed: 22.007 fps
Total Encoding Time: 1654172 ms
Total Execution Time: 1654562 ms
Average Latency: 16164 ms
Max Latency: 24477 ms
XPSNR average, 36403 frames y: 34.7929 u: 33.5515 v: 38.8744 (minimum: 33.5515)
VMAF 4k: 97.018645, VMAF 1080p: 94.371972
SSIMULACRA2_rs: Mean: 46.73252160 Median: 46.97122122 Std Dev: 10.31346476 5th Percentile: 29.83598684 95th Percentile: 65.91101183
--preset 3 --crf 30 --tune 1 --film-grain 41
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 1 --film-grain 41 -b .\Ultraman1_crf30_preset3_tunePSNR_fg41.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 321864382 1695.91 kbps
Channel 1
Average Speed: 22.052 fps
Total Encoding Time: 1650808 ms
Total Execution Time: 1651226 ms
Average Latency: 16129 ms
Max Latency: 24425 ms
XPSNR average, 36403 frames y: 34.3394 u: 33.2685 v: 38.7830 (minimum: 33.2685)
VMAF 4k: 96.762843, VMAF 1080p: 93.883978
SSIMULACRA2_rs: Mean: 44.27273142 Median: 44.12428627 Std Dev: 10.76909670 5th Percentile: 26.90948687 95th Percentile: 64.28934544
--preset 3 --crf 30 --tune 1 --film-grain 50
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 1 --film-grain 50 -b .\Ultraman1_crf30_preset3_tunePSNR_fg50.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 321868836 1695.93 kbps
Channel 1
Average Speed: 22.024 fps
Total Encoding Time: 1652896 ms
Total Execution Time: 1653330 ms
Average Latency: 16154 ms
Max Latency: 24494 ms
XPSNR average, 36403 frames y: 34.1353 u: 33.1400 v: 38.7444 (minimum: 33.1400)
VMAF 4k: 96.582379, VMAF 1080p: 93.552727
SSIMULACRA2_rs: Mean: 42.76394562 Median: 42.31747622 Std Dev: 11.03823324 5th Percentile: 25.38934990 95th Percentile: 63.16879872
--preset 3 --crf 30 --tune 0
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 -b .\Ultraman1_crf30_preset3_tuneVQ.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 390259160 2056.28 kbps
Channel 1
Average Speed: 28.810 fps
Total Encoding Time: 1263552 ms
Total Execution Time: 1263968 ms
Average Latency: 12306 ms
Max Latency: 18055 ms
XPSNR average, 36403 frames y: 38.1717 u: 36.5926 v: 41.8143 (minimum: 36.5926)
VMAF 4k: 97.748236, VMAF 1080p: 95.534197
SSIMULACRA2_rs: Mean: 54.83524211 Median: 54.41993554 Std Dev: 8.66763291 5th Percentile: 41.58288237 95th Percentile: 70.84131535
--preset 3 --crf 30 --tune 0 --film-grain 1
(经过 2 次反复压制和测量,得到与前者完全相同的分数):
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --film-grain 1 -b .\Ultraman1_crf30_preset3_tuneVQ_fg1.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 391493765 2062.79 kbps
Channel 1
Average Speed: 22.209 fps
Total Encoding Time: 1639144 ms
Total Execution Time: 1639594 ms
Average Latency: 15993 ms
Max Latency: 23741 ms
XPSNR average, 36403 frames y: 38.1717 u: 36.5926 v: 41.8143 (minimum: 36.5926)
VMAF 4k: 97.748236, VMAF 1080p: 95.534197
SSIMULACRA2_rs: Mean: 54.83524211 Median: 54.41993554 Std Dev: 8.66763291 5th Percentile: 41.58288237 95th Percentile: 70.84131535
--preset 3 --crf 30 --tune 0 --film-grain 11
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --film-grain 11 -b .\Ultraman1_crf30_preset3_tuneVQ_fg11.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 394668008 2079.51 kbps
Channel 1
Average Speed: 22.115 fps
Total Encoding Time: 1646090 ms
Total Execution Time: 1646434 ms
Average Latency: 16058 ms
Max Latency: 23908 ms
XPSNR average, 36403 frames y: 36.5799 u: 35.3581 v: 39.4388 (minimum: 35.3581)
VMAF 4k: 97.464271, VMAF 1080p: 95.226487
SSIMULACRA2_rs: Mean: 53.45703914 Median: 53.01872083 Std Dev: 8.70676988 5th Percentile: 40.16894954 95th Percentile: 69.53730410
--preset 3 --crf 30 --tune 0 --film-grain 21
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --film-grain 21 -b .\Ultraman1_crf30_preset3_tuneVQ_fg21.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 395064237 2081.60 kbps
Channel 1
Average Speed: 22.149 fps
Total Encoding Time: 1643546 ms
Total Execution Time: 1643882 ms
Average Latency: 16028 ms
Max Latency: 23919 ms
XPSNR average, 36403 frames y: 35.5684 u: 34.1787 v: 38.9998 (minimum: 34.1787)
VMAF 4k: 97.262789, VMAF 1080p: 94.883521
SSIMULACRA2_rs: Mean: 50.99531869 Median: 50.63241591 Std Dev: 9.08637598 5th Percentile: 37.08947938 95th Percentile: 67.80717058
--preset 3 --crf 30 --tune 0 --film-grain 31
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --film-grain 31 -b .\Ultraman1_crf30_preset3_tuneVQ_fg31.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 395177029 2082.20 kbps
Channel 1
Average Speed: 22.157 fps
Total Encoding Time: 1642990 ms
Total Execution Time: 1643366 ms
Average Latency: 16024 ms
Max Latency: 23924 ms
XPSNR average, 36403 frames y: 34.8137 u: 33.5719 v: 38.8185 (minimum: 33.5719)
VMAF 4k: 97.033814, VMAF 1080p: 94.387931
SSIMULACRA2_rs: Mean: 48.03797050 Median: 47.79390298 Std Dev: 9.60530147 5th Percentile: 33.26269500 95th Percentile: 66.06963942
--preset 3 --crf 30 --tune 0 --film-grain 41
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --film-grain 41 -b .\Ultraman1_crf30_preset3_tuneVQ_fg41.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 395199954 2082.32 kbps
Channel 1
Average Speed: 22.178 fps
Total Encoding Time: 1641378 ms
Total Execution Time: 1641798 ms
Average Latency: 16014 ms
Max Latency: 23839 ms
XPSNR average, 36403 frames y: 34.3581 u: 33.2872 v: 38.7283 (minimum: 33.2872)
VMAF 4k: 96.766543, VMAF 1080p: 93.875865
SSIMULACRA2_rs: Mean: 45.53317193 Median: 44.99403922 Std Dev: 10.08795588 5th Percentile: 30.26585740 95th Percentile: 64.44994167
--preset 3 --crf 30 --tune 0 --film-grain 50
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 0 --film-grain 50 -b .\Ultraman1_crf30_preset3_tuneVQ_fg50.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 395204406 2082.34 kbps
Channel 1
Average Speed: 22.195 fps
Total Encoding Time: 1640178 ms
Total Execution Time: 1640588 ms
Average Latency: 15993 ms
Max Latency: 23924 ms
XPSNR average, 36403 frames y: 34.1539 u: 33.1581 v: 38.6901 (minimum: 33.1581)
VMAF 4k: 96.580212, VMAF 1080p: 93.532338
SSIMULACRA2_rs: Mean: 44.00013351 Median: 43.23395239 Std Dev: 10.38802104 5th Percentile: 28.67493008 95th Percentile: 63.32191585
--preset 3 --crf 30 --tune 2
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 -b .\Ultraman1_crf30_preset3_tuneSSIM.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 329752895 1737.48 kbps
Channel 1
Average Speed: 28.113 fps
Total Encoding Time: 1294898 ms
Total Execution Time: 1295248 ms
Average Latency: 12658 ms
Max Latency: 18755 ms
XPSNR average, 36403 frames y: 38.1953 u: 36.5190 v: 41.8161 (minimum: 36.5190)
VMAF 4k: 97.656883, VMAF 1080p: 95.386084
SSIMULACRA2_rs: Mean: 54.10919247 Median: 54.33234161 Std Dev: 8.74666428 5th Percentile: 39.54388416 95th Percentile: 69.48821685
--preset 3 --crf 30 --tune 2 --film-grain 1
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 --film-grain 1 -b .\Ultraman1_crf30_preset3_tuneSSIM_fg1.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 330999316 1744.04 kbps
Channel 1
Average Speed: 21.698 fps
Total Encoding Time: 1677690 ms
Total Execution Time: 1678030 ms
Average Latency: 16411 ms
Max Latency: 24998 ms
XPSNR average, 36403 frames y: 38.1953 u: 36.5190 v: 41.8161 (minimum: 36.5190)
VMAF 4k: 97.656883, VMAF 1080p: 95.386084
SSIMULACRA2_rs: Mean: 54.10919247 Median: 54.33234161 Std Dev: 8.74666428 5th Percentile: 39.54388416 95th Percentile: 69.48821685
--preset 3 --crf 30 --tune 2 --film-grain 11
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 --film-grain 11 -b .\Ultraman1_crf30_preset3_tuneSSIM_fg11.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 334168311 1760.74 kbps
Channel 1
Average Speed: 21.693 fps
Total Encoding Time: 1678098 ms
Total Execution Time: 1678426 ms
Average Latency: 16411 ms
Max Latency: 24663 ms
XPSNR average, 36403 frames y: 36.5975 u: 35.3025 v: 39.4389 (minimum: 35.3025)
VMAF 4k: 97.348651, VMAF 1080p: 95.067241
SSIMULACRA2_rs: Mean: 52.75702301 Median: 52.94424333 Std Dev: 8.80849560 5th Percentile: 38.21905581 95th Percentile: 68.44942008
--preset 3 --crf 30 --tune 2 --film-grain 21
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 --film-grain 21 -b .\Ultraman1_crf30_preset3_tuneSSIM_fg21.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 334564528 1762.83 kbps
Channel 1
Average Speed: 20.958 fps
Total Encoding Time: 1736928 ms
Total Execution Time: 1737262 ms
Average Latency: 16525 ms
Max Latency: 66932 ms
XPSNR average, 36403 frames y: 35.5834 u: 34.1366 v: 39.0004 (minimum: 34.1366)
VMAF 4k: 97.149595, VMAF 1080p: 94.741050
SSIMULACRA2_rs: Mean: 50.32394820 Median: 50.50466871 Std Dev: 9.23091795 5th Percentile: 35.14961239 95th Percentile: 67.04853533
--preset 3 --crf 30 --tune 2 --film-grain 31
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 --film-grain 31 -b .\Ultraman1_crf30_preset3_tuneSSIM_fg31.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 334677322 1763.42 kbps
Channel 1
Average Speed: 21.731 fps
Total Encoding Time: 1675164 ms
Total Execution Time: 1675582 ms
Average Latency: 16385 ms
Max Latency: 24566 ms
XPSNR average, 36403 frames y: 34.8267 u: 33.5357 v: 38.8195 (minimum: 33.5357)
VMAF 4k: 96.929686, VMAF 1080p: 94.266828
SSIMULACRA2_rs: Mean: 47.39210271 Median: 47.51607786 Std Dev: 9.76784956 5th Percentile: 31.72506727 95th Percentile: 65.42500792
--preset 3 --crf 30 --tune 2 --film-grain 41
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 --film-grain 41 -b .\Ultraman1_crf30_preset3_tuneSSIM_fg41.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 334700242 1763.54 kbps
Channel 1
Average Speed: 21.707 fps
Total Encoding Time: 1677042 ms
Total Execution Time: 1677376 ms
Average Latency: 16399 ms
Max Latency: 24576 ms
XPSNR average, 36403 frames y: 34.3698 u: 33.2536 v: 38.7295 (minimum: 33.2536)
VMAF 4k: 96.672354, VMAF 1080p: 93.772334
SSIMULACRA2_rs: Mean: 44.90364237 Median: 44.67770204 Std Dev: 10.23623379 5th Percentile: 28.85350838 95th Percentile: 63.80731931
--preset 3 --crf 30 --tune 2 --film-grain 50
:
ffmpeg -i .\Ultraman1.m2ts -f yuv4mpegpipe -strict -1 - | SvtAv1EncApp -i - --keyint 12s --crf 30 --preset 3 --tune 2 --film-grain 50 -b .\Ultraman1_crf30_preset3_tuneSSIM_fg50.ivf
SUMMARY --------------------------------- Channel 1 --------------------------------
Total Frames Frame Rate Byte Count Bitrate
36403 23.98 fps 334704696 1763.57 kbps
Channel 1
Average Speed: 21.716 fps
Total Encoding Time: 1676286 ms
Total Execution Time: 1676730 ms
Average Latency: 16398 ms
Max Latency: 24605 ms
XPSNR average, 36403 frames y: 34.1650 u: 33.1257 v: 38.6915 (minimum: 33.1257)
VMAF 4k: 96.492425, VMAF 1080p: 93.439512
SSIMULACRA2_rs: Mean: 43.37989094 Median: 42.86187330 Std Dev: 10.52248577 5th Percentile: 27.33426194 95th Percentile: 62.78089483
SVT-AV1 编码选项 | 速度 fps | 码率 kbps | XPSNR-Y dB | XPSNR-U dB | XPSNR-V dB | VMAF 4k | VMAF 1080p | S2.1:均值 | S2.1:中位 | S2.1:第 5% | S2.1:第 95% |
---|---|---|---|---|---|---|---|---|---|---|---|
Ultraman1 CRF30 PSNR P3 | 28.734 | 1669.85 | 38.1204 | 36.5504 | 41.9289 | 97.738160 | 95.464609 | 53.36636097 | 53.61311143 | 38.06738244 | 70.01810194 |
Ultraman1 CRF30 P3 PSNR FG1 | 21.955 | 1676.41 | 38.1204 | 36.5504 | 41.9289 | 97.738160 | 95.464609 | 53.36636097 | 53.61311143 | 38.06738244 | 70.01810194 |
Ultraman1 CRF30 P3 PSNR FG11 | 22.027 | 1693.11 | 36.5453 | 35.3250 | 39.5036 | 97.430726 | 95.150845 | 52.02663259 | 52.22005542 | 36.72168384 | 68.78530314 |
Ultraman1 CRF30 P3 PSNR FG21 | 22.029 | 1695.20 | 35.5426 | 34.1543 | 39.0581 | 97.235338 | 94.835942 | 49.62544972 | 49.86805064 | 33.69016033 | 67.56729955 |
Ultraman1 CRF30 P3 PSNR FG31 | 22.007 | 1695.79 | 34.7929 | 33.5515 | 38.8744 | 97.018645 | 94.371972 | 46.73252160 | 46.97122122 | 29.83598684 | 65.91101183 |
Ultraman1 CRF30 P3 PSNR FG41 | 22.052 | 1695.91 | 34.3394 | 33.2685 | 38.7830 | 96.762843 | 93.883978 | 44.27273142 | 44.12428627 | 26.90948687 | 64.28934544 |
Ultraman1 CRF30 P3 PSNR FG50 | 22.024 | 1695.93 | 34.1353 | 33.1400 | 38.7444 | 96.582379 | 93.552727 | 42.76394562 | 42.31747622 | 25.38934990 | 63.16879872 |
Ultraman1 CRF30 P3 VQ | 28.810 | 2056.28 | 38.1717 | 36.5926 | 41.8143 | 97.748236 | 95.534197 | 54.83524211 | 54.41993554 | 41.58288237 | 70.84131535 |
Ultraman1 CRF30 P3 VQ FG1 | 22.209 | 2062.79 | 38.1717 | 36.5926 | 41.8143 | 97.748236 | 95.534197 | 54.83524211 | 54.41993554 | 41.58288237 | 70.84131535 |
Ultraman1 CRF30 P3 VQ FG11 | 22.115 | 2079.51 | 36.5799 | 35.3581 | 39.4388 | 97.464271 | 95.226487 | 53.45703914 | 53.01872083 | 40.16894954 | 69.53730410 |
Ultraman1 CRF30 P3 VQ FG21 | 22.149 | 2081.60 | 35.5684 | 34.1787 | 38.9998 | 97.262789 | 94.883521 | 50.99531869 | 50.63241591 | 37.08947938 | 67.80717058 |
Ultraman1 CRF30 P3 VQ FG31 | 22.157 | 2082.20 | 34.8137 | 33.5719 | 38.8185 | 97.033814 | 94.387931 | 48.03797050 | 47.79390298 | 33.26269500 | 66.06963942 |
Ultraman1 CRF30 P3 VQ FG41 | 22.178 | 2082.32 | 34.3581 | 33.2872 | 38.7283 | 96.766543 | 93.875865 | 45.53317193 | 44.99403922 | 30.26585740 | 64.44994167 |
Ultraman1 CRF30 P3 VQ FG50 | 22.195 | 2082.34 | 34.1539 | 33.1581 | 38.6901 | 96.580212 | 93.532338 | 44.00013351 | 43.23395239 | 28.67493008 | 63.32191585 |
Ultraman1 CRF30 P3 SSIM | 28.113 | 1737.48 | 38.1953 | 36.5190 | 41.8161 | 97.656883 | 95.386084 | 54.10919247 | 54.33234161 | 39.54388416 | 69.48821685 |
Ultraman1 CRF30 P3 SSIM FG1 | 21.698 | 1744.04 | 38.1953 | 36.5190 | 41.8161 | 97.656883 | 95.386084 | 54.10919247 | 54.33234161 | 39.54388416 | 69.48821685 |
Ultraman1 CRF30 P3 SSIM FG11 | 21.693 | 1760.74 | 36.5975 | 35.3025 | 39.4389 | 97.348651 | 95.067241 | 52.75702301 | 52.94424333 | 38.21905581 | 68.44942008 |
Ultraman1 CRF30 P3 SSIM FG21 | 20.958 | 1762.83 | 35.5834 | 34.1366 | 39.0004 | 97.149595 | 94.741050 | 50.32394820 | 50.50466871 | 35.14961239 | 67.04853533 |
Ultraman1 CRF30 P3 SSIM FG31 | 21.731 | 1763.42 | 34.8267 | 33.5357 | 38.8195 | 96.929686 | 94.266828 | 47.39210271 | 47.51607786 | 31.72506727 | 65.42500792 |
Ultraman1 CRF30 P3 SSIM FG41 | 21.707 | 1763.54 | 34.3698 | 33.2536 | 38.7295 | 96.672354 | 93.772334 | 44.90364237 | 44.67770204 | 28.85350838 | 63.80731931 |
Ultraman1 CRF30 P3 SSIM FG50 | 21.716 | 1763.57 | 34.1650 | 33.1257 | 38.6915 | 96.492425 | 93.439512 | 43.37989094 | 42.86187330 | 27.33426194 | 62.78089483 |
--film-grain >=21
时的编码结果与片源的噪声观感高度一致(远好于关闭),画质指标分数却在下降--film-grain 21
时,仍能通过肉眼观察到低对比度场景的微量涂抹痕迹,Tune VQ 下涂抹痕迹最隐蔽
可以选择直接使用最新版 ffmpeg 内置的 libsvtav1,或下载本教程中测试所编译的 SVT-AV1 v3.0,或自行下载 Github 仓库以及 Visual Studio 等工具编译。
CI/CD 指持续整合与开发,此处代表 GitHub Actions、Pipelines 代码整合辅助以及自动编译。由于 SVT-AV1 没有发布正式版下载途径,所以 CI/CD 版就是最新;CI/CD 版的主要用途是检查代码能不能正常编译为程序,且相比于常规意义上(经过人工检验后发布)的正式版有一定“Beta 测试”性质(未完全测试的新功能、新缺陷、未注明的变更、参数值调整、内部版本号、runtime 错误),其可靠性需要用户自行适应。
在 Gitlab pipelines 列表中,找最新(顶部)显示为已通过的 Daily Run 计划,其右侧的“操作”分栏点击展开,填写“Release”过滤,然后根据当前操作系统下载编译好的压缩包,x86-64 系统下为压缩包中的 SvtAv1Enc.dll
、SvtAv1EncApp.exe
。
C:\Program Files\CMake
)C:\Windows\System32
中)*-master/Build/windows/build.bat
*-master\Bin\Debug
中找到 SvtAv1EncApp.exe
、SvtAv1Enc.dll
拷贝到需要的位置,然后通过 SvtAv1EncApp.exe -v
命令检查SVT-AV1 编码器的官方推荐下载和编译流程,见 Build Guide,ARM(aarch64)Build Guide:
ffmpeg | 强大的 CLI 开源视音频处理工具,已内置 libsvtav1 |
---|---|
mpv | 开源,支持便携的现代视频视频播放器。见安装与配置教程 |
Voukoder | 开源 Premiere Vegas After Effects 压制导出插件,分为 Voukoder 和 V-Connector 两部分 |
OBS | 强大的开源直播框架和软件,设置略比传统录屏软件复杂,但效果也更好 |
MediaInfo | 开源的 GUI 媒体元数据/视音频格式读取器,用于配置正确的压制参数 |
ffprobe | CLI 视音频格式读取器,若检测所得信息与 MediaInfo 所异,则优先参考 ffprobe 见基本使用,以及搭配 Excel 的视频数据可视化教程 |
SSIMULACRA 的官方项目中只有在 Debian 的编译示例,Windows 系统下虽然可以调用 Windows Subsystem for Linux(WSL),但编译后仍然是 Linux 应用。因此这里分为两种编译方法,以便今后参考。另外,尽管 SSIMULACRA-Rust 的项目存在(且支持直接输入视频),但该实现为第三方,且未说明对应了官方的 2.0 还是 2.1 版本,同时在 Issues 中有视频和图片得分不同的情况出现(SSIMULACRA 是图片检测算法),因此不用。
wsl --install Debian
wsl
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential libhwy-dev liblcms2-dev libjpeg62-turbo-dev libpng-dev cmake ninja-build -y
C:\Users\<用户名>
下cp -R /mnt/c/Users/<用户名>/ssimulacra2-main /home/<Debian 用户名>/
cd /home/<Debian 用户名>/
chmod -R u+x /ssimulacra2-main
./ssimulacra2-main/build_ssimulacra
sudo apt install file -y && file ./ssimulacra2
./ssimulacra2: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5b0e4edcd5a35d87c0c0d6dd4b9c69335c623724, for GNU/Linux 3.2.0, stripped
注:移除并删除该子系统可通过 wsl --unregister Debian
命令完成。
pacman -Syu
pacman -Su
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja git mingw-w64-x86_64-highway mingw-w64-x86_64-lcms2 -y
cd /<盘符字母>/<路径>/ssimulacra2-main
mkdir build-win && cd build-win
cmake ../src -G Ninja -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++
ninja
ssimulacra2-main/build-win/ssimulacra2.exe
拷贝到需要的路径中<MSYS2 安装位置>\msys64\mingw64\bin
拷贝到 ssimulacra2.exe
的新路径中:
libhwy.dll
libjpeg-8
liblcms2-2.dll
libgcc_s_seh-1.dll
libjpeg-8
libstdc++-6.dll
libpng16-16.dll
libstdc++-6.dll
libwinpthread-1.dll
zlib1.dll
使用以下命令测试编译出的程序是否正常运行:ssimulacra2.exe 源.png 损.png
C:\Program Files\VapourSynth
并选择“Install for all users”
C:\Program Files\VapourSynth\sdk\lib64
路径存在,并且含有 vapoursynth.lib
。否则卸载 Python 和 VapourSynth,并仔细阅读并正确完成安装cargo install ssimulacra2_rs
完成安装,过程中不应该有任何报错C:\Users\<用户名>\.cargo\bin\ssimulacra2_rs.exe
拷贝到工作路径,便以卸载 rustupcachedir=""
,命令行窗口当前路径,Windows 默认为 C 盘 cachedir="."
,即当前命令行路径(本教程的测试环节将使用这个)cachedir=%TEMP%
,操作系统指定缓存盘,Windows 一般为 C 盘 LSMASHSource.dll
、LSMASHSource.pyd
到 VapourSynth 插件目录下 C:\Program Files\VapourSynth\plugins\
注:ssimulacra2_rs 在 PowerShell 中无法正常打印信息,需要使用 CMD 运行;LSMAS 缓存文件代表“O__<视频文件名>.lwi” 索引文件,这些文件在运行后不会被删除,下次在相同缓存路径解码相同视频时可以自动跳过,或造成更新后信息与缓存不符的错误。
网页 | 链接 |
---|---|
AOMedia AV1 Codec | martchus.dyn.f3l.de |
AV1 Bitstream & Decoding Process | aomediacodec.github.io |
SVT-AV1 Docs | gitlab.com |
Mozilla aom AV1 Github | github.com/mozilla |
Wikidocs AV1 Video Codec | wikidocs.net |
AV1 (DAV1D) 解码详解 | lazybing.github.io |
AV1 Decoder Model | norkin.org |
CWG-B078[o]_v1 - Tool Description | aomedia.org |
An Overview of Coding Tools in AV1 | www.researchgate.net |
A Technical Overview of AV1 (IEEE) | ieeexplore.ieee.org |
A Technical Overview of AV1 (arxiv) | arxiv.org |
见官方文档:GitLab。编码步骤详解在在 tree/master/Docs
目录有独立的 Markdown 文档(包括关联细节的详解),如果没有则是在 svt-av1-user-guide、svt-av1-encoder-design 文档中。可以通过 VSCode 的文件夹搜索功能来快速查找;如果还是找不到,则该内容可能位于源代码的注释中,同样可以用 VSCode 的文件夹搜索功能来快速查找。