我在x265中使用ffmpeg,我想在一个编码中使用多个x265-params
。
当我使用多个参数时,ffmpeg 无法识别它们。
我的脚本是:
ffmpeg -s:v 1440x1080 -r 25 -i incident_10d_1440x1080_25.yuv -c:v rawvideo
-pix_fmt yuv420p -c:v libx265 -x265-params "--qp=16:--preset=medium:--psnr"
out_1440x1080_qp16.mp4
我将量化参数值设置为等于 16。
但是我在终端中的输出包含以下内容:
x265 [info]: Main profile, Level-4 (Main tier)
x265 [info]: Thread pool created using 4 threads
x265 [info]: Slices : 1
x265 [info]: frame threads / pool features : 2 / wpp(17 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge : hex / 57 / 2 / 2
x265 [info]: Keyframe min / max / scenecut / bias: 25 / 250 / 40 / 5.00
x265 [info]: Lookahead / bframes / badapt : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb : 1 / 1 / 0
x265 [info]: References / ref-limit cu / depth : 3 / on / on
x265 [info]: AQ: mode / str / qg-size / cu-tree : 1 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress : CRF-28.0 / 0.60
可以看出,我得到了Rate Control / qCompress : CRF-28.0 / 0.60
.
正确的必须是x265 [info]: Rate Control : CQP-16
.
当我在x265-params
中只有这个参数时,比如-x265-params "--qp=16"
它工作正常。
应用预设并在外部调整:
-preset medium -tune psnr -x265-params "qp=16:rc-lookahead=18"
只需将不需要值的选项设置为 1。对于以下示例,对我有用
ffmpeg.exe -i input.mp4 -c:v libx265 -crf 32 -x265-params constrained-intra=1:intra-refresh=1:ctu=32:ref=1:bframes=0:keyint=150:min-keyint=150:aq-mode=2:aq-strength=1.0:qp-adaptation-range=1.0:no-aq-motion=1:qg-size=16:no-cutree=1 output.mp4
以下选项的 1 将被忽略,因为它们不取值
constrained-intra=1
intra-refresh=1
no-aq-motion=1
no-cutree=1
ffmpeg 对传递给 libx265 的所有-x265-params
使用"key=value:"
结构,但某些 x265 参数没有值。
这意味着与 x265 文档相比,libx265 中的某些参数设置不同。
--psnr -> psnr=1
--no-psnr -> psnr=0
--ssim -> ssim=1
--no-ssim -> ssim=0
我还没有用具有结构 --no-* 的其余 x265 参数对此进行测试,但我认为它适用于所有参数,但有一些例外,例如 --asm
,--no-asm
,因为--asm
取值而不是标志。
正如您所指出的:在 -x265-params "{args}"
的参数中错误地包含标志类型选项将导致 libx265 拒绝为 -265-params
定义的整个字符串。