您可以添加.global_args('-report')
用于测试 FFmpeg 命令行的正确性。
The -report
参数生成一个日志文件,其名称类似于ffmpeg-20210715-000009.log
.
日志文件中的第一个文本行是带参数的 FFmpeg 命令行。
有很好的 ffmpeg-python 示例here https://github.com/kkroening/ffmpeg-python and here https://github.com/kkroening/ffmpeg-python/tree/master/examples#audiovideo-pipeline。您还可以阅读参考 https://kkroening.github.io/ffmpeg-python/(时间不长)。
您可以使用记录的“特殊选项名称”:
具有特殊名称的参数,例如 -qscale:v(可变比特率)、-b:v(恒定比特率)等,可以指定为关键字参数字典,如下所示:
...
.output('out.mp4', **{'qscale:v': 3})
...
您可以使用以下命令(使用“特殊名称”):
(
ffmpeg
.input('0.mp4')
.output('out.mkv', **{'c:v': 'libx265'}, preset='fast', crf=28, **{'tag:v': 'hvc1'}, **{'c:a': 'aac'}, **{'bitexact': None}, map_metadata='-1')
.global_args('-report')
.run()
)
在报告的日志文件中,命令行为:
ffmpeg -i 0.mp4 -bitexact -c:a aac -c:v libx265 -crf 28 -map_metadata -1 -preset fast -tag:v hvc1 out.mkv -report
除了输出参数的顺序之外,它与您发布的命令行相同。
为了使用较少的“特殊名称”,您可以将特殊名称替换为等效名称:
- 代替:
c:v
with vcodec
- 代替:
c:a
with acodec
- Replace
tag:v
with vtag
可能有替代品**{'bitexact': None}
,但我找不到它。
更新后的代码是:
(
ffmpeg
.input('0.mp4')
.output('out.mkv', vcodec='libx265', preset='fast', crf=28, vtag='hvc1', acodec='aac', **{'bitexact': None}, map_metadata='-1')
.global_args('-report')
.run()
)