192

主题

120

回帖

4万

修为

站长

积分
101364

曼加塔第一期曼加塔第二期

今晚的信息量有点大。我还是从结论开始说吧。用ffmpeg封装。我一开始考虑了直接用原生内核,但

视频编码探究日记

视频编码探究日记

一般来说一种编码器lib都会有不同厂家封装。我认为是有3层。你可以直接用最核心的编码第一层,也可以用厂家(如英特尔、英伟达)优化过的第二层,也可以用第二或第三层ffmpeg调用原生或调用封装过的(比如SVT、NV版)像套娃一样。如果是在生产环境或者下载安装的时候就区分好硬件,那无疑是用第二层的封装最直接(不冗余)。
但如果需要兼容不同的系统和硬件软件编码等因素,确实ffmpeg是包全了。没有更好的方案了

Tips:记得开启AV1全拓展功能,编码命令-threads 0 的时候可以压榨全部CPU核心。且还有其他功能值得使用


以下是额外扩展,可能需要手动指定编译,编码的时候肯定也要带一大堆参数(注意编译和编码是不一样的)


超分辨率预测(Super Res)


  • 这是 AV1 的标志性特性。编码时先把视频帧下采样缩小(比如 1080P 缩到 720P),对缩小后的低分辨率帧进行编码;解码时再通过 AV1 内置的超分辨率算法,把低分辨率帧还原回原始分辨率。
    核心逻辑是:低分辨率帧的冗余信息更少,编码后体积更小,而超分算法能保证解码画质。
  • 在 4K/8K 等高分辨率视频中,可提升 5%~15% 的压缩率(同等画质下文件体积更小)。
    分辨率越高,收益越大 —— 比如 8K 视频用 Super Res,压缩率提升比 1080P 高 2~3 倍。
    缺点是会增加编解码的计算量(编码时多了下采样,解码时多了超分)。








循环滤波增强(Loop Filter Enhancement)
  • 视频编码会把帧拆分成小块(宏块),块与块之间容易出现 “块效应”(画面有格子感)。循环滤波是在编码的环路中(编码→预测→残差→解码反馈)对块边缘进行平滑处理,消除块效应。
    AV1 的循环滤波增强是在传统滤波基础上,增加了自适应强度调整—— 根据画面内容(平坦区 / 纹理区)动态改变滤波力度。
  • 原理是:消除块效应后,画面的 “主观画质” 更好,因此可以用更低的码率达到相同的观感;同时,滤波后的帧冗余信息更少,后续帧的预测更精准。








自适应变换(Adaptive Transform)
  • 视频编码中,“变换” 是把像素域的信号转换成频域信号(比如 DCT 变换),频域信号更容易压缩(高频信息可丢弃)。
    AV1 的自适应变换支持多种变换类型(DCT、DST、Identity 等),并能根据每个宏块的内容自动选择最优变换方式—— 比如纹理复杂的块用 DST 变换,平坦的块用 DCT 变换。
  • 相比传统编码固定用一种变换,自适应变换能让每个块的变换残差更小(残差越小,需要编码的数据越少),从而直接降低码率。在纹理丰富的画面(比如 AI 生成的细节图、自然风景)中收益更高。







帧内预测模式扩展(更多角度 / 分区)
  • 帧内预测是 “用同一帧内已编码的像素,预测未编码的像素”,减少帧内冗余。传统编码(如 H.265)的帧内预测角度较少(比如 33 种),而 AV1 扩展了预测角度数量(增加到上百种),同时支持更精细的分区(比如 4x4、8x8 小尺寸块)。
    简单说:能更精准地匹配画面的纹理方向(比如斜线、曲线)。
  • 在包含大量斜线、曲线、复杂纹理的画面(比如 AI 绘画的人物发丝、建筑轮廓)中效果显著 —— 精准的预测能大幅减少残差数据;在平坦画面(比如纯色背景)中收益较低。






熵编码优化(CDEF/CFL 滤波)
  • 熵编码是编码的最后一步,对 “变换后的残差数据” 进行无损压缩(类似 ZIP 压缩)。AV1 的熵编码优化结合了两种前置滤波:
    • CDEF(循环去块效应滤波):进一步消除块效应,让残差数据更集中;
    • CFL(循环帧内预测滤波):优化帧内预测的残差,减少冗余。
      滤波后的数据熵值更低,熵编码的压缩效率更高。
  • 它不直接改变编码的预测逻辑,而是通过优化输入熵编码器的数据,让无损压缩阶段能 “挤” 出更多体积空间。对所有类型的视频都有收益,没有明显短板。







叠加效应:
同时启用这五项特性,总压缩率提升不是简单相加,而是协同增益—— 在 4K 视频中,总压缩率可比基础 AV1 编码提升 15%~30%,这也是 libaom 全功能版压缩率优于其他编码器的核心原因。


示例:
ffmpeg -i input_ai.mp4 \       -c:v libaom-av1 \       # 核心压缩/画质参数(针对8bit AI素材)       -crf 22 \                  # 肉眼无损失,平衡体积       -cpu-used 1 \              # 压缩率优先,速度可接受       -threads 0 \               # 自动拉满CPU       # 启用所有高级压缩特性       -enable-superres 1 \       -enable-intra-angle-ext 2 \       -enable-adaptive-transform 2 \       -enable-cdef 1 -enable-cfl 1 \       # 10bit编码+编辑器兼容关键配置       -pix_fmt yuv420p10le \     # 10bit输出,兼容主流编辑器       -color_range limited \     # 匹配8bit素材的有限色域(避免过曝)       -colorspace bt709 \        # 标准SDR色域,AE/剪映默认支持       -color_trc bt709 \         # gamma曲线匹配,避免偏色       # 画质均匀性优化       -aq-mode 3 \       -g 120 \                   # 适配AI视频帧间差异大的特点       # 音频(适配后期编辑)       -c:a aac -b:a 192k \       # AAC兼容性比Opus更好,AE/剪映直接识别       output_ai_av1_10bit.mp4


