C语言
开发的,是一个基于 CLI
(command line based,即 命令行)的、用来处理媒体文件的实用程序。这里, 主要讲一下在Python编译环境下使用ffmpeg的方法(主要是基于 Mac OS
系统,Linux的教程可以 点击)。
ffmpeg is a CLI (command line based) utility for processing media files. It is a framework with a multitude of features and, because of it’s open source license, it is the base for many widespread apps such as VLC, YouTube, iTunes and many more.
FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.
FFmpeg 是视频处理最常用的开源软件。
它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。
ffmpeg的官网地址:https://www.ffmpeg.org/
ffmpeg的github项目地址:https://github.com/FFmpeg/FFmpeg
ffmpeg官方说明文档:ffmpeg Documentation
python版的ffmpeg项目地址:https://github.com/kkroening/ffmpeg-python
python版的ffmpeg官方文档:https://kkroening.github.io/ffmpeg-python/
大神雷霄骅(已逝)的文章:[总结]FFMPEG视音频编解码零基础学习方法
暂略:可以参考Linux上的ffmpeg完全使用指南
pip install ffmpeg
Collecting ffmpeg
Downloading https://files.pythonhosted.org/packages/f0/cc/3b7408b8ecf7c1d20ad480c3eaed7619857bf1054b690226e906fdf14258/ffmpeg-1.4.tar.gz
Building wheels for collected packages: ffmpeg
Building wheel for ffmpeg (setup.py) ... done
Created wheel for ffmpeg: filename=ffmpeg-1.4-cp36-none-any.whl size=6084 sha256=3c449fefba5ac43b9eaeba00cfb75bb9432ec7aca5c2b59cfc69f90eaf9e7853
Stored in directory: /Users/robin/Library/Caches/pip/wheels/b6/68/c3/a05a35f647ba871e5572b9bbfc0b95fd1c6637a2219f959e7a
Successfully built ffmpeg
Installing collected packages: ffmpeg
Successfully installed ffmpeg-1.4
介绍 FFmpeg 用法之前,需要了解一些视频处理的基本概念。
# 查看 FFmpeg 支持的容器
ffmpeg -formats
# 查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内
ffmpeg -codecs
编码器(encoders)是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。
# 查看 FFmpeg 已安装的编码器
ffmpeg -encoders
(1) FFmpeg 的使用格式
FFmpeg 的命令行参数非常多,其基本形式分为五个部分。
ffmpeg [全局参数] {[输入文件参数] -i 输入文件地址} ... {[输出文件参数] 输出文件地址} ...
要注意的是,所有的参数仅仅对仅接下来的文件有效(下一个文件得把参数再写一遍)。
所有没有使用 -i 指定的文件都被认为是输出文件。 Ffmpeg 可以接受多个输入文件并输出到您指定的位置。你也可以将输入输出都指定为同一个文件名,不过这个时候要在输出文件前使用用 -y 标记。
Note:你不应该将输入和输出混淆,先指定输入,再指定输出文件
例子:
ffmpeg \
-y \ # 全局参数
-c:a libfdk_aac -c:v libx264 \ # 输入文件参数
-i input.mp4 \ # 输入文件
-c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数
output.webm # 输出文件
上面的命令将 mp4 文件转成 webm 文件,这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac,视频编码格式是 H.264;输出的 webm 文件的视频编码格式是 VP9,音频格式是 Vorbis。
如果不指明编码格式,FFmpeg 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子:
ffmpeg -i input.avi output.mp4
(2)常用命令行参数
-c:指定编码器
-c copy:直接复制,不经过重新编码(这样比较快)
-c:v:指定视频编码器
-c:a:指定音频编码器
-i:指定输入文件
-an:去除音频流
-vn: 去除视频流
-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y:不经过确认,输出时直接覆盖同名文件。
(3)常见用法
下面介绍 FFmpeg 几种常见用法。
…暂略
(可以点击查看详细攻略:FFmpeg 视频处理入门教程、Linux上的ffmpeg完全使用指南)
上面介绍了使用Python在命令行中使用ffmpeg的方法,但是如果想要在Python脚本中(而不是命令行中)使用功ffmpeg呢?
可以使用 os 模块
下的os.system
,创造出命令行的环境。
例如:
for filename in os.listdir(path):
if (filename.endswith(".mp4")): #or .avi, .mpeg, whatever.
os.system("ffmpeg -i {0} -f image2 -vf fps=fps=1 output%d.png".format(filename))
else:
continue
暂略
参考: