首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将FFmpeg命令行转换为ffmpeg-python代码?

如何将FFmpeg命令行转换为ffmpeg-python代码?
EN

Stack Overflow用户
提问于 2021-07-14 17:45:17
回答 1查看 4.6K关注 0票数 1

我有一个命令行代码:

代码语言:javascript
复制
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代码。

但我该怎么做呢?

这就是我到目前为止所做的:

代码语言:javascript
复制
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()
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 21:27:31

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

-report参数生成一个名为ffmpeg-20210715-000009.log的日志文件。

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

有很好的ffmpeg-python示例这里这里。您还可以阅读参考文献 (它不会很长)。

如文件所示,您可以使用“特殊选项名称”:

具有特殊名称的参数,如-qscale:v (可变比特率)、-b:v (常量比特率)等,可以指定为关键字-args字典,如下所示: . .output('out.mp4',**{qscale:v‘:3}) ..。

您可以使用以下命令(使用“特殊名称”):

代码语言:javascript
复制
(
    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()
)

在报告的日志文件中,命令行是:

代码语言:javascript
复制
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},但我找不到它。

更新后的代码是:

代码语言:javascript
复制
(
    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()
)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68382868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档