如何在ffmpeg-python中使用含连字符的参数(如svtav1-params)
在ffmpeg-python中设置SVT-AV1的专属参数
基础命令回顾
原生ffmpeg编码AV1(CRF值30)的命令:
ffmpeg -i input.mkv -c:v libsvtav1 -crf 30 output.mkv
对应的ffmpeg-python实现:
( ffmpeg .input('input.mkv') .output('output.mkv', vcodec='libsvtav1', crf=30) .run() )
问题场景:添加fast-decode参数
原生ffmpeg中需扩展命令,加入-svtav1-params fast-decode=1:
ffmpeg -i input.mkv -c:v libsvtav1 -crf 30 -svtav1-params fast-decode=1 output.mkv
但直接在ffmpeg-python的output方法中写svtav1-params='fast-decode=1'会因Python变量名不允许含连字符报错;替换为下划线则会被按字面解析,无法生成有效命令。
解决方法:使用字典传递特殊参数
ffmpeg-python支持通过字典解包的方式传递带特殊字符的参数,将参数名作为字典键,参数值作为对应值,用**语法传入output方法:
( ffmpeg .input('input.mkv') .output( 'output.mkv', vcodec='libsvtav1', crf=30, **{'svtav1-params': 'fast-decode=1'} ) .run() )
如果需要同时设置多个svtav1-params参数,可将多个配置用逗号分隔放在同一字符串中:
( ffmpeg .input('input.mkv') .output( 'output.mkv', vcodec='libsvtav1', crf=30, **{'svtav1-params': 'fast-decode=1,preset=6'} ) .run() )
这种写法会让ffmpeg-python正确生成对应原生命令的参数格式,实现预期配置。
内容的提问来源于stack exchange,提问作者orderlyfashion
相关产品推荐
相关产品推荐

