Mac 在Python脚本中使用 ffmpeg


之前一直对 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),也是许多音频和视频格式的标准编码/解码实现。

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的小总结
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python使用FFmpeg可以通过调用FFmpeg的命令行工具或者使用FFmpegPython库来实现。下面是两种方法的介绍: 1. 调用FFmpeg命令行工具: 可以使用Python的`subprocess`模块来调用FFmpeg的命令行工具。首先,确保你已经安装了FFmpeg,并将其添加到系统的环境变量。然后,可以使用`subprocess.run()`函数来执行FFmpeg命令。例如,要将视频文件转换为其他格式,可以使用以下代码: ```python import subprocess input_file = 'input.mp4' output_file = 'output.avi' command = f'ffmpeg -i {input_file} {output_file}' subprocess.run(command, shell=True) ``` 在上面的代码,`input.mp4`是输入视频文件的路径,`output.avi`是输出视频文件的路径。`ffmpeg -i`是FFmpeg的命令行选项,用于指定输入文件和输出文件。 2. 使用FFmpegPython库: 除了调用命令行工具,还可以使用FFmpegPython库来在Python进行音视频处理。有几个流行的FFmpeg Python库可供选择,例如`ffmpeg-python`和`pydub`。这些库提供了更高级的接口和功能,使得在Python处理音视频更加方便。 以`ffmpeg-python`为例,首先需要安装该库: ```shell pip install ffmpeg-python ``` 然后,可以使用以下代码来进行音视频处理: ```python import ffmpeg input_file = 'input.mp4' output_file = 'output.avi' ffmpeg.input(input_file).output(output_file).run() ``` 在上面的代码,`input.mp4`是输入视频文件的路径,`output.avi`是输出视频文件的路径。`ffmpeg.input()`用于指定输入文件,`output()`用于指定输出文件,`run()`用于执行转换操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值