【问题标题】:How can I convert an FFmpeg command line to ffmpeg-python code?如何将 FFmpeg 命令行转换为 ffmpeg-python 代码?
【发布时间】:2021-09-23 17:10:35
【问题描述】:

我有这个命令行代码:

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()
)

【问题讨论】:

标签: python ffmpeg ffmpeg-python


【解决方案1】:

您可以添加.global_args('-report') 来测试FFmpeg 命令行的正确性。

-report 参数会生成一个名称类似于 ffmpeg-20210715-000009.log 的日志文件。

日志文件中的第一个文本行是带有参数的 FFmpeg 命令行。


有很好的 ffmpeg-python 示例 herehere。您也可以阅读reference(不长)。


您可以使用文档中的“特殊选项名称”:

具有特殊名称的参数,如-qscale:v(可变比特率)、-b:v(恒定比特率)等,可以指定为keyword-args字典,如下所示:
... .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:aacodec
  • 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()
)

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 2021-02-19
    • 2020-09-04
    • 2023-03-04
    • 2016-02-04
    • 1970-01-01
    • 2020-04-26
    • 2018-01-21
    • 2011-12-01
    相关资源
    最近更新 更多