在Linux/Mac/Windows上配置FFmpeg开源音频工具,轻松完成视频转码、音频混合等操作

本文最后更新于 2023年9月17日 上午

作者:Mintimate

博客:https://www.mintimate.cn
腾讯云社区:https://cloud.tencent.com/developer/user/7704194

Mintimate’s Blog,只为与你分享

封面

FFmpeg简介

“FFmpeg”这个项目单词中的“FF”指的是“Fast Forward(快速前进),而“mpeg”指的是“Moving picture expert group”。这个项目主要用于图片、声音处理,目前广泛 被用于视频软件和视频处理中。
官网描述
使用FFmepg可以轻松(包括但不限于):视频转码、音频抽离和字幕与视频合并等操作。我就经常拿来给电影原盘转码为H264 MP4并添加硬字幕,用于电视上播放(*≧ω≦)

🎥视频转码

使用FFmpeg,可以轻松将MP4格式文件,转码为Mov格式,或者是其他格式视频。方便储存视频到不同平台。
视频转码

🎙音频抽离

有时候,我们又一个MV(Music Video),但是我们想将它变成纯音频格式放进我们的MP3里。这个时候,我们可以使用FFmpeg来抽离音频,如:

1
2
3
4
# 抽离Mintimate.mov的音频为Mintimate.acc音频
ffmpeg -i Mintimate.mov -vn -y -acodec copy Mintimate.aac
# 抽离Mintimate.mp4的音频为Mintimate.mp3音频
ffmpeg -i Mintimate.mov -vn -y -acodec copy Mintimate.mp3

📽直播录屏
一般的网站,直播可能有一个m3u8的播放地址,这个地址是CDN的视频流。我们可以使用FFmpeg,对这个视频流进行录制:

1
ffmpeg -i https://这里是直播地址嗷/Mintimate.m3u8 -c:v copy -c:a copy -bsf:a aac_adtstoasc Output.mp4

直播录屏

这样,你可以把直播录下来。分享给小伙伴。

本文须知

因为FFmepg用途很广,且不同场景下还有特定参数。一篇文章无法同时详解配置和使用。所以,本文章,主要讲解如何在Linux/Mac/Windows上配置FFmepg。
🔗相关链接:

为什么要用FFmpeg

举个“荔枝”,

  1. 下载了电影原盘,清晰度极高,但是想放到电视、投影仪上看,不能匹配字幕文件;这个是时候,你就可以用FFmpeg转码文件的同时,加入字幕。
  2. 设备不支持mkv格式,只支持h264的mp4格式?这个时候,你就可以用FFmpeg转码mkv为mp4了。

视频教程

觉得视频有用,可以投币点赞嗷~

如果无法播放,视频链接:10分钟学会在Windows/Mac/Linux系统上安装和配置转码利器–“FFmpeg”

前提

一台带Mac/Linux/Windows的设备一台。
(理论上,树莓派也可以,但是可能性能不足……)

Linux上配置FFmpeg

Linux安装FFmpeg很简单,两种方法:

  • 软件包安装:使用Linux发行版本自带的软件包工具(apt-get、yum等)快速安装仓库内预先编译好版本的FFmpeg。
  • 手动配置:到FFmpeg项目官网,下载预编译版本FFmpeg或FFmpeg源码进行编译,并配置到环境变量。
  • 编译安装:FFmpeg编译安装特别麻烦,主要是可以自定义的外部支持库太多了(比PHP、Nginx编译多太多),所以本文不介绍。

前两种方法各有利弊,大家可以按需选择。

如果你是使用编程语言调用FFmpeg,需要指向FFmpeg的绝对路径,或者需要更新版本的FFmpeg特性,那么推荐手动配置

软件包安装

首先确定你Linux基于的发行版本,大部分人是基于CentosDebian,打开终端试试就知道:
基于Debian,输入apt-get

如果你输入apt-get,发现出现apt-get: command not found。那么可以使用yum试试。反之同理。

之后,你在终端内输入:

1
2
3
4
# For Debian
sudo apt install ffmpeg
# For Centos
sudo yum install ffmpeg

一般会询问是否按安装:
确认安装,输入“y”后回车
之后,“跑码”完成后,FFmpeg就安装好了:
安装完成
如果失败,且出现下列提示:
地址解析失败
一般是你apt-get/yum太久没更新,或者你换过它们的源,没有更新配置。只需要运行:

