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 -versionmacOS bash# 推荐用Homebrew安装
brew install ffmpeg
# 验证
ffmpeg -versionLinux bash# Ubuntu / Debian
sudo apt update && sudo apt install ffmpeg
# CentOS / RHEL(需要先装EPEL和RPM Fusion)
sudo yum install ffmpeg
# 验证
ffmpeg -version检查编码器支持 bash# 查看所有可用编码器
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命令都遵循这个结构:
bashffmpeg [全局选项] [输入选项] -i 输入文件 [输出选项] 输出文件位置很重要:
全局选项在最前面输入选项在 -i 之前输出选项在输入文件之后、输出文件之前例:
bashffmpeg -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例) bash# 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例) bash# 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例) bash# 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例) bash# 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例) bash# 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例) bash# 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例) bash# 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太慢或用了AV1preset改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参考资料 FFmpeg 官方文档FFmpeg WikiFFmpeg 编码器列表FFmpeg.wasm GitHub