如何将 FFmpeg 命令行转换为 ffmpeg-python 代码?
How can I convert an FFmpeg command line to ffmpeg-python code?
我有这个命令行代码:
ffmpeg -i 0.mp4 -c:v libx265 -preset fast -crf 28 -tag:v hvc1 -c:a aac -bitexact -map_metadata -1 out.mkv
我想把它转换成Python中的ffmpeg-python代码。
但是我该怎么做呢?
这是我目前所做的:
import ffmpeg
(
ffmpeg
.input('0.mp4')
.filter('fps', fps=30)
.output('out.mkv', vcodec='libx265', crf=28, preset='fast', movflags='faststart', pix_fmt='yuv420p')
.run()
)
您可以添加 .global_args('-report')
以测试 FFmpeg 命令行的正确性。
-report
参数生成一个日志文件,其名称类似于 ffmpeg-20210715-000009.log
。
日志文件中的第一行文本是带参数的 FFmpeg 命令行。
有很好的ffmpeg-python例子here and here. You may also read the reference(不长)
您可以使用记录的“特殊选项名称”:
Arguments with special names such as -qscale:v (variable bitrate), -b:v (constant bitrate), etc. can be specified as a keyword-args dictionary as follows:
...
.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
为 vcodec
- 替换:
c:a
为 acodec
- 将
tag:v
替换为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()
)
我有这个命令行代码:
ffmpeg -i 0.mp4 -c:v libx265 -preset fast -crf 28 -tag:v hvc1 -c:a aac -bitexact -map_metadata -1 out.mkv
我想把它转换成Python中的ffmpeg-python代码。
但是我该怎么做呢?
这是我目前所做的:
import ffmpeg
(
ffmpeg
.input('0.mp4')
.filter('fps', fps=30)
.output('out.mkv', vcodec='libx265', crf=28, preset='fast', movflags='faststart', pix_fmt='yuv420p')
.run()
)
您可以添加 .global_args('-report')
以测试 FFmpeg 命令行的正确性。
-report
参数生成一个日志文件,其名称类似于 ffmpeg-20210715-000009.log
。
日志文件中的第一行文本是带参数的 FFmpeg 命令行。
有很好的ffmpeg-python例子here and here. You may also read the reference(不长)
您可以使用记录的“特殊选项名称”:
Arguments with special names such as -qscale:v (variable bitrate), -b:v (constant bitrate), etc. can be specified as a keyword-args dictionary as follows:
... .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
为vcodec
- 替换:
c:a
为acodec
- 将
tag:v
替换为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()
)