195

主题

127

回帖

4万

修为

站长

积分
101363

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

LeoSasion 2026-1-12 14:57:52 | 显示全部楼层 | 阅读模式

奇怪,正文 跑到5楼去了! 没事,反正易混淆的信息太多了,大多是已经过时失效的了。原理倒是没错,只是已经编成预设无法手动了


视频编码推荐(svt 新版本已经不允许手动参数了,都给你预设好了)

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 3 -crf 21 -g 300 -pix_fmt yuv420p10le -svtav1-params tune=0 -c:a copy -y output.mp4

ffmpeg -i input.mp4 -c:v av1_nvenc -preset p7 -tier high -rc constqp -cq 21 -bf 4 -g 300 -pix_fmt p010le -c:a copy -y output_nvenc.mp4

ffmpeg -i input.mp4 -c:v av1_amf -usage transcoding -quality quality -rc cqp -qp_i 21 -qp_p 21 -qp_b 21 -g 300 -pix_fmt p010le -c:a copy -y output_amf.mp4

不得不吐槽一下豆包,给的都是过期失效的方案。

点评

现在的 SVT-AV1 编码器(特别是 1.0 版本以后)已经有了很大的变化,清理掉了大量手动微调参数,转而依赖更智能的 preset 系统。 1. gop_size 是 FFmpeg 通用参数,不是私有参数 错误原因:gop_size 是 FFmpeg 这一  详情 回复 发表于 2026-1-13 18:09
注意手动添加 -c:a copy。不要再编码音频了  发表于 2026-1-12 19:35
主题回复
倒序浏览

9648查看8回复

195

主题

127

回帖

4万

修为

站长

积分
101363

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

LeoSasion 2026-1-12 18:41:42
今天的研究内容没法发上来,太过复杂且碎片了。涉及很多重叠概念,易混淆。应该不算是系统性知识了,只要这次能达到目的就行。到了这个程度 如果想了解的 可以搜:ffmeg的configure的所有参数。当然我也可以找一份完整文档转载。 以下是我2023年编译小小丸的时候用的命令(从300MB精简到8MB的咒语),想省时间的可以直接把这段复制去问问AI什么意思。当时我学尽了100多个编码器和所有兼容性参数。

ffmpeg version N-112537-g5aba554f76-g1a8e766984+1 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13.2.0 (Rev2, Built by MSYS2 project)
  configuration:  --pkg-config=pkgconf --cc='ccache gcc' --cxx='ccache g++' --ld='ccache g++' --extra-cxxflags=-fpermiss
ive --extra-cflags=-Wno-int-conversion --disable-autodetect --enable-amf --enable-cuda --enable-cuvid --enable-dxva2 --e
nable-iconv --enable-nvenc --enable-ffnvcodec --enable-nvdec --enable-cuda-llvm --enable-libx264 --enable-libx265 --disa
ble-debug --disable-protocols --enable-protocol=file --enable-optimizations --disable-avdevice --disable-postproc --disa
ble-network --disable-indevs --disable-outdevs --disable-devices --disable-doc --enable-small --disable-ffplay --disable
-ffprobe --enable-libsnappy --enable-schannel --extra-libs=-lstdc++ --extra-libs=-liconv --enable-gpl
举报 回复

195

主题

127

回帖

4万

修为

站长

积分
101363

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

LeoSasion 2026-1-12 15:05:13
图像序列推荐

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 3 -crf 19 -g 240 -pix_fmt yuv444p10le -svtav1-params tune=0 -c:a copy -y output_slides_444.mp4

点评

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

195

主题

127

回帖

4万

修为

站长

积分
101363

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

LeoSasion 2026-1-12 15:26:52
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
举报 回复

195

主题

127

回帖

4万

修为

站长

积分
101363

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

LeoSasion 2026-1-13 00:00:00

视频编码探究日记

今晚的信息量有点大。我还是从结论开始说吧。用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等视频容器,导致解密门槛降低。不然光凭码流无容器,都不需要加密了,正常人是打不开的。

点评

其实蓝字的那些特性仅在libaom是完整可配置的。在svt和nv版本自由度没那么高,会被内置到预设模板 但也省事。GPU加速终究是要牺牲一些质量的,有些功能会被阉割,压缩率也不高。   发表于 2026-1-12 18:44
举报 回复

195

主题

127

回帖

4万

修为

站长

积分
101363

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

LeoSasion 2026-1-13 18:09:34
LeoSasion 发表于 2026-1-12 14:57
视频编码推荐

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 4 -crf 18 \

现在的 SVT-AV1 编码器(特别是 1.0 版本以后)已经有了很大的变化,清理掉了大量手动微调参数,转而依赖更智能的 preset 系统。

1. gop_size 是 FFmpeg 通用参数,不是私有参数
错误原因:gop_size 是 FFmpeg 这一层的参数,不应该写在 -svtav1-params 里面。

解决方法:从参数列表中删除 gop_size: 500,直接在 FFmpeg 命令中使用 -g 500。

2. 微调参数已被移除或隐藏 (rdoq, max-mv, block-size 等)
SVT-AV1 开发团队在更新(特别是 v0.9 到 v1.0+ 过渡期)时,为了简化使用并防止用户设置破坏画质,移除了大量底层控制参数。现在的逻辑是:你只需要设置 preset,编码器会自动决定最佳的块大小、运动矢量范围等。

min-block-size / max-block-size:这些分区决策参数现在由 preset 级别内部控制,用户无法再手动强制指定。

rdoq (Rate Distortion Optimization Quantization):已被移除或整合进内部逻辑,不再对外暴露。

max-mv / global-motion:同样属于被移除的旧 API 参数。
举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

© 2001-2026 BBS.Monster