ARTICLE · 1091006
转格式还得装一堆软件?
转格式还得装一堆软件?
装 10 个软件
不如 1 条命令
转格式 · 压体积 · 提音频 · 做 GIF
FFmpeg 日常干货
📦 9 Parts + Conclusion
👉 滑动
PART 01
三个概念
CONCEPT
PART 02
格式转换
FORMAT
PART 03
压缩体积
COMPRESS
PART 04
提取音频
AUDIO
PART 05
裁剪片段
CUT
PART 06
合并拼接
MERGE
PART 07
缩放适配
SCALE
PART 08
进阶四连
ADVANCED
PART 09
批量与坑
BATCH
PART ///
写在最后
SUMMARY
剪映、格式工厂、在线转码网站,底层几乎都是它
没有窗口和按钮,一行命令搞定音视频
这篇文章只整理日常真正用得上的命令,照着复制就能跑。全文共 9 个板块,从格式转换到批量处理,最后附带几个高频踩坑点。
01
PART
先搞懂三个概念,命令就不会看晕
THREE CONCEPTS · 基础认知
很多人被 FFmpeg 吓退,不是因为命令长,而是因为它没有界面提示。其实只要记住三件事。
第一,输入和输出靠位置区分。-i 后面跟的是输入文件,命令最后那个是输出文件。中间夹着的参数作用在谁身上,取决于它站在哪。
第二,参数按位置生效。写在 -i 之前的叫全局参数,写在 -i 之后、输出文件之前的叫输出参数。顺序错了,命令就不按你想的跑。
第三,容器和编码是两回事。mp4、mkv 是容器,相当于盒子;H.264、AAC 是编码,相当于盒子里的东西。改后缀只是换个盒子,盒子里的东西不一定能跟着换。
✦ 一句话记住
记住这三点,下面所有命令都只是排列组合。
02
PART
格式转换:一行命令换容器
FORMAT · 容器互转
最常见也最简单的用法:
ffmpeg -i input.mov output.mp4
FFmpeg 会自动选择合适的编码器重新编码。如果你只是换个容器、不想重新压缩,可以用:
ffmpeg -i input.mkv -c copy output.mp4
-c copy 表示音视频流原样复制、不重新编码,速度极快。注意,如果目标容器不支持源编码,这条命令会直接报错,那就去掉 -c copy 老老实实重编码。
03
PART
压缩体积:CRF 是最好的入手点
COMPRESS · 画质与体积
视频太大,是最高频的需求。很多付费软件都限制上传视频大小,推荐用 CRF 模式,它能自动分配码率、兼顾画质:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
参数逐个说清楚
-crf 23
画质与体积的平衡点,范围 0–51。数字越小画质越好、文件越大。18 接近无损,23 是默认推荐,28 已经很省空间。
-preset medium
编码速度与压缩率的权衡,可选 ultrafast 到 veryslow,越慢压得越小。
-b:a 128k
音频码率,语音 64k、音乐 128k 基本够用。
如果平台有硬性码率要求,比如投稿限制 2Mbps,就改用码率模式:
ffmpeg -i input.mp4 -b:v 2M -maxrate 2.5M -bufsize 4M -c:a aac output.mp4
04
PART
提取音频与音频转格式
AUDIO · 抽音与转码
只想要视频里的声音:
ffmpeg -i input.mp4 -vn -c:a copy output.m4a
-vn 表示不处理视频,-c:a copy 直接复制音频流,速度极快。
如果源音频不是 mp3、而你想转成 mp3:
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
-q:a 2 是可变码率质量,0 最好、9 最差,2 左右听觉上已接近原声。
05
PART
裁剪:截时间段、裁画面
CUT · 时间与画面
截取片段
从第 1 分 30 秒开始、取 30 秒:
ffmpeg -ss 00:01:30 -i input.mp4 -t 00:00:30 -c copy output.mp4
-ss 是起点,-t 是时长,想用终点就用 -to。-ss 放在 -i 前面速度最快,直接跳关键帧;放在后面定位更精确,但慢一些。
裁剪画面
从坐标 (100,50) 开始、裁出 640×480:
ffmpeg -i input.mp4 -vf "crop=640:480:100:50" output.mp4
crop 的参数顺序是宽、高、起始 x、起始 y。
06
PART
合并:视频拼接与音视频合成
MERGE · 拼接与配乐
多个视频首尾拼接
先把文件名写进一个 list.txt:
file 'a.mp4'
file 'b.mp4'
file 'c.mp4'
然后执行:
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
要求所有片段的编码和分辨率一致,否则拼接会失败。分辨率不一致时,先统一缩放再拼。
给视频换配乐
用新音频替换原音:
ffmpeg -i video.mp4 -i music.mp3 -c:v copy -map 0:v:0 -map 1:a:0 -shortest output.mp4
-map 指定从哪个输入取哪条流,-shortest 让输出长度跟随较短的流。
07
PART
缩放与适配:分辨率、比例
SCALE · 尺寸与比例
ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4
-1 表示该维度按比例自动计算,这样画面不会变形。想强制等比填充、四周加黑边:
ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.mp4
这条在做竖版转横版、统一到 720p 时非常实用。
08
PART
进阶四连:水印、变速、GIF、抽帧
ADVANCED · 四个高频操作
加水印
右上角、距边 20 像素:
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-20:20" output.mp4
W-w 表示右边距,H-h 是下边距。
变速(音画同步)
两倍速:
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
视频用 setpts=PTS/x,音频用 atempo=x。注意 atempo 单次范围只有 0.5–2.0,要更快得串联多个。
视频转 GIF
质量较好的写法:
ffmpeg -ss 5 -t 3 -i input.mp4 -vf "fps=12,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif
先 palettegen 生成调色板再 paletteuse,能明显减少 GIF 的色带噪点。
按秒抽帧
每秒一帧存成图片:
ffmpeg -i input.mp4 -vf fps=1 thumb_%03d.jpg
09
PART
批量处理与几个常见坑
BATCH · 提效与避坑
批量转码
把当前目录所有 mov 转成 mp4:
for f in *.mov; do ffmpeg -i "$f" -c:v libx264 -crf 23 "${f%.mov}.mp4"; done
!几个会让人抓狂的坑 🕳
下面 5 条,几乎每个新手都会踩一次。
参数顺序。全局参数放最前,输入参数放 -i 前,输出参数放输出文件名前。顺序错了,命令直接报错。
-c copy 的边界。它只换容器不转码,快,但源编码不被目标容器支持时会失败。
时间戳错乱。拼接或处理网络流时若报时间戳错误,加 -fflags +genpts 试试。
别用中文或带空格的路径。很多报错其实来自文件名里的空格和特殊字符,用英文短路径最省心。
先小片段试跑。大文件一次要跑几十分钟,先用 -t 10 截取 10 秒验证参数,再整体处理。
///
LAST
写在最后
SUMMARY · 收个尾
FFmpeg 的参数有一千多个,但日常真正高频的,就是上面这些。把它当成一套命令行工具链来用,遇到需求先想清楚:是要换容器、改编码,还是只动画面。思路顺了,命令自然就拼得出来。
如果你觉得今天这篇有收获,欢迎点个关注。
既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。
THANKS FOR READING