FFmpeg 从入门到深入(二):码率、分辨率、帧率与编码预设怎么选
系列第二篇。上一篇跑通了安装和两条基础命令,这一篇把转码时最常纠结的四组参数讲清楚:码率、分辨率、帧率、preset。看完你就知道每个参数该填多少、为什么要这么填。
码率:控制体积最直接的手段
码率(bitrate)指每秒分配给画面的数据量,单位 kbps。码率越高画质越好、文件越大。视频用 -b:v,音频用 -b:a:
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -c:a aac -b:a 128k output.mp4
但要注意:-b:v 和上一篇的 -crf 是两种思路,不要同时用。CRF 是"画质优先"——你定质量,体积随内容复杂度浮动;-b:v 是"体积优先"——你定体积,画质随内容浮动。日常存档压缩推荐 CRF;给平台上传、有体积上限时才用码率。
码率填多少?一个粗算公式:目标体积(MB) × 8 × 1024 ÷ 时长(秒) = 总码率(kbps),再减去音频码率就是视频码率。比如 10 分钟视频想控制在 200MB:200×8×1024÷600 ≈ 2730kbps,留出音频 128k,视频给 2600k 左右。
想严格卡住体积,用两遍编码(第一遍只分析,不输出成品):
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 2600k -pass 1 -an -f mp4 /dev/null
ffmpeg -i input.mp4 -c:v libx264 -b:v 2600k -pass 2 -c:a aac -b:a 128k output.mp4
Windows 下把 /dev/null 换成 NUL。两遍比一遍慢一倍,但体积控制更精准。
分辨率:scale 滤镜
ffmpeg -i input.mp4 -vf scale=1920:-2 -c:v libx264 -crf 23 output.mp4
-vf是视频滤镜链,这是第一次用到它;scale=宽:高,把高度写成-2表示按比例自动算,并且保证结果是偶数(H.264 要求宽高都是偶数,写-1可能算出奇数导致报错,习惯写-2更稳);- 缩小没问题,但不要盲目放大:320p 拉到 1080p 不会变清晰,只会让文件变大。
帧率:-r
ffmpeg -i input.mp4 -r 30 -c:v libx264 -crf 23 output.mp4
帧率减半,码率需求也大致减半,适合录屏、会议这类内容。但动作画面(游戏、运动)降帧会明显卡顿。先看源文件帧率再决定:ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 input.mp4。常见值:24(电影感)、25/30(常规)、60(高动态)。
preset:压缩率和速度的权衡
libx264 内置了从 ultrafast 到 veryslow 共 9 档预设,控制编码器"花多少力气找压缩机会":
| preset | 大致速度 | 同画质体积 |
|---|---|---|
| ultrafast | 最快 | 明显偏大 |
| medium(默认) | 中等 | 基准 |
| slow | 慢几倍 | 小 5%~10% |
| veryslow | 最慢 | 再小一点点 |
实用建议:批量脚本用 -preset fast 图快;压一次存档不再动的用 slow;veryslow 相比 slow 提升很小,性价比低。
组合起来
手机 4K 视频压成适合分享的 1080p30:
ffmpeg -i input.mp4 -vf scale=1920:-2 -r 30 -c:v libx264 -preset slow -crf 23 -c:a aac -b:a 128k output.mp4
各参数含义串起来就是一句话:先把画面降到 1080p、帧率降到 30,再用质量优先的 CRF 23 和偏慢预设换取更小体积,音频转 AAC 128k。这套组合能覆盖大多数"压一下再分享"的场景。
小结
码率是体积优先、CRF 是质量优先,二选一;scale 缩放记住 -2 保证偶数;降帧看内容类型;preset 在速度和压缩率之间取舍,默认 medium 其实就不差。下一篇讲剪切与合并:-ss/-to 的精确定位,以及 concat 的两种用法和适用场景。
- 点赞
- 收藏
- 关注作者
评论(0)