本文档基于github文档进行翻译,并且记录了一些自己踩过的坑和学习心得,希望可以协助到大家。
原本英文文档
关于FFmpeg-python
FFmpeg是一套强劲的视频、音频处理程序,也是许多视频处理软件的基础 。但是FFmpeg的命令行使用起来有必定的学习成本。而ffmpeg-python就是解决FFmpeg学习成本的问题,让开发者使用python就可以调用FFmpeg的功能,既减少了学习成本,也增加了代码的可读性。

快速开始
水平翻转视频:
import ffmpeg
stream = ffmpeg.input( input.mp4 )
stream = ffmpeg.hflip(stream)
stream = ffmpeg.output(stream, output.mp4 )
ffmpeg.run(stream)
或者,如果您更喜爱流畅的界面:
import ffmpeg
(
ffmpeg
.input( input.mp4 )
.hflip()
.output( output.mp4 )
.run()
)
API 参考
安装
安装ffmpeg-python
ffmpeg-python可以通过典型的 pip 安装获取最新版本(注意:是ffmpeg-python,不要写成了python-ffmpeg):
pip install ffmpeg-python
或者可以从本地克隆和安装源:
git clone git@github.com:kkroening/ffmpeg-python.git
pip install -e ./ffmpeg-python
安装FFmpeg
使用该库,需要自行安装FFmpeg,如果电脑已经安装了,可以忽略本步骤。这里推荐直接使用conda进行安装,可以省下许多麻烦,其他的安装方式自行百度。
conda install ffmpeg
自定义过滤器
没有看到您要查找的过滤器?虽然 ffmpeg-python包含一些最常用过滤器(例如 concat)的简写符号,但所有过滤器都可以通过 .filter运算符引用:
stream = ffmpeg.input( dummy.mp4 )
stream = ffmpeg.filter(stream, fps , fps=25, round= up )
stream = ffmpeg.output(stream, dummy2.mp4 )
ffmpeg.run(stream)
或流利地:
(
ffmpeg
.input( dummy.mp4 )
.filter( fps , fps=25, round= up )
.output( dummy2.mp4 )
.run()
)
特殊选项名称:
具有特殊名称的参数,例如-qscale:v(可变比特率)、-b:v(恒定比特率)等,可以指定为关键字参数字典,如下所示:
(
ffmpeg
.input( in.mp4 )
.output( out.mp4 , **{ qscale:v : 3})
.run()
)
多个输入:
接受多个输入流的过滤器可以通过将输入流作为数组传递给ffmpeg.filter:
main = ffmpeg.input( main.mp4 )
logo = ffmpeg.input( logo.png )
(
ffmpeg
.filter([main, logo], overlay , 10, 10)
.output( out.mp4 )
.run()
)
多个输出:
产生多个输出的过滤器可用于.filter_multi_output:
split = (
ffmpeg
.input( in.mp4 )
.filter_multi_output( split ) # 或 `.split()`
)
(
ffmpeg
.concat(split[0], split[1].reverse())
.output( out.mp4 )
.run()
)
(在这种特殊情况下,.split()是等效的简写,但一般方法适用于其他多输出过滤器)
字符串表达式:
ffmpeg 解释的表达式可以作为字符串参数包含并引用任何特殊的 ffmpeg 变量名称:
(
ffmpeg
.input( in.mp4 )
.filter( crop , in_w-2*10 , in_h-2*20 )
.input( out.mp4 )
)
如有疑问,请参阅现有过滤器、示例和/或官方 ffmpeg 文档。
其他资源
-
API 参考
-
案例
-
过滤器
-
FFmpeg 主页
-
FFmpeg 文档
-
FFmpeg Filters 文档
-
测试用例
-
Issue tracker
-
Matrix Chat: #ffmpeg-python:matrix.org