视频编码探究日记

视频编码探究日记



关于有没有必要把8位转为10位编码,颠覆了我的认知。毕竟不管是输入还是输出,实际用到的都是8位256色。
游客,如果您要查看本帖隐藏内容请回复


我自己AE合成师 多年的经验和心得:哪怕真实数据是以8位输入、8位输出、或8位显示。但是中间的编码过程都可以用10位或16位来保证避免”舍入误差“。
这真的是需要像素级、1/255色差的肉眼识别力 才会发现的细节。当然,8转16工作空间,在多图层乘除的时候优势差距就很明显了!2018年的时候做龟派气功叠了很多光效 那时候已经有所直觉了。后来在2024年接触游戏引擎浮点色、LED灯珠 的时候也栽了跟头,吃了”舍入误差“的亏。

硬编码确实会损质量,所以UHQ是必须开启的(小小丸1.5.4没开,所以差距明显)

视频编码探究日记

视频编码探究日记

GPU型号说明(需要2022年之后的)
  • NVIDIA:AV1 硬编码是 Ada Lovelace 及更新架构的 8th Gen NVENC 专属,RTX 30 系及更早(Ampere/Turing)均不支持编码,仅能解码NVIDIA。
  • AMD:RDNA3 架构的 VCN 4.0 才支持 AV1 编码,RDNA2(RX 6000 系)仅支持解码,且部分低端型号(如 RX 6400/6500)解码也受限。
  • Intel:仅 Arc 锐炫独显支持 AV1 硬编码,DG1 仅解码;Intel 所有核显(包括 UHD 770)均不支持 AV1 硬编码。
  • (这我要是做到小小丸里,不就坑得要命?大多数用户可能没那么新的显卡)




还有一个坑:Direct3D 12 AV1 编码仅支持 Windows 11 24H2(WDDM 3.2)及以上,且仅支持新显卡。果然还是太超前了,没用户没业务就不会有人探究。
但是总的来说。如果过个5年再开发这软件,D3D肯定是最方便的选择了。不然跟小小丸一样还得前置判断硬件型号(这也是小丸不支持GPU的原因)


但是ffmpeg会提供mp4等视频容器,导致解密门槛降低。不然光凭码流无容器,都不需要加密了,正常人是打不开的。

主题回复
倒序浏览

4308查看3回复

192

主题

120

回帖

4万

修为

站长

积分
101364

曼加塔第一期曼加塔第二期

LeoSasion 1 小时前

3

视频编码推荐

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 4 -crf 18 \
-g 1000 -refs 8 -pix_fmt yuv420p10le \
-vf "format=yuv420p" \
-rc:v 1 -gop_size 500 -svtav1-params "enable-overlays=1:global-motion=2:warped-motion=1:compound=1:max-mv-range=256:rdoq=3:rd-signal=1:min-block-size=4:max-block-size=128:no-early-exit=0" \
-c:a copy -y output_video.mp4
举报 回复

192

主题

120

回帖

4万

修为

站长

积分
101364

曼加塔第一期曼加塔第二期

LeoSasion 1 小时前
图像序列推荐

ffmpeg -i input_ppt.mp4 -c:v libsvtav1 -preset 6 -crf 18 \
-g 1000 -refs 3 -pix_fmt yuv420p10le \
-vf "format=yuv420p" \
-rc:v 1 -gop_size 500 -svtav1-params "enable-overlays=0:global-motion=0:warped-motion=0:compound=0:max-mv-range=64:rdoq=2:rd-signal=1:min-block-size=4:max-block-size=128:no-early-exit=1" \
-c:a copy -y output_ppt.mp4

点评

NV加速 ffmpeg -i input_ppt.mp4 -c:v nvenc_av1 \ -preset p6 # 平衡速度和质量(PPT推荐p5-p7) -crf 20 # 质量优先(PPT静态画面crf 18-24足够) -g 1000  详情 回复 发表于 半小时前
举报 回复

192

主题

120

回帖

4万

修为

站长

积分
101364

曼加塔第一期曼加塔第二期

LeoSasion 半小时前
LeoSasion 发表于 2026-1-12 15:05
图像序列推荐

ffmpeg -i input_ppt.mp4 -c:v libsvtav1 -preset 6 -crf 18 \

NV加速

ffmpeg -i input_ppt.mp4 -c:v nvenc_av1 \
  -preset p6                # 平衡速度和质量(PPT推荐p5-p7)
  -crf 20                   # 质量优先(PPT静态画面crf 18-24足够)
  -g 1000                   # 关键帧间隔拉大(PPT画面变化少)
  -profile:v main10         # 10bit编码,色彩更准
  -pix_fmt yuv420p10le      # 匹配10bit profile
  -rc:v vbr                 # 可变码率,适配静态画面
  -c:a copy -y output_ppt.mp4
举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

© 2001-2026 BBS.Monster