- 1. 参考资料
- 2. 基本设置(不区分源)
- 2.1. etc
- 2.2. rect & amp
- 2.3. crf,qp
- 2.4. rd (1-6)
- 2.5. rdoq-level
- 2.6. tu-intra-depth <1..4> tu-inter-depth <1..4>
- 2.7. max-tu-size <32|16|8|4>
- 2.8. max-merge <1..5>
- 2.9. me ,merange
- 2.10. subme
- 2.11. keyint
- 2.12. min-keyint
- 2.13. rc-lookahead
- 2.14. bframes
- 2.15. cutree
- 2.16. ref
- 2.17. strong-intra-smoothing
- 2.18. lookahead-slices
- 2.19. deblock 去色块
- 2.20. frame-threads
- 2.21. aq-mode
- 3. 根据源决定
- 4. 测试过但是不使用的参数
- 5. Pools & Numa
参考资料
请注意,不能确保完全正确
基本设置(不区分源)
etc
--preset veryslow
or slower
--no-open-gop
--rskip 0
rskip是放弃某些质量用来加速
--high-tier
--range limited
--aud
--repeat-headers
--hist-scenecut
判断转场,VCB建议开着,不过目前看来这个参数还处于beta阶段
--no-sao
设计目的是去振铃(光环现象),但是细节丰富地方会去掉太多细节
--no-early-skip
加速开关,影响的溯块中不同算法的先后顺序,一般不会去开。
--no-strong-intra-smoothing
rect & amp
--no-rect rect提供更好的分割能力,能找到潜在的匹配块,它很可能被证明是有用的,但它可能不值得。(画面复杂。离子特效多的情况下会考虑开 rect -VCB)
--no-amp 类似rect,即使可能稍微有点用
VCB:通常来说,<=1080p 下,rect 基本上没什么作用,amp 是几乎完全没作用,但是这俩都是速度黑洞。因此从效率角度建议关闭,或者至少关闭 amp
个人测试中,1080p开了之后,码率低了一点,画面差了一点
crf,qp
qp 电脑认为的恒定画质(但一般不进行设置)
crf 人眼认为的恒定画质,但是运动时候画质会降低来节省码率
数值越低画质越好。
一般低于等于18可以认为和原画差不多(主观观点)
rd (1-6)
分析的复杂度,数值越大画质越高,压出来体积越大,5,6非常慢, 默认3.
rdoq-level
RDOP [rate-distortion optimized quantization] (率失真优化量化)
默认0,关闭,预设slow时候默认开启。(preset placebo 似乎也还是2)
x265最重要的参数,没有之一,开了能有助于保存细节,当然会有更大文件体积。关闭可以提高压缩速度,看起来会轻度模糊。开启掉速度30%以上,推荐舍弃其他参数,也要开启这个。
设成 1 时候 看起来效果最好,但是体积会大30%以上
设成 2 时候 效果略差,体积只会小幅度增加,推荐使用2
tu-intra-depth <1..4> tu-inter-depth <1..4>
默认1,开高会小幅增加压缩率,但是特别慢 (preset placebo 似乎就是4)
max-tu-size <32|16|8|4>
默认32,开低会降低压缩率,并且不会提速,推荐默认
max-merge <1..5>
开高小幅度提高压缩率,对速度影响不明显,默认2 (preset placebo 似乎就是5)
me ,merange
me 搜索方式,默认hex ,用umh 或star 能小幅度提高压缩率,但是掉速20%
merange 搜索范围,默认57,me设成hex时候,对速度影响不大,但是使用umh或star时候,开高掉速严重
umh比star好
- dia
- hex (default)
- umh
- star
- sea
- full
如果你的视频分辨率低,merange 可以适当降低; 如果你的视频帧率高,merange 也可以适当降低,因为高帧率视频里帧与帧之间变化小。 理论上 24 和 60 你可以给砍半 merange 都没问题。
当然了,画面动态大的打斗片,多给点总是没错的。
1080p 下 32 足矣,4k 下可以考虑给到像 x265 preset 默认的 57。
同样的,开太大可能会降低压缩率,因为大的 merange 搜索范围可能会搜索到错误的参考。-VCB
merange 不建议低于32 -Advanced Encoding Guide
me 追求快就用 umh,一般只会开 star。sea,full 都是暴力穷举类型的算法,开了纯属冬天太冷想要取暖用的。-VCB
subme
开高小幅提高压缩率,开低提高压缩速度,5比3慢10%
推荐7,但是会导致锐化
VCB: 动画给4,希望好的线条给5
Advanced Encoding Guide: 推荐5
不过个人测试中,subme 7 会在细节的还原中更接近源,特别是眼睛。 https://slow.pics/c/RZOrImeg
keyint
最大IDR间隔
关键帧相关,这个将会影响到点击跳转,开高能提升压缩率(但个人不建议随便动他,720对于一般的24p意味着30秒的时间,60p你可以稍微开高点?)
默认250
min-keyint
最小分组帧数,默认23,推荐改成个位数,提高gop准确度。
小幅度提高压缩率,对压缩速度没影响
min-keyint=1 的情况对于一些高速切换的场景会因此要强制1秒内一个IDR帧,造成P或者B等参考帧使用效率降低(换场景了参考的意义已经不大了)。
还有就是这样可以避免一些老旧的设备出现硬解的bug。 - by fch1993
rc-lookahead
预览帧数,默认20
开高可以提高分组(gop)准确度,小幅度提高压缩率,同时小幅度降速,推荐40
crf模式时,rc-lookahead可以提高cutree的准确度(提高画质)
bframes
最大b帧数量,推荐16
开高小幅度提高压缩率,默认4,开到8,掉速10%
bframes 开高了会小幅降低画质
cutree
--no-cutree since this seems to be a poor implementation of mbtree.
目前测试是静态场景表现不错,具体可以看https://ted423.github.io/Document/Encode/cutree/ 不建议开,码率分配存在非常大的问题(有一处分配了31M的码率结果效果还不如一半码率的x264)
doom9 上2020年有人说"在快速移动的场景中,我一直在努力解决丑陋的扭曲(用条带涂抹看起来有点像运动模糊的东西),最后发现 x265 的 CUTree 是罪魁祸首。
关闭它可以解决它,但是当试图在其他场景中保持相同的整体质量时,比特率会爆炸。
有什么方法可以使 CUTree '不那么激进' 或将其设置为 50% 或某些阈值参数吗?"
ref
参照帧数量,默认3
开高小幅度提高压缩率,同时小幅度降速,
3和4速度差不多,推荐4
VCB:不过实测 ref 增加在 x265 中作用不明显。建议不超过 6
strong-intra-smoothing
推荐在追求还原度的压制的时候关闭,严重欠码压制时开启(部分情况下,aq2 或者降低 aqs 更为优先)
对关键帧进行平滑处理,看起来挺吓人的,实际上效果不明显,推荐用--no-strong-intra-smoothing
关闭,保留细节(来源贴吧 连接1 的帖内说明)
http://forum.doom9.net/showthread.php?p=1873696
相关讨论,与贴吧给出的结论不同
个人测试是开的话画面细节丢失,影响蛮大 可能适合低码压制
目前测试是在低码压制上会降低块效应(不知道这么说对不对,aqs psy-rdoq开高会导致块变得严重。特别是4K,44Mbps仍然有些欠码,因此4K欠码压制的情况下,这种现象会非常严重,见 https://slow.pics/c/uvnpqHrU 不过这个对比图没有块现象严重的对比,只是用于说明所需码率,因为一个没注意顺手删了)
lookahead-slices
设成0有助于提高画质,开高有利于lookahead的并行度,
推荐设成0,对压缩速度无影响
deblock 去色块
要调低 默认太高, 推荐最高调到-1,-1以下,调高了会模糊
frame-threads
帧线程数量,开高提高cpu利用率,开低有利于小幅度提高压缩率
如果cpu能够满载可以考虑调到2,如果不能满载考虑使用默认值
(默认会自动调整)
aq-mode
aq 是防止平面过度量化的功能,用被量化程度去进行 qp 值的补偿 -VCB(其实我没看懂)
目前测试在不足码率压制的情况下,aq1可能会导致画面出现一些奇怪的现象,aq2相对画面更好一些,并且不会出现奇妙的画面
不同的 aq-mode 需要的 aqs 可能不一样
- 关闭
- 标准自适应量化:简单为复杂区块分配更多码率。
- x265默认 进行帧间 aq-variance 计算,允许跨帧进行调整,带自动方差(auto-variance)调整的自适应量化。(推荐)
- 带自动方差调整和暗场偏置(bias to dark scenes)的自适应量化。
- 带自动方差调整和更优边缘保留(edge preservation) (会摧毁平面,但会给更多码率线条和纹理和暗场。除非你追求压缩率,喂给编码器的东西也有针对性处理防止出现伪影(artifact),不然别开 -VCB 注意该意见可能比较适合动画)
- 带自动方差调整、更优边缘保留和暗场偏置的自适应量化。(仅aMod)
--aq-mode 2
会强调动态和高频部分,平面码率会被削(整体视频码率也就低了),开了很容易平面上出瑕疵,所以如果想开,最好喂视频之前就把平面抹抹干净,并且给 0.9 及以上的 strength。-VCB (该意见可能相对动画来说)
《Advanced Encoding Guide》的推荐是 3或4 带上--hevc-aq(原文很可能缺了个标点,有歧义,实际应该是不带--hevc-aq
,这个参数会关闭其他 AQ 模式)
不过上面的意见可能比较适合足码压制,想压低码的话可能aq3不太合适,可能下面的--hevc-aq
更好
--hevc-aq
根据编码单元(coding unit)的空间活动度相对于帧平均活动度,动态调整量化步长。此方法通过子单元的最小方差来表征编码单元的空间复杂度(spatial complexity)。
注意:尽管 x265 文档描述较为抽象,实际效果未必显著,且开启时需禁用其他 AQ 模式。
--aq-bias-strength
(仅限 aMod 及支持暗场偏置的 AQ 模式)
范围:0.50 至 1.20(数值越低,偏置越弱)
默认值:1.00
根据源决定
--colorprim 9 for HDR, 1 for SDR.
--colormatrix 9 for HDR, 1 for SDR.
--transfer 16 for HDR, 1 for SDR.
--hdr10 for HDR.
ctu <64|32|16>
分块大小,64速度最慢,32其次
ctu 开的越大,平面的涂抹也越严重,速度也越慢,但是有损压缩效率越高, 值得一提的是, x265 的默认 preset,其实是偏向 4k 级别高分辨率视频给的
ctu 64 下,cu 的划分会耗费更多计算量,并且 cu 更倾向于变得更大。这使得给 cu 下更大 TU 的 qp 值给的不是很精确,看起来就是糊。-VCB
16适合DVD,32适合1080p,64适合4K,720p用16,x265可能就会直接退出
《Advanced Encoding Guide》中把这个归类为不调的参数,不过实际可能因为他们只用x265压4K或HDR有关。
qcomp
运动时候画质 crf开启时候有效
开高提高运动时候画质,开低减少文件体积
推荐0.6-0.7
aq-strength 默认1.0
低于1.0首先保留边缘,高于1.0优先保留纹理,这个值也要看aq-mode,噪点多的片可以调低这个值,噪点少的片调高这个值
不了解不要乱调这个
VCB:aq-strength 决定了 aq 的强度,一般来说,Anime 的 aq-strength 不用太高(太高了码率也会浪费)。通常,aq-mode=1,aq-strength 给 0.8 比较合理;aq-mode=2,aq-strength 给 0.9 左右,aq-mode=3,aq-strength 给 0.7 左右。
psy-rd & psy-rdoq
都是Psycho-visual options的参数
具体见https://x265.readthedocs.io/en/latest/cli.html#psycho-visual-options
这两者都会影响码率(经测试,开高psy-rdoq到5所增加的码率通过crf来给画面反而效果更好)
psy-rd 默认 2.0 有些高,建议开到1.5,开高反而降低画质(不过这种仅适用高还原度压制,如果希望节省码率,这个可能要再试试) 目前看来 VCB 似乎建议开高,国外是推荐真人电影(x264)开到1左右,不过4k 可能需要开到2
psy-rd: 它的核心作用是在编码器进行“模式决策”(比如决定一个编码块应该如何分割、使用何种预测方式等)时,引入一个额外的“惩罚项”。这个惩罚项的目标是:阻止编码器为了节省码率而过度简化(模糊化)人眼认为重要的细节和纹理。
高强度的 psy-rd 可能会导致伪影(artifact)
psy-rdoq 其实这玩意儿,可以理解为你想保留的细节大小,你想保留的越小,就给更高。-VCB
一些测试见Compare
测试过但是不使用的参数
ssim-rd
--ssim-rd
会让 x265 在进行“码率-失真优化”(Rate-Distortion Optimization, RDO)时,使用 SSIM (结构相似性) 作为衡量“失真”的标准,而不是默认的 PSNR (峰值信噪比)。其目标是在同等码率下,生成人眼看起来观感更好、纹理和细节保留更自然的视频,但代价是编码速度会显著变慢。
有需要可以主要了解下 PSNR 和 SSIM
实际使用后感觉同码率下没法保留细节。
Pools & Numa
CPU 区别
Intel 和 AMD 在 NUMA 的物理实现和拓扑结构上有着显著的不同,这直接影响了它们在操作系统中的表现以及像 x265 这样的软件如何最优地利用它们。
简单来说:AMD EPYC 的架构更“原生 NUMA”,其内部结构更复杂;而 Intel Xeon 的传统架构更“统一”,但通过特定技术也能模拟出更复杂的 NUMA 拓扑。
by Gemini
由于其 Chiplet 架构,AMD EPYC 天然就存在内部的 NUMA 边界。BIOS 中有一个关键设置叫 NPS (NUMA Nodes Per Socket),它决定了如何向操作系统报告 NUMA 节点。
EPYC
NPS 设置:
- NPS1: 将整颗 CPU 报告为 1 个 NUMA 节点。这简化了拓扑,但隐藏了内部延迟差异,性能可能不是最优。
- NPS2: 将 CPU 沿内存控制器通道对半分,报告为 2 个 NUMA 节点。
- NPS4: 将 CPU 沿内存控制器通道四等分,报告为 4 个 NUMA 节点。这是最能反映其物理架构的模式,能提供最低的本地延迟。
好像也不用设太多,因为 太多了之后一个 Numa x265 会自动设少线程数,一个线程池最多是64个线程
查到的一些讨论 http://wp.xin.at/archives/5478
L3 cache as NUMA Domain
当你启用 “L3 cache as NUMA Domain”(或 BIOS 中的 “ACPI SRAT L3 Cache as NUMA Domain”)时,系统确实会将每个 L3 缓存 (通常与各 CCD 或 CCX 关联) 视为独立的 NUMA 节点。这意味着操作系统会识别更多 NUMA 域,而不是简单按照 CPU 插槽来划分。
如果启用该设置,每个 L3 缓存会被报告为一个独立的 NUMA 节点。例如,每个 CCD(独立的核心/cache 单元)有一个 L3 缓存,那么每个 CCD 就成为一个 NUMA 节点。举例来说,如果一个处理器有 8 个 CCD,会报告 8 个 NUMA 节点;双路系统则会有 16 个 NUMA 域。
当 未启用 L3 作为 NUMA 域 时,NPS 参数定义系统如何划分 NUMA 域,以及内存交错(interleaving)方式。例如,NPS=2 表示每个插槽按左右半边划分为两个 NUMA 域;NPS=4 则划分为四个,分别对应每个 Quadrant(象限) 。
当 启用 L3 作为 NUMA 域 时,NPS 不再决定 NUMA 域的数量(由 L3 缓存数决定),而仅控制内存通道的交错方式。例如,一个处理器有 8 条内存通道,如果 NPS=1,则所有通道交错;NPS=2 或 NPS=4 则按照半边或象限分组交错访问
pools
注意,这个参数在 GUI 下传递可能出问题,使用的话可能需要纯命令行,见issue,一般 wpp 默认开启
x265 会根据 CPU 自动配置线程数量,目前测试是两个 Numa 线程数翻倍的情况下,压制速度没有区别。
x265 有两种主要的并行方式:
帧级并行(Frame-level Parallelism):最高效的方式。多个线程同时处理不同的帧。
帧内并行(Intra-frame Parallelism):如 WPP,多个线程协同处理同一帧的不同部分。
核心逻辑在于:当 x265 检测到只有一个线程池时,它会优先最大化效率更高的帧级并行。
在一个大的、统一的线程池里(比如你的例子,一个 NUMA 节点上有 24 或 32 个核心),调度器可以非常灵活地将不同的帧分配给任意空闲的线程。这种情况下,帧级并行的效率非常高。
而 WPP 本身是有一些同步开销的。为了处理一行 CTU,需要等待上一行处理完某些初始信息。
因此,x265 的开发者做出了一个明智的决定:如果只有一个线程池,就认为帧级并行已经足够,此时禁用 WPP 可以减少不必要的同步开销,从而可能获得微小的性能提升或简化调度逻辑。
pmode & no-pmode (4.1 deprecated)
并行决策模式
官方推荐是CPU不饱和才开,编码器将跨多个工作线程分配每个 CU 的分析工作。
--追加说明,--pme
、--lookahead-slices
也在4.1中禁用了。
pmode 和 wpp 是设计理念和实际效果上是冲突的,ps,我以前犯蠢不知道