FFmpeg 转码详解:封装格式、编码器、码率控制 📅 2026/7/8 1:20:44 FFmpeg 转码详解封装格式、编码器、码率控制上一篇讲了 20 个常用命令这篇深入讲转码——FFmpeg 最核心的功能。什么是封装格式什么是编码格式CRF 和 CBR 怎么选H.264 和 H.265 差在哪看完这篇你再也不会对着一堆参数瞎猜了。大家好我是黒漂技术佬。很多人用 FFmpeg 转码就是改个后缀名或者随便抄个命令——能用是能用但体积大、质量差、速度慢问题一堆。转码这件事参数调好了体积小一半画质还更好调不好又大又糊还慢。这篇把转码的核心概念全部讲清楚封装、编码、码率控制、preset 速度档位——搞懂这些你调出来的视频参数就不会差。一、先搞清楚两个概念封装 vs 编码新手最容易搞混的就是这俩。封装格式Container就是我们常说的 MP4、MKV、AVI、MOV 这些文件后缀。它相当于一个箱子里面装着视频流、音频流、字幕流、元数据等。MP4 文件 视频流(H.264) 音频流(AAC) 字幕 元数据同一个视频换封装格式比如 MP4 转 MKV视频和音频本身没变只是换了个箱子装。这时候用-c copy直接复制流就行速度极快。编码格式Codec编码是视频/音频的压缩算法。常见的视频编码H.264 (AVC)、H.265 (HEVC)、VP9、AV1音频编码AAC、MP3、Opus、FLAC编码才是决定画质、体积、兼容性的核心。转码通常指的就是重新编码——把一种编码格式换成另一种或者同一种编码调整码率/质量。 一句话总结封装是箱子编码是箱子里东西的压缩方式。换箱子不用重新压改压缩方式才需要重新编码。二、常见视频编码器对比H.264 / AVC最通用所有设备都支持FFmpeg 里用libx264软件编码性价比高兼容性最好适合通用场景、发微信、上传视频平台H.265 / HEVC压缩率比 H.264 高30%-50%同等画质体积更小FFmpeg 里用libx265缺点编码慢比 x264 慢 2-3 倍、老设备不支持适合存储录像、4K 视频、带宽有限的场景VP9 / AV1Google 主推的开源编码免专利费AV1 压缩率比 H.265 还高但编码巨慢适合Web 视频、YouTube硬件编码器NVIDIAh264_nvenc/hevc_nvencIntelh264_qsv/hevc_qsvRK3588h264_rkmpp/hevc_rkmpp速度快实时编码无压力但画质比软件编码略差适合直播推流、实时处理、摄像头录像三、码率控制的四种模式这是转码最核心的参数直接决定画质和体积的平衡。1. CBRConstant BitRate固定码率ffmpeg-iinput.mp4-b:v2M-maxrate2M-bufsize2M output.mp4码率从头到尾基本固定优点码率可控适合直播、流媒体服务器缺点简单场景浪费码率复杂场景不够用画质波动大适用场景直播推流、视频会议、带宽严格受限的环境2. VBRVariable BitRate动态码率ffmpeg-iinput.mp4-b:v2M output.mp4码率随画面复杂度变化动的地方码率高静的地方码率低平均码率接近目标值但峰值可能超总体比 CBR 画质好适用场景普通视频压缩、本地存储3. CRFConstant Rate Factor恒定质量ffmpeg-iinput.mp4-vcodeclibx264-crf23output.mp4最推荐的模式保证画质恒定码率自动调整数值范围 0-51数值越小画质越好、体积越大常用范围18-2818视觉无损一般人看不出和原片区别23默认值性价比最高28体积小很多画质可接受我平时压视频发微信、存资料一律用 CRF 28 medium preset体积小一半肉眼基本看不出差别。适用场景本地存储、视频分享、绝大多数非直播场景4. ABRAverage BitRate平均码率介于 CBR 和 VBR 之间目标是达到指定的平均码率。实际用得不多。四、Preset速度和压缩率的权衡-preset参数控制编码速度和压缩效率的平衡。ffmpeg-iinput.mp4-vcodeclibx264-presetmedium-crf23output.mp4从快到慢一共这些档位ultrafast → superfast → veryfast → faster → fast → medium → slow → slower → veryslow越快编码速度快但压缩率低同质量体积大越慢编码速度慢但压缩率高同质量体积小medium是默认值大多数场景够用。我的经验批量处理、赶时间fast或veryfast日常转码medium默认就行珍藏视频、追求最小体积slow或slower慢但体积能小 10-20%⚠️ 注意preset 不影响画质只影响压缩率和速度。同样 CRF 值下veryslow 和 ultrafast 画质差不多但体积可能差 30%。五、Tune针对内容优化-tune参数针对不同视频内容做优化ffmpeg-iinput.mp4-vcodeclibx264-tunefilm-crf23output.mp4tune 值适用场景film电影、真人视频animation动画、卡通色块多、边缘清晰grain胶片颗粒感强的视频stillimage幻灯片、静态画面多fastdecode降低解码复杂度低配设备播放zerolatency零延迟适合直播、视频通话做动画剪辑就加-tune animation做直播就加-tune zerolatency细节优化还是挺明显的。六、Profile 和 Level兼容性控制H.264 有不同的 profile决定了用哪些编码特性Baseline最基础老设备、低功耗设备支持Main中等大部分设备支持High最高压缩率新设备都支持ffmpeg-iinput.mp4-vcodeclibx264-profile:vhigh-level4.1output.mp4一般用 High profile 就行。如果要兼容很老的设备比如十年前的手机降到 Main 或 Baseline。七、音频编码参数视频讲完了音频也简单说下。AAC 编码最通用的音频编码MP4 默认就是 AAC。ffmpeg-iinput.mp4-acodecaac-b:a128k output.mp4-b:a 128k128kbps 立体声接近 CD 音质一般视频 128k 够用音乐视频可以到 192k 或 256kMP3 编码ffmpeg-iinput.mp3-acodeclibmp3lame-q:a2output.mp3-q:a是 VBR 质量模式0 最好9 最差0-2接近无损2-3高音质推荐4-5中等6低码率八、常用转码组合直接抄作业1. 日常压缩 MP4推荐ffmpeg-iinput.mp4-vcodeclibx264-crf28-presetmedium-acodecaac-b:a128k output.mp4体积小一半画质基本没损失通用场景首选。2. 高画质珍藏ffmpeg-iinput.mp4-vcodeclibx264-crf18-presetslow-acodecaac-b:a192k output.mp4视觉无损适合重要视频存档。3. H.265 超小体积ffmpeg-iinput.mp4-vcodeclibx265-crf28-presetmedium output.mp4比 H.264 再小 30-40%但编码慢很多。适合硬盘空间紧张的场景。4. 直播推流CBRffmpeg-iinput.mp4-vcodeclibx264-b:v2M-maxrate2M-bufsize4M-presetveryfast-tunezerolatency-acodecaac-b:a128k-fflv rtmp://推流地址5. 兼容老设备ffmpeg-iinput.mp4-vcodeclibx264-profile:vmain-level3.1-crf23-acodecaac-b:a128k output.mp4九、转码速度怎么优化1. 用更快的 presetmedium改fast或veryfast速度提升明显体积增加不多。2. 多线程libx264/x265 默认就是多线程的一般不用手动调。但可以指定ffmpeg-iinput.mp4-vcodeclibx264-threads8-crf23output.mp43. 硬件加速有显卡的话直接上硬件编码速度是软件的 5-10 倍# NVIDIA 显卡ffmpeg-iinput.mp4-vcodech264_nvenc-crf23output.mp4# RK3588ffmpeg-iinput.mp4-vcodech264_rkmpp-b:v2M output.mp4硬件加速后面专门有一篇细讲。十、新手常见的三个误区误区 1码率越高画质越好不一定。超过一定阈值之后码率再涨画质也不会提升就是浪费。CRF 模式就是解决这个问题的——保证质量刚好码率自动适配。误区 2分辨率越高越清晰源文件只有 720p你转成 1080p 也不会变清晰只是体积变大了。转码只能往下转不能往上提升画质。误区 3转一次损失一次画质只要用的是有损编码H.264、H.265 都是每转一次就损失一次。所以尽量少转码能用-c copy就用非要转就一步到位别反复转。十一、本篇小结封装是箱子编码是压缩方式别搞混CRF 模式优先23 默认28 性价比高preset 控制速度和压缩率medium 够用赶时间用 fasttune 针对内容优化动画、直播各有对应音频 AAC 128k 基本够用能-c copy就别重新编码减少画质损失下一篇讲视频滤镜详解scale、crop、overlay、drawtext 这些常用滤镜深入讲还有 filter_complex 复杂滤镜链的用法——给视频加水印、加字幕、画中画一篇搞定。我是黒漂技术佬。