FFmpeg入门实战教程:从安装到常用命令30例(含转码/压缩/切片/合并)
每个做视频的人,迟早要撞上FFmpeg。VLC用它、YouTube用它、OBS用它、所有视频处理软件底层都用了它。但FFmpeg是命令行工具,没界面、参数多、文档晦涩,劝退了不少人。今天就用一篇实战教程,带你从零上手FFmpeg,30个常用命令直接复制粘贴就能用。
FFmpeg是什么
FFmpeg是2000年由Fabrice Bellard创建的开源音视频处理套件,今天是 事实上的音视频处理标准。它包含三个核心工具:
- ffmpeg:编码、转码、处理音视频
- ffprobe:查看媒体文件元数据
- ffplay:简易播放器
能做的事几乎涵盖所有音视频场景:格式转换、视频压缩、HLS切片、视频合并、提取音频、添加字幕、视频截图、滤镜处理、流媒体推拉流、录屏、视频转GIF……
无数软件基于FFmpeg构建:VLC、OBS、HandBrake、Premiere底层调用FFmpeg、Chrome的媒体解码、YouTube的服务器转码、本站的所有视频工具——全都是FFmpeg。
FFmpeg的安装
Windows
- 访问 ffmpeg.org/download.html
- 下载Windows builds(推荐gyan.dev版本)
- 解压到
C:\ffmpeg - 把
C:\ffmpeg\bin加入PATH环境变量 - 打开新的命令行窗口,运行
ffmpeg -version
macOS
# 推荐用Homebrew安装
brew install ffmpeg
# 验证
ffmpeg -versionLinux
# Ubuntu / Debian
sudo apt update && sudo apt install ffmpeg
# CentOS / RHEL(需要先装EPEL和RPM Fusion)
sudo yum install ffmpeg
# 验证
ffmpeg -version检查编码器支持
# 查看所有可用编码器
ffmpeg -encoders
# 检查是否支持H.264
ffmpeg -encoders | grep 264
# 检查是否支持H.265
ffmpeg -encoders | grep 265如果默认安装的FFmpeg缺少某些编码器(如libfdk_aac),需要自己编译或换发行版。
核心概念:容器、编码、流
学FFmpeg必须先搞清楚三个概念:
- 容器(Container):装数据的"箱子",决定文件扩展名。MP4、MKV、WebM、AVI、TS、MOV都是容器。
- 流(Stream):箱子里装的内容。一个视频文件通常包含视频流、音频流、字幕流。
- 编码(Codec):流的压缩方式。H.264、H.265、VP9是视频编码;AAC、MP3、Opus是音频编码。
关键点: 容器决定兼容性(什么播放器能打开),编码决定解码能力(播放器能不能解码)。同一个MP4容器可以装H.264也可以装H.265,浏览器能不能播取决于编码而非容器。
如果你想深入了解编码差异,可以看本站 H.264 vs H.265 vs AV1视频编码对比。
FFmpeg命令结构
所有FFmpeg命令都遵循这个结构:
ffmpeg [全局选项] [输入选项] -i 输入文件 [输出选项] 输出文件位置很重要:
- 全局选项在最前面
- 输入选项在
-i之前 - 输出选项在输入文件之后、输出文件之前
例:
ffmpeg -y -ss 00:00:10 -i input.mp4 -t 5 -c:v libx264 -crf 23 output.mp4
# ↑ ↑______________↑ ↑________________________↑
# 全局 输入选项 输出选项-y:全局,覆盖输出文件-ss 00:00:10:输入选项,从第10秒开始读-i input.mp4:输入文件-t 5:输出选项,只输出5秒-c:v libx264 -crf 23:输出选项,H.264编码CRF 23output.mp4:输出文件
30个常用命令实战
一、格式转换(10例)
# 1. MP4转WebM
ffmpeg -i input.mp4 -c:v libvpx-vp9 -c:a libopus output.webm
# 2. WebM转MP4
ffmpeg -i input.webm -c:v libx264 -crf 23 -c:a aac output.mp4
# 3. MKV转MP4(流复制,无损且快)
ffmpeg -i input.mkv -c copy output.mp4
# 4. MOV转MP4
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac output.mp4
# 5. AVI转MP4
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4
# 6. MP4转GIF(基础版,画质差)
ffmpeg -i input.mp4 output.gif
# 7. MP4转GIF(高质量两阶段)
ffmpeg -i input.mp4 -vf "fps=15,scale=540:-1:flags=lanczos,palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -filter_complex "fps=15,scale=540:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif
# 8. 提取音频为MP3
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3
# 9. 提取音频为AAC
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.m4a
# 10. 音频格式互转(FLAC转MP3)
ffmpeg -i input.flac -c:a libmp3lame -b:a 320k output.mp3更多格式转换场景可以看本站 WebM转MP4指南 和 音频格式转换指南。
二、视频压缩(5例)
# 11. 基础压缩(CRF 23)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4
# 12. 高压缩(CRF 28,体积减60%)
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset slow -c:a aac -b:a 96k output.mp4
# 13. H.265编码(同画质体积减半)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mp4
# 14. 限制最大码率(流媒体场景)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -maxrate 2M -bufsize 4M -c:a aac output.mp4
# 15. 微信小视频(720p + 2Mbps)
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -maxrate 2M -bufsize 4M -s 1280x720 -r 30 -c:a aac -b:a 96k output.mp4详细压缩原理可以看本站 视频压缩完整指南。
三、HLS切片(3例)
# 16. 基础HLS切片
ffmpeg -i input.mp4 -codec copy -hls_time 6 -hls_playlist_type vod -hls_segment_filename "seg_%03d.ts" playlist.m3u8
# 17. 重新编码切片
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -hls_time 6 -hls_playlist_type vod -hls_segment_filename "seg_%03d.ts" playlist.m3u8
# 18. 直播切片(保持最近6个分片)
ffmpeg -re -i input.mp4 -codec copy -hls_time 4 -hls_list_size 6 -hls_flags delete_segments -hls_segment_filename "live_%03d.ts" live.m3u8HLS切片详细教程见本站 MP4转M3U8教程。
四、视频合并(3例)
# 19. TS合并(无损流复制)
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
# 20. 不同格式视频合并(需重新编码)
ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -crf 23 -c:a aac output.mp4
# 21. 拼接两个MP4(简单方式,仅限同编码同参数)
ffmpeg -i "concat:input1.mp4|input2.mp4" -c copy output.mp4TS合并详细教程见本站 TS文件合并教程。
五、剪辑与截图(4例)
# 22. 截取视频片段(从1分钟开始截取30秒)
ffmpeg -ss 00:01:00 -t 00:00:30 -i input.mp4 -c copy output.mp4
# 23. 截取视频片段(更精确,重新编码)
ffmpeg -ss 00:01:00 -i input.mp4 -t 00:00:30 -c:v libx264 -crf 23 -c:a aac output.mp4
# 24. 截取单帧为图片(第5秒)
ffmpeg -ss 00:00:05 -i input.mp4 -frames:v 1 output.png
# 25. 每秒截一张图
ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png六、滤镜与字幕(3例)
# 26. 缩放视频到720p
ffmpeg -i input.mp4 -vf "scale=1280:720" -c:v libx264 -crf 23 -c:a aac output.mp4
# 27. 加水印(图片放右上角)
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:10" -c:a copy output.mp4
# 28. 烧录字幕
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:v libx264 -crf 23 -c:a aac output.mp4七、推流与录屏(2例)
# 29. RTMP推流到B站/斗鱼
ffmpeg -re -i input.mp4 -c copy -f flv "rtmp://live-push.example.com/live/streamkey"
# 30. Linux录屏(x11grab)
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0 -c:v libx264 -crf 23 output.mp4推流详细教程可以看本站 直播推流完整指南。
常用参数速查
视频参数
| 参数 | 含义 | 常用值 |
|---|---|---|
-c:v | 视频编码器 | libx264、libx265、libvpx-vp9 |
-crf | 质量(H.264/H.265) | 18(视觉无损)、23(平衡)、28(高压缩) |
-preset | 编码速度 | ultrafast → veryslow,越慢压缩率越高 |
-b:v | 视频码率 | 2M、5M等 |
-maxrate | 最大码率 | 配合 -bufsize 使用 |
-s | 分辨率 | 1280x720、1920x1080 |
-r | 帧率 | 24、30、60 |
-vf | 视频滤镜 | scale=...、fps=...、transpose=... |
音频参数
| 参数 | 含义 | 常用值 |
|---|---|---|
-c:a | 音频编码器 | aac、libmp3lame、libopus、copy |
-b:a | 音频码率 | 128k、192k、320k |
-ar | 采样率 | 44100、48000 |
-ac | 声道数 | 1(mono)、2(stereo) |
时间参数
| 参数 | 含义 | 示例 |
|---|---|---|
-ss | 开始时间 | 00:01:30 或 90 |
-t | 持续时长 | 00:00:30 或 30 |
-to | 结束时间 | 00:02:00 |
其他常用
| 参数 | 含义 |
|---|---|
-i | 输入文件 |
-c copy | 流复制,不重新编码(无损且快) |
-vn | 丢弃视频 |
-an | 丢弃音频 |
-y | 覆盖输出文件不询问 |
-n | 不覆盖已存在文件 |
-metadata | 添加元数据 |
常见问题速查
| 问题 | 原因 | 解决 |
|---|---|---|
Unknown encoder 'libx264' | 编译时没启用 | 重装完整版FFmpeg |
| 转换后无声音 | 音频编码不兼容 | 加 -c:a aac |
| 文件巨大 | CRF太低或preset太快 | CRF调到23+,preset用medium或slow |
| 转换很慢 | preset太慢或用了AV1 | preset改medium或fast |
| 报错"Non-monotonous DTS" | 时间戳错误 | 加 -fflags +genpts |
| 跨域播放失败 | MP4的moov atom在末尾 | 加 -movflags +faststart |
| 截取后开头黑屏 | -ss在-i后不准确 | 把-ss移到-i前面 |
FFmpeg.wasm:浏览器里的FFmpeg
本站所有视频工具都基于 FFmpeg.wasm——把FFmpeg的C代码编译成WebAssembly,让浏览器直接执行。优势:
- 无需安装,打开网页就能用
- 文件不上传服务器,隐私零风险
- 性能接近原生(慢30%-50%)
缺点是受浏览器内存限制,超大文件(>2GB)容易崩,复杂滤镜性能不如原生。日常使用完全够用,专业生产建议装原生FFmpeg。
总结
FFmpeg是音视频处理的瑞士军刀,命令行没界面但参数固定、可批量、可自动化。记住命令结构 ffmpeg [输入选项] -i 输入 [输出选项] 输出,30个常用命令覆盖80%场景。
不想装软件就用本站的浏览器工具(底层也是FFmpeg),专业场景装原生FFmpeg更稳。
快速回顾:
- 命令结构:
ffmpeg [输入选项] -i 输入 [输出选项] 输出 - 万能转码:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4 - 流复制无损:
-c copy不重新编码 - 查看元数据:
ffprobe input.mp4 - 浏览器版:本站所有视频工具底层都是FFmpeg.wasm