1. 安装
1.1 Windows 环境
-
下载地址:http://ffmpeg.org/download.html#build-windows
-
解压文件
-
配置环境变量,将bin路径添加
-
测试,CMD窗口
ffmpeg –version
1.2 Linux 环境
sudo apt-get install ffmpeg
2. 相关概念
2.1 容器
视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。
常见的容器格式有以下几种:
- MP4
- MKV
- 2WebM
- AVI
查看 FFmpeg 支持的容器: ffmpeg -formats
2.2 编码格式
不同的编码格式,有不同的压缩率,会导致文件大小和清晰度的差异。
常用的视频编码格式如下:
- H.262
- H.264
- H.265
- VP8
- VP9
- AV1
常用的音频编码格式如下:
- MP3
- AAC
查看 FFmpeg 支持的编码格式:ffmpeg -codecs
2.3 编码器
编码器是实现某种编码格式的库文件,只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。
常用的视频编码器:
- libx264:最流行的开源 H.264 编码器
- NVENC:基于 NVIDIA GPU 的 H.264 编码器
- libx265:开源的 HEVC 编码器
- libvpx:谷歌的 VP8 和 VP9 编码器
- libaom:AV1 编码器
常用的音频编码器:
- libfdk-aac
- aac
查看 FFmpeg 已安装的编码器:ffmpeg -encoders
2.4 码率
也称比特率 Bit Rate,是单位时间内视频(或音频)的数据量,单位是 bps (bit per second,位每秒)
一般使用 kbps(千位每秒)或Mbps(百万位每秒)
不同的码率,决定着编码器压缩视频的程度,是决定视频最终质量和文件大小的关键因素。
- 对于高分辨率的视频,通常需要更大的码率,才能有更好的画质。
- 对于高帧速率的视频,通常需要更大的码率,才能有更好的画质。
e.g. 分别对 1080p 和 4K 视频用 5Mbps 进行编码压缩,编码器会更多地压缩 4K 的视频从而达到 5Mbps 的码率,所以画质反而差
码率的分类:
- CBR 静态码率 Constant Bit Rate,指的是固定的码率,适用于网络流媒体视频编码。
- VBR 可变码率 Variable Bit Rate,针对每一秒画面的细节多少,从而进行变化码率的视频编码;细节少的画面码率低,细节多的画面码率高。
3. 使用
3.1 格式
命令行参数可以分成五个部分: ffmpeg {1} {2} -i {3} {4} {5}
五个部分的参数含义依次如下:
- 全局参数
- 输入文件参数
- 输入文件
- 输出文件参数
- 输出文件
ffmpeg \
-y \ # 全局参数
-c:a libfdk_aac -c:v libx264 \ # 输入文件参数
-i input.mp4 \ # 输入文件
-c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数
output.webm # 输出文件
3.2 参数
-y:允许覆盖,不经过确认,输出时直接覆盖同名文件。
-c:指定编码器
-c copy:直接复制,不经过重新编码,比较快
-c:v:指定视频编码器
-c:a:指定音频编码器
-i:指定输入文件,源文件
-an:去除音频流
-vn:去除视频流
-ar:采样率
-ac:声音通道数
-qscale 0:维持视频质量
-s:设置分辨率
-aspect:设置高宽比
3.3 常用命令
. ffmpeg -i input.mp4 查看视频信息
. ffmpeg -i video.mp4 video.avi 格式转换
. ffmpeg -i input.mp4 -aspect 16:9 output.mp4 设置高宽比
. ffmpeg -i input.mp4 -vn -c:a copy output.aac 提取音频
. ffmpeg -i input.aac -i input.mp4 output.mp4 合并文件,添加音轨
. ffmpeg -i input.mp4 -c:v libx265 output.mp4 指定编码器,转换编码格式
. ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4 更改到指定分辨率
Reference:
- https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html
- 更多常用命令:
- https://zhuanlan.zhihu.com/p/67878761
- http://linux.51yip.com/search/ffmpeg