1
2
3
4
# For Debian
apt update
# For Centos
yum update

之后在运行FFmpeg安装命令即可。

手动配置

因为Linux不同设备编译过程参数不一样,本文不提供编译安装方法。这边提供下载预编译版本FFmpeg,并配置到环境变量。

首先,进入FFmpeg官方Linux预编译版本页面内,下载对应系统架构的FFmpeg:
根据架构选择
我Linux设备是x64设备,所以选择amd64版本。终端内,创建FFmpeg文件夹,并下载解压这个文件:

1
2
3
4
# 下载FFmpeg
wget "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz"
# 解压
tar -xf ffmpeg-release-amd64-static.tar.xz

Tips:tar命令具体使用教程
之后,我们配置环境变量:

  • 如果你用bash,那么,配置~/.bashrc这个文件
  • 如果你使用ZSH,那么配置~/.zhsrc这个文件
    大部分Linux用户使用bash,所以我们演示一下:
    1
    2
    # 编辑~/.bashrc环境变量
    vim ~/.bashrc
    进入后,按i进入编辑模式,文末添加:
    1
    2
    # FFmpeg
    export PATH=$PATH:「Path」
    保存并退出
    之后,再重载配置文件:
    1
    source ~/.bashrc
    即可:
    安装完成

    2022.04.23更新:之前都是编辑/etc/bashrc这个文件,这个其实全局环境变量(Bash情况下),想想还是演示用户环境变量比较好……所以现在教程改为编辑~/.bashrc。视频教程内还是编辑/etc/bashrc,大家可以自己定夺配置那个哦。

macOS上配置FFmpeg

macOS上安装FFmpeg也很简单,两种方法:

  • 快速编译:使用Homebrew软件包工具快速安装仓库内预先编译好版本的FFmpeg,但是因为FFmpeg不在Homebrew官方仓库内,即使换源Homebrew也要连接GitHub。
  • 手动配置:到FFmpeg项目官网,下载预编译版本FFmpeg或FFmpeg源码进行编译,并配置到环境变量。
  • 编译配置:下载FFmpeg的源码,使用cmake或者make进行编译和安装。有一定门槛,且自定义的外部支持库太多了(比PHP、Nginx编译多太多),不推荐新手配置。

本文手动配置使用的是预编译版本FFmpeg,预编译版本目前并没有适配M1芯片设备。请使用快速编译方法!预编版本,目前支持全版本macOS,包括ARM64架构和X86架构。

快速编译(推荐)

这个很简单,不再赘述。已经安装Homebrew的用户,终端内输入:

1
brew install ffmpeg

漫长等待后,FFmpeg就安装好了:
Homebrew安装FFmpeg完毕

如果你并没有安装Homebrew,可以参考文章:

手动配置1(推荐)

相信很多macOS用户并没有手动配置过环境。这边重点讲解如何手动配置。同样我们下载预编译版本的FFmpeg:

我们下载最新版本:
下载5.0版本FFmpeg
下载后,解压并重命名放到我们熟悉的地址,如:/Users/mintimate/myEnvironment/ffmpeg:
下载好后,解压到熟悉的地址
如果你的macOS上并没有显示为执行图标(exec),使用Terminal进行提权限:

1
chmod +x ffmpeg

提取
之后,我们配置到环境变量即可:

1
open ~/.zshrc

在文木添加:

1
2
# FFmpeg
export PATH=$PATH:/Users/mintimate/myEnvironment/ffmpeg/ffmpeg

保存后,终端内输入source ~/.zsshrc或重启终端即可:
ffmpeg安装完成

编译配置(不推荐)

本方法不适用小白,所以简单说一下:
下载源码解压:
解压源码
终端进入解压后的文件夹内:

1
./configure --enable-shared --prefix=/usr/local/ffmpeg

/usr/local/ffmpeg 为编译安装地址。
编译好后,参考手动配置1(推荐)添加进环境变量。

Windows上配置FFmpeg

Windwos的配置最为简单,我们进入FFmpeg项目官方Windows预编译下载界面:
ffmpeg下载

这边我推荐使用:GPL协议版本

📖配置环境变量

举个例子,我们下来了:ffmpeg-n4.4-4-gacb339bb88-win64-gpl-4.4.zip

我们下载好并解压,得到以下文件:
解压后得到文件
之后,我们打开环境变量:
环境变量
编辑Path,添加一条记录到刚刚解压出文件的bin文件夹下:
添加记录

