本文档基于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 文档。
网友评论