FFmpeg 不同编码的压缩命令详解

最近在处理视频时遇到一些技术问题,许多视频默认压缩太低,实际存储量比较大,因此对FFmpeg的视频编码与进行了了解,我最终根据项目需要选择是固定码率快速压缩,部分重点保留画质的视频则走了比较慢的动态码率,slow压缩,消耗时间比较长,但是符合我的项目需要。然后随手写了这个笔记,有兴趣的朋友可以了解一下。

要理解 FFmpeg 不同编码的压缩命令,首先需要明确FFmpeg 压缩的核心逻辑 :通过指定视频 / 音频编码器 (决定压缩算法)、比特率控制方式 (决定画质与文件大小的平衡)、压缩预设(决定压缩速度与压缩效率的权衡),再搭配分辨率、帧率等辅助参数,实现目标压缩效果。

以下分「视频编码 」和「音频编码 」两大类,详细拆解主流编码的压缩命令、核心参数及适用场景(命令中所有<>为需替换的自定义内容,#后为注释)。

一、先掌握:FFmpeg 压缩的 3 个核心通用参数

所有编码的压缩命令都基于以下 3 个核心逻辑,理解后可灵活适配任意编码:

  1. 编码器指定 :用 -c:v <视频编码器>(视频)或 -c:a <音频编码器>(音频)指定压缩算法(如libx264对应 H.264,libx265对应 H.265)。
  2. 比特率控制(画质 / 大小平衡)
    • CRF(恒定质量模式) :更常用,通过 -crf <数值> 设定质量(数值越小画质越好,文件越大),无需手动算比特率,FFmpeg 自动适配。
    • CBR(恒定比特率) :用 -b:v <比特率> 强制固定视频比特率(如2000k=2Mbps),适合流媒体(画质波动小,但文件大小固定,可能浪费空间)。
  1. 压缩预设(速度 / 效率权衡) :用 -preset <预设值> 设定压缩速度(预设越慢,压缩算法越精细,文件越小,但耗时越长),所有主流编码器都支持类似预设(如ultrafast最快,veryslow最慢)。

二、主流视频编码的压缩命令详解

视频编码是决定文件大小和画质的核心,以下是 4 种最常用编码的实战命令:

1. H.264(x264):兼容性最强的编码(推荐首选)

  • 编码特点:目前最通用的视频编码,支持所有设备(手机、电视、浏览器),压缩率中等,平衡了画质、速度和兼容性。
  • 核心编码器 :libx264(FFmpeg 默认 H.264 编码器,开源高效)。
  • 关键参数
    • CRF 范围:18~28(18 = 接近无损,23 = 默认推荐,28 = 画质可接受的下限)。
    • 预设范围:ultrafast(最快)→ superfast→veryfast→faster→fast→medium(默认)→slow→slower→veryslow(最慢)。
    • 像素格式:-pix_fmt yuv420p(保证兼容性,避免部分播放器无法解码)。
实战命令 1:H.264 CRF 模式(推荐,平衡画质与大小)

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ffmpeg -i <输入文件.mp4> \ # 输入文件路径 -c:v libx264 \ # 指定视频编码器为x264(H.264) -crf 23 \ # 质量控制:23为默认,可调整18-28 -preset medium \ # 压缩速度:medium默认,追求小文件用veryslow,追求速度用veryfast -pix_fmt yuv420p \ # 像素格式:保证所有播放器兼容 -c:a aac -b:a 128k \ # 音频用AAC编码,128k比特率(兼顾音质和大小) <输出文件_H264.mp4> # 输出文件路径 |

实战命令 2:H.264 CBR 模式(适合流媒体 / 直播)

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ffmpeg -i <输入文件.mp4> \ -c:v libx264 \ -b:v 2000k \ # 固定视频比特率2000k(2Mbps) -minrate 2000k \ # 最低比特率(防止画质骤降) -maxrate 2000k \ # 最高比特率(防止带宽溢出) -bufsize 4000k \ # 缓冲区大小(通常为2倍比特率,平滑比特率波动) -preset medium \ -pix_fmt yuv420p \ -c:a aac -b:a 128k \ <输出文件_H264_CBR.mp4> |

2. H.265(x265):压缩率更高的编码(推荐大文件瘦身)

  • 编码特点:比 H.264 压缩率高 50% 左右(相同画质下文件小一半),但兼容性稍差(老设备 / 浏览器可能不支持),压缩速度比 H.264 慢。
  • 核心编码器 :libx265(FFmpeg 默认 H.265 编码器)。
  • 关键参数
    • CRF 范围:22~32(因压缩率高,相同 CRF 值下 H.265 比 H.264 文件小,画质相近)。
    • 预设范围:与 x264 一致,但相同预设下 x265 比 x264 慢 2~3 倍(如medium预设的 x265 耗时≈x264 的slow)。
实战命令:H.265 CRF 模式(大文件瘦身首选)

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ffmpeg -i <输入文件.mp4> \ -c:v libx265 \ # 指定视频编码器为x265(H.265) -crf 28 \ # 质量控制:28≈H.264的23,文件小一半 -preset medium \ # 追求速度用fast,追求更小文件用slow -pix_fmt yuv420p10le \ # 可选10位色深(yuv420p10le),画质更细腻(需设备支持) -c:a aac -b:a 128k \ <输出文件_H265.mp4> |

注意:若输出文件无法播放,检查设备是否支持 H.265(如 2018 年后的手机 / 电视基本支持,老电脑可能需要安装解码器)。

3. VP9:开源免费的 Web 编码(适合网页 / YouTube)

  • 编码特点:Google 开源,无专利费,压缩率接近 H.265,兼容性集中在 Web 端(Chrome、Firefox、YouTube 支持良好,手机 / 电视兼容性一般)。
  • 核心编码器 :libvpx-vp9(FFmpeg 默认 VP9 编码器)。
  • 关键参数
    • CRF 范围:20~30(25≈H.264 的 23,文件小 30%~40%)。
    • 预设范围:0(最快)~6(最慢),默认4;需搭配 -row-mt 1 开启多线程加速(VP9 单线程极慢)。
实战命令:VP9 Web 优化模式(适合网页播放)

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ffmpeg -i <输入文件.mp4> \ -c:v libvpx-vp9 \ # 指定视频编码器为VP9 -crf 25 \ # 质量控制:25为Web播放推荐值 -preset 4 \ # 4为默认,追求速度用2,追求小文件用6 -row-mt 1 \ # 开启多线程加速(必加,否则耗时极长) -b:v 0 \ # CRF模式下强制比特率自适应(避免画质限制) -c:a libopus -b:a 128k \ # 音频搭配Opus(VP9常用音频编码,比AAC高效) <输出文件_VP9.webm> # VP9推荐输出为webm格式(兼容性更好) |

4. AV1:下一代高效编码(未来趋势,目前慎用)

  • 编码特点 :AOM 联盟开源,压缩率比 H.265 高 20%~30%(相同画质下文件更小),但压缩速度极慢(比 H.265 慢 5~10 倍),兼容性目前较差(仅新浏览器 / 设备支持)。
  • 核心编码器
    • libaom-av1:参考编码器,压缩率最高但速度最慢。
    • libsvtav1:更实用的编码器(速度比 libaom 快 3~5 倍,压缩率接近),推荐优先使用。
  • 关键参数
    • CRF 范围:25~35(30≈H.265 的 28,文件小 20%)。
    • 预设范围(libsvtav1):0(最慢,压缩率最高)~13(最快,压缩率最低),默认6。
实战命令:AV1(libsvtav1)高效压缩

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ffmpeg -i <输入文件.mp4> \ -c:v libsvtav1 \ # 指定编码器为libsvtav1(速度更快,实用优先) -crf 30 \ # 质量控制:30为平衡值 -preset 6 \ # 6为默认,追求速度用10,追求小文件用3 -g 240 \ # 关键帧间隔(240帧=10秒,适合流媒体拖动) -c:a libopus -b:a 128k \ <输出文件_AV1.webm> # AV1推荐输出为webm或mp4(部分设备支持) |

三、主流音频编码的压缩命令(视频压缩必配)

视频文件中的音频也需要压缩,以下是 3 种常用音频编码的参数(通常搭配视频编码使用):

|------|------------|-----------------------------------|-----------------------|------------------------|
| 音频编码 | 编码器 | 核心参数 | 适用场景 | 命令示例(搭配视频时) |
| AAC | aac(默认) | -b:a 128k(比特率) | 通用兼容性(手机 / 电视 / 播放器) | -c:a aac -b:a 128k |
| MP3 | libmp3lame | -b:a 128k 或 -q:a 2(质量,0-9,2 = 优质) | 老设备兼容性(如旧 MP3 播放器) | -c:a libmp3lame -q:a 2 |
| Opus | libopus | -b:a 128k(比 AAC 高效) | Web / 流媒体(VP9/AV1 搭配) | -c:a libopus -b:a 128k |

四、进阶:结合分辨率 / 帧率的完整压缩命令

实际压缩中常需调整分辨率(减小尺寸进一步瘦身)或帧率(降低动态画面负担),以下是完整示例(H.265+AAC,分辨率从 1080P 降到 720P):

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ffmpeg -i <输入_1080P.mp4> \ -c:v libx265 \ -crf 28 \ -preset medium \ -s 1280x720 \ # 调整分辨率为720P(1280宽x720高) -r 25 \ # 调整帧率为25fps(适合多数视频,低于24fps可能卡顿) -pix_fmt yuv420p \ -c:a aac -b:a 128k \ -movflags +faststart \ # 优化MP4文件(让视频可边下载边播放,适合web) <输出_720P_H265.mp4> |

五、编码选择与参数权衡总结

|-------|-------|-------|------------|------------------------|---------|
| 编码 | 压缩率 | 速度 | 兼容性 | 推荐场景 | CRF 推荐值 |
| H.264 | ★★★☆☆ | ★★★★★ | ★★★★★ | 全设备兼容(手机 / 电视 / 存储) | 18-28 |
| H.265 | ★★★★☆ | ★★★☆☆ | ★★★☆☆(新设备) | 大文件瘦身(硬盘 / 云存储) | 22-32 |
| VP9 | ★★★★☆ | ★★☆☆☆ | ★★★☆☆(Web) | 网页 / YouTube / 无专利需求 | 20-30 |
| AV1 | ★★★★★ | ★☆☆☆☆ | ★★☆☆☆(新设备) | 未来 - proof(长期存储 / 高画质) | 25-35 |

关键权衡建议:

  1. 速度与文件大小 :预设越慢(如veryslow),文件越小,但耗时翻倍(如 H.264 的veryslow比ultrafast慢 10 倍,文件小 30%)。
  2. 画质与兼容性:H.265/AV1 画质更好,但老设备无法播放,优先选 H.264 除非确认设备支持。
  3. CRF 值调整:每次调整 ±2,画质差异可感知(如 H.264 从 23 降到 21,画质提升明显,文件大 15% 左右)。

通过以上命令和参数拆解,可根据实际需求(兼容性、文件大小、速度)灵活组合,实现高效的 FFmpeg 压缩。

相关推荐
Natsume17107 小时前
音视频开发入门:FFmpeg vs GStreamer,新手该如何选择?
c语言·c++·ffmpeg·音视频·webrtc·实时音视频·视频编解码
顾道长生'8 小时前
(Arxiv-2025)HunyuanCustom:一种面向多模态驱动的定制化视频生成架构
架构·音视频·视频生成
嘀咕博客9 小时前
VideoPoet:Google发布的用于视频生成的大语言模型
人工智能·语言模型·音视频·ai工具
CHN悠远11 小时前
FFMPEG 10BIT下 Intel b570 qsv 硬解AV1,H265视频编码测试
ffmpeg·av1·h265
Ai工具分享11 小时前
如何用AI视频增强清晰度软件解决画质模糊问题
人工智能·音视频
帅得不敢出门15 小时前
Android Framework打电话禁止播放运营商视频彩铃
android·java·framework·音视频
Antonio91516 小时前
【音视频】WebRTC QoS 概述
音视频·webrtc
水印云17 小时前
视频提取文字用什么软件好?分享6款免费的视频转文字软件!
人工智能·音视频·语音识别
Hody9117 小时前
【XR技术概念科普】VST(视频透视)vs OST(光学透视):解码MR头显的两种核心技术路径
音视频·mr