🔧使用FFmpeg

配置好,保存后就可以在CMDPowershell等地方使用FFmpeg了:
使用FFmpeg

FFmpeg操作

字幕And轨道选取

我们下载下来的视频,总是字幕和视频原文件区别开来的(蓝光、蓝光压缩盘等),所以需要合并;你还在用老牌格式工厂等工具吗?其实,FFmpeg即可
在文件目录下,终端输入:

1
ffmpeg -y -i 「视频全名」 -vf subtitles=「字幕文件名」 「导出的视频文件名」

命令解锁:
其实,-y是不需要的,只是为了防止目录下有和导出视频文件名相同的视频,导致其失败;所以-y即:覆盖。
e.g.

1
ffmpeg -y -i 1.mkv -vf subtitles=1.ass out.mp4

另外,如果是MKV这样内嵌多音轨或多字幕的文件,我们可以使用map进行提取。举个例子,我这个电影文件:

1
ffmpeg -i Hotel.Transylvania.4.Transformania.2022.中英字幕.mkv

可以发现,是多音轨和字幕:
多轨道

如果我想单独提取视频轨道和音频轨道,只需要:

1
ffmpeg -i Hotel.Transylvania.4.Transformania.2022.中英字幕.mkv -map 0:0 -map 0:1  OutPut.mkv

这样输出的视频,就只有第1和第2轨道(视频轨道和音频默认轨道):
多轨道

正因为如此,我们可以把默认的字幕也提取抽离出来,并转为mp4文件:

1
2
3
4
# 方法1:适用于subrip类型字幕
ffmpeg -i Hotel.Transylvania.4.Transformania.2022.中英字幕.mkv -filter_complex "[0:v:0]subtitles=Hotel.Transylvania.4.Transformania.2022.中英字幕.mkv:si=2[v]" -map "[v]" -map 0:1 Hotel.mp4
# 方法2:适用于hdmv_pgs_subtitle类型字幕
ffmpeg -i HotelTransylvania.mkv -filter_complex "[0:v][0:s]overlay[v]" -map "[v]" -map 0:a:0 out.mp4

其中:

  • 方法1中,-filter_complex "[0:v:0]subtitles=Hotel.Transylvania.4.Transformania.2022.中英字幕.mkv:si=2[v]" -map "[v]"代表截取并融合Hotel.Transylvania.4.Transformania.2022.中英字幕.mkv视频文件内视频轨和字幕第2轨道为参数[v]轨道,并融合后续音频轨的渲染。

  • 方法2shi

    转换视频格式

    1
    2
    3
    4
    5
    ffmpeg -i input.ogv -vcodec h264 out.mp4
    ffmpeg -i input.ogv -vcodec mpeg4 out.mp4
    ffmpeg -i input.ogv -vcodec libxvid out.mp4
    ffmpeg -i input.mp4 -vcodec wmv1 out.wmv
    ffmpeg -i input.mp4 -vcodec wmv2 out.wmv
  • i 后面是输入文件名。-vcodec 后面是编码格式,h264 最佳,但 Windows 系统默认不安装。如果是要插入 ppt 的视频,选择 wmv1 或 wmv2 基本上万无一失。

如果你想维持你的源视频文件的质量,使用 -qscale 0 参数:

1
ffmpeg -i input.webm -qscale 0 output.mp4

转换视频格式并添加字幕

因为下载,h264的mp4,从压缩和质量角度来说很不错;如果加了字幕还要质量,选择h264吧。

1
ffmpeg -y -i 「视频全名」 -vf subtitles=「字幕文件名」 -vcodec h264 「导出的视频文件」.mp4

或者这个,crf最高,但是清晰度很高:

1
ffmpeg -y -i filename.mkv -vf subtitles='filename.mkv' -disposition:s default+forced -c:v libx264 -c:a libmp3lame -crf 27 -preset ultrafast filename.mp4 

总结

其实FFmpeg的配置很简单,而且配置方法多种多样。但是FFmpeg这个根据却相当好用。如果你对此感兴趣,可以自己探索探索使用FFmpeg,将它运用到代码内,进一步提高你代码的功能性。

最后,感觉文章有用,可以:



在Linux/Mac/Windows上配置FFmpeg开源音频工具,轻松完成视频转码、音频混合等操作
https://www.mintimate.cn/2020/02/25/FFmpeg/
作者
Mintimate
发布于
2020年2月25日
许可协议