Skip to content

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

  1. 访问 ffmpeg.org/download.html
  2. 下载Windows builds(推荐gyan.dev版本)
  3. 解压到 C:\ffmpeg
  4. C:\ffmpeg\bin 加入PATH环境变量
  5. 打开新的命令行窗口,运行 ffmpeg -version

macOS

bash
# 推荐用Homebrew安装
brew install ffmpeg

# 验证
ffmpeg -version

Linux

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命令都遵循这个结构:

bash
ffmpeg [全局选项] [输入选项] -i 输入文件 [输出选项] 输出文件

位置很重要:

  • 全局选项在最前面
  • 输入选项在 -i 之前
  • 输出选项在输入文件之后、输出文件之前

例:

bash
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 23
  • output.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.m3u8

HLS切片详细教程见本站 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.mp4

TS合并详细教程见本站 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视频编码器libx264libx265libvpx-vp9
-crf质量(H.264/H.265)18(视觉无损)、23(平衡)、28(高压缩)
-preset编码速度ultrafastveryslow,越慢压缩率越高
-b:v视频码率2M5M
-maxrate最大码率配合 -bufsize 使用
-s分辨率1280x7201920x1080
-r帧率243060
-vf视频滤镜scale=...fps=...transpose=...

音频参数

参数含义常用值
-c:a音频编码器aaclibmp3lamelibopuscopy
-b:a音频码率128k192k320k
-ar采样率4410048000
-ac声道数1(mono)、2(stereo)

时间参数

参数含义示例
-ss开始时间00:01:3090
-t持续时长00:00:3030
-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

参考资料

Last updated: