根据 x265 命令行选项文档 关于
-F
/ --frame-threads
选项:
使用单帧线程在压缩方面略有改进, 因为整个参考系始终可用于运动 补偿,但它会严重影响性能。
这会显着影响文件大小吗?
对于显着更多的编码时间,您可以获得微不足道的质量改进,并且几乎没有文件大小差异。
使用 x265 编码。命令 #1 使用默认值
--frame-threads
。该值由核心数自动确定。对于我的老年硬件,它正在使用 --frame-threads 3
。
time x265 input.y4m -o default.hevc
real 0m58.430s
user 6m34.437s
sys 0m2.409s
time x265 --frame-threads 1 input.y4m -o frame-threads1.hevc
real 1m29.684s
user 5m38.404s
sys 0m2.992s
尺寸基本相同:
24858360 (24M) default.hevc
24859280 (24M) frame-threads1.hevc
使用
--frame-threads 1
速度明显变慢。就我而言,慢了 3 倍,但我的 CPU 很旧,所以这对你来说可能是一个更大的差异。
通过视觉比较和通过 VMAF、PSNR、SSIM 或任何喜欢确定质量的方式进行比较。
ffmpeg -v error -i input.y4m -i default.hevc -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf" -f null -
VMAF score: 82.979207
ffmpeg -v error -i input.y4m -i frame-threads1.hevc -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf" -f null -
VMAF score: 82.986954
VMAF 分数越高越好,但只有 0.007747 的差别,我看不出来。
我会注意到frame-threads=1的一个用途——稳定性。在 Ubuntu 上运行具有 x265 输出的 ffmpeg,这是我使用的第一个具有 4 个以上核心/线程的系统(带有 4C/8T 的 Ryzen),ffmpeg 运行得很好,但是如果您运行了 ffmpeg 的多个副本,或者在 ffmpeg 运行时加载了系统,您失败率约为 1-5% 左右。我咒骂 AMD 有一些 CPU 错误,并用一些 Linux 内核设置或其他设置来关闭超线程。无论如何,这只会使编码速度减慢约 5%。但这不是 CPU 的错——自从(使用 Intel CPU)以来,我有 2 个系统,如果您运行 3、4 个 ffmpeg 副本,它们就会在代码中的同一位置退出。
我将其设置为使用frame-threads=1,一切都很好。在我的 Coffee Lake 系统 (6C/12T) 上,它的编码速度仍然很快,而且只需要 2 次编码就可以充分利用 CPU。