FFmpeg 是一个完整的跨平台音视频解决方案,用于记录、转换和流式处理音视频。它是目前最强大的音视频处理开源软件之一,被广泛应用于视频网站、播放器、编码器等多种场景中.

核心特征

主要功能

  • 视频/音频格式转换
  • 视频/音频编解码
  • 视频采集和录制
  • 视频截图
  • 视频转码
  • 视频流处理

支持格式

  • 视频编码:H.264/AVC, H.265/HEVC, VP8, VP9, AV1等
  • 音频编码:AAC, MP3, Opus等
  • 容器格式:MP4, MKV, WebM, FLV等
  • 流媒体协议:RTMP, HLS, DASH等

主要组件

  • ffmpeg:音视频转码工具
  • ffplay:简单的音视频播放器
  • ffprobe:多媒体流分析器

Windows下载安装

  • 访问FFmpeg官方网站 (https://ffmpeg.org/download.html)
    1

  • 下载Windows版本的预编译包
    2

  • 解压后将bin目录添加到系统环境变量Path中,下图所示为在Path后面追加 ;D:\App\ffmpeg-7.1-full_build-shared\bin
    3
    4

  • 打开命令行,输入ffmpeg -version,如下图说是表示环境变量设置成功。
    5

MacOS下载安装

1
2
3
4
5
6
7
8
# 安装Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装FFmpeg
brew install ffmpeg

# 验证安装
ffmpeg -version

Linux下载安装

Ubuntu/Debian系统

1
2
3
4
5
6
7
8
# 更新软件源
sudo apt update

# 安装FFmpeg
sudo apt install ffmpeg

# 验证安装
ffmpeg -version

CentOS/RHEL系统

1
2
3
4
5
6
7
8
9
# 安装 Nux Dextop 仓库
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

# 安装FFmpeg
sudo yum install ffmpeg ffmpeg-devel

# 验证安装
ffmpeg -version

源码编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装依赖
sudo apt install build-essential yasm cmake libtool libc6 libc6-dev unzip wget

# 下载源码
wget https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2
tar xjf ffmpeg-7.1.tar.bz2
cd ffmpeg-7.1

# 配置编译选项
./configure --enable-gpl --enable-libx264 --enable-libx265 --enable-nonfree

# 编译和安装
make -j$(nproc)
sudo make install

基本使用

1
2
3
4
5
6
7
8
9
10
11
12
# 查看版本信息
ffmpeg -version

# 查看编译选项和支持的格式
ffmpeg -buildconf

# 查看支持的编解码器
ffmpeg -codecs

# 查看支持的封装格式
ffmpeg -formats

音视频处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 视频格式转换
ffmpeg -i input.mp4 output.avi

# 提取音频
ffmpeg -i input.mp4 -vn output.mp3

# 视频压缩
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

# 视频裁剪
ffmpeg -i input.mp4 -vf crop=w:h:x:y output.mp4
# 其中:
w = 输出宽度(width)
h = 输出高度(height)
x = 裁剪起始点的 X 坐标(左上角)
y = 裁剪起始点的 Y 坐标(左上角)

# 视频旋转
ffmpeg -i input.mp4 -vf transpose=1 output.mp4


# 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4

# RTMP推流
ffmpeg -i input.mp4 -c copy -f flv rtmp://server/live/stream

# HLS切片
ffmpeg -i input.mp4 -c:v h264 -flags +cgop -g 30 -hls_time 5 playlist.m3u8