Mac 在Python脚本中使用 ffmpeg

FFmpeg

  • 1. ffmpeg
  • 2. 安装
    • Linux
    • Python
  • 3. 使用示例
    • 3.1 命令行
    • 3.2 在Python 脚本中使用 ffmpeg
    • 3.3 API

之前一直对 FFmpeg 这个工具有些模糊,后来才知道这个工具或者说开源项目的源码是用 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.

1. ffmpeg

在这里插入图片描述

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视音频编解码零基础学习方法

2. 安装

Linux

暂略:可以参考Linux上的ffmpeg完全使用指南

Python

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

3. 使用示例

介绍 FFmpeg 用法之前,需要了解一些视频处理的基本概念。

  1. 容器
    视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。
# 查看 FFmpeg 支持的容器
ffmpeg -formats 
  1. 编码格式
    视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。
# 查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内
ffmpeg -codecs
  1. 编码器

编码器(encoders)是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。

# 查看 FFmpeg 已安装的编码器
ffmpeg -encoders

3.1 命令行

(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完全使用指南)

3.2 在Python 脚本中使用 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

3.3 API

暂略

参考:

  1. FFmpeg 视频处理入门教程
  2. Linux上的ffmpeg完全使用指南
  3. ffmpeg in python script
  4. 使用python ffmpeg的小总结

你可能感兴趣的:(#,图像,视频处理)