FFmpeg 零基础入门教程
FFmpeg 是一款跨平台的开源音视频处理工具,支持音视频的编解码、转码、剪辑、合并、流媒体推流等多种操作,是音视频开发、运维及内容处理领域的必备工具。本教程从基础安装到实战操作,帮助快速上手。
一、FFmpeg 安装
1. Windows 系统
- 访问 FFmpeg 官网,下载 Windows 版本的压缩包(推荐 Full Build 完整版)。
- 解压压缩包到指定目录(如
D:\ffmpeg)。 - 配置系统环境变量:
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」。
- 在「系统变量」的
Path中添加ffmpeg\bin路径(如D:\ffmpeg\bin)。
- 验证安装:打开 CMD,输入
ffmpeg -version,若显示版本信息则安装成功。
2. Linux 系统(以 Ubuntu/Debian 为例)
使用 apt 包管理器直接安装:
bash
sudo apt update
sudo apt install ffmpeg
验证:ffmpeg -version
3. MacOS 系统
使用 Homebrew 安装:
bash
brew install ffmpeg
验证:ffmpeg -version
二、FFmpeg 核心概念
- 编解码器(Codec) :用于音视频压缩/解压缩的算法,常见的有:
- 视频:H.264、H.265(HEVC)、VP9、AV1
- 音频:AAC、MP3、Opus
- 容器格式(Format) :音视频流的封装格式,常见的有:
- MP4、MKV、FLV、AVI、TS
- 流(Stream) :一个视频文件通常包含 视频流(v:0) 、音频流(a:0) 、字幕流(s:0) 等。
三、FFmpeg 基础命令格式
FFmpeg 命令的通用结构:
bash
ffmpeg [全局参数] [输入文件参数] -i [输入文件路径] [输出文件参数] [输出文件路径]
-i:指定输入文件,必须放在输入参数之后、输出参数之前。- 若不指定编解码器,FFmpeg 会根据输出格式自动选择默认编码器。
四、常用实战命令
1. 音视频转码
转码是 FFmpeg 最常用的功能,可实现格式转换、压缩等需求。
示例 1:将 AVI 转为 MP4(H.264+AAC 编码)
bash
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
参数说明:
-c:v libx264:指定视频编码器为 H.264-c:a aac:指定音频编码器为 AAC
示例 2:压缩视频(降低分辨率+调整码率)
bash
ffmpeg -i input.mp4 -s 1280x720 -b:v 1500k -c:v libx265 -c:a copy output_compress.mp4
参数说明:
-s 1280x720:设置输出分辨率为 720P-b:v 1500k:设置视频码率为 1500kbps-c:a copy:直接复制音频流,不重新编码(节省时间)
2. 音视频剪辑(截取片段)
无需完整转码,快速截取指定时间段的内容。
bash
ffmpeg -ss 00:01:30 -i input.mp4 -to 00:03:15 -c copy output_cut.mp4
参数说明:
-ss 00:01:30:指定开始时间(时:分:秒),放在-i前可加速截取-to 00:03:15:指定结束时间-c copy:直接复制流,无质量损失,速度极快
3. 提取音频/视频
示例 1:提取视频中的音频(保存为 MP3)
bash
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
参数说明:
-vn:禁用视频流-q:a 2:设置音频质量(0-9,数值越小质量越高)
示例 2:提取视频流(无音频)
bash
ffmpeg -i input.mp4 -an -c:v copy output_video_only.mp4
参数说明:
-an:禁用音频流
4. 音视频合并
方式 1:同格式文件合并(如多个 MP4 片段)
-
创建
filelist.txt,写入待合并的文件路径:txtfile 'part1.mp4' file 'part2.mp4' file 'part3.mp4' -
执行合并命令:
bashffmpeg -f concat -safe 0 -i filelist.txt -c copy merged.mp4
参数说明:
-f concat:使用 concat 分离器-safe 0:允许使用绝对路径
方式 2:不同格式文件合并(需重新编码)
bash
ffmpeg -i input1.mp4 -i input2.avi -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" merged.mp4
5. 推流与拉流(流媒体应用)
FFmpeg 可用于向 RTMP/RTSP 服务器推流,或从服务器拉流保存。
示例 1:本地视频推送到 RTMP 服务器(如直播)
bash
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your_server_ip:1935/live/stream_key
参数说明:
-re:按视频帧率读取,模拟实时流
示例 2:拉取 RTSP 摄像头流并保存
bash
ffmpeg -i rtsp://camera_ip/stream -c copy camera_record.mp4
五、高级功能:滤镜(Filter)
FFmpeg 滤镜可实现视频裁剪、缩放、加水印、音频混音等复杂操作,通过 -vf(视频滤镜)、-af(音频滤镜)调用。
1. 视频加水印
bash
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output_watermark.mp4
参数说明:
overlay=10:10:水印位置为左上角(x:10, y:10)
2. 音频音量调整
bash
ffmpeg -i input.mp4 -af "volume=2.0" output_loud.mp4
参数说明:
volume=2.0:音量放大 2 倍
六、常见问题排查
- "找不到编码器" :安装完整版 FFmpeg,或通过
ffmpeg -encoders查看支持的编码器。 - 转码速度慢 :
- 使用
-c copy跳过编码(仅适合同格式操作); - 降低分辨率或码率;
- 启用硬件加速(如
-c:v h264_nvenc调用 NVIDIA GPU 编码)。
- 使用
- 音视频不同步 :检查输入文件的时间戳,或通过
-async 1参数调整音频同步。
七、学习资源拓展
- 官方文档 :FFmpeg Documentation
- 滤镜手册 :FFmpeg Filters
- 中文社区:FFmpeg 中文网、掘金/知乎的音视频技术专栏