当前位置: 首页 > ops >正文

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(最快)→ superfastveryfastfasterfastmedium(默认)→slowslowerveryslow(最慢)。
    • 像素格式:-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 的veryslowultrafast慢 10 倍,文件小 30%)。
  2. 画质与兼容性:H.265/AV1 画质更好,但老设备无法播放,优先选 H.264 除非确认设备支持。
  3. CRF 值调整:每次调整 ±2,画质差异可感知(如 H.264 从 23 降到 21,画质提升明显,文件大 15% 左右)。

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

http://www.xdnf.cn/news/19406.html

相关文章:

  • 【扩充位数三位变五位】2022-10-30
  • mysql导出csv中字段里有换行符的处理办法及hive导出处理办法
  • 【php反序列化字符串逃逸】
  • Go 面试题: new 和 make 是什么,差异在哪?
  • ADSL 代理 Proxy API 申请与使用指南
  • NLP技术突破:浅层与深层语义分析全解析
  • test隐藏能力
  • 5-ATSAM3X8-定时器
  • 架构选型:为何用对象存储替代HDFS构建现代数据湖
  • 腾讯混元翻译大模型Hunyuan-MT-7B:重塑跨语言沟通的技术革命
  • 定时器设计之->分级时间轮
  • 基于SpringBoot的二手交易平台【2026最新】
  • 2025我“生发”了『折行』|『内注』|『终端正偿』|『中文负偿』四大“邪术”(前二造福python代码阅读者;后二助力所有艺术人)
  • Kali自带的录屏工具:recordmydesktop
  • 基于单片机电动车充电桩/充电车棚环境监测设计
  • 如何将照片从电脑传输到安卓设备
  • vscode翻译插件
  • Kafka 架构原理
  • 【大模型】大模型微调-RLHF(强化学习)
  • Certificate is Signed Using a Weak Signature Algorithm漏洞解决
  • Uniapp 图片前端上传功能实现与详解
  • JVM:内存区域划分、类加载的过程、垃圾回收机制
  • 【Spring Cloud微服务】8.深度实战:微服务稳定性的守护神——Sentinel
  • 项目升级--mysql主从复制和读写分离
  • 统计学的“尝汤原理”:用生活案例彻底理解中心极限定理
  • 9.1C++——类中特殊的成员函数
  • GitHub 热榜项目 - 日榜(2025-09-01)
  • Android面试指南(六)
  • 科学研究系统性思维的方法体系:数据收集模板
  • 【Docker】Docker的容器Container、镜像Image和卷Volume对比