长视频转码的正确姿势

发布时间:2026/7/24 12:41:31

长视频转码的正确姿势 暑假在老家呆着闲着看电视不管是综艺还是电影。不过用的是各种不知名的app看的主打一个海量免费问题是广告多画质在85吋的电视上惨不忍睹还经常卡。这种流媒体服务公司应该想办法提升自己的用户体验广告商在这里投放广告效果也不好啊。这里最核心的涉及到的视频技术是长视频转码。这个技术放在现在应该不是什么问题了hevc与av1都已经成熟av1的视频即使在老电视上用dav1d解码问题也不在话下。转码的资源也不用太多投入没有强大的服务器根本不是事。每年淘汰的手机这么多想想办法用手机主版搭一个转码集群电费也不高。下面讨论正事如何转码带宽低画质高转码效率也高。小投入大产出这是我们的做事原则。乐视当年每上一级45分钟的电视花24小时转码那都是土豪干的事。首先码率控制。码率控制是视频编码器的核心技术模块核心目标是在满足信道带宽、存储空间等约束的前提下平衡输出码率与视频编码质量避免码流溢出或带宽浪费。1.基本原理它通过动态调整‌量化参数QP‌和拉格朗日因子λ结合分级比特分配、缓冲机制实现码流稳定输出核心支撑模型包括R-λ模型、R-Q模型等。先按目标码率和视频复杂度为GOP、帧、编码单元逐层分配目标比特数再通过率失真优化计算对应QP让实际输出比特尽可能匹配预设目标2.主流控制模式模式特点与适用场景CBR恒定比特率全程输出码率稳定适合直播、传统广播电视场景VBR可变比特率随画面复杂度动态分配码率同等画质下可节省30%-50%带宽适配流媒体、离线存储场景ABR平均比特率保证长时段平均码率达标多用于自适应流媒体业务CRF恒定速率因子锁定编码质量水平优先保障主观观看体验3.技术演进H.264/AVC阶段形成成熟的JVT-H017、JVT-N046方案采用GOP/帧/基本单元三层R-Q模型完成码率控制HEVC阶段演进出URQ像素级控制模型、更贴合码率失真关系的R-λ模型控制精度大幅提升最新方向结合深度学习实现精准带宽预测开发超低延迟VBR算法适配AR/VR等实时交互场景4.典型优化手段2-pass编码先全量分析源视频复杂度再二次编码精准分配比特画质表现更优Lookahead预分析提前预判后续帧复杂度提前预留比特资源避免复杂帧画质骤降低延迟窗口控制用双窗口分别管控码率延迟与视频质量适配实时视频编码场景第二率失真包络。每个编码器即使是不同的编码参数每一个视频的在不同分辨率编码都会遵循类似如下的率失真包络图多分辨率编码率失真包络图引自“微帧”这个图AI画不出来网上找的。这个图每条曲线左上的点可以拟合成一个更大曲线使得每个分辨率的曲线与这个拟合曲线相切。那么这几个点就是不同分辨率下的清晰度编码甜点。第三、编码器preset与多线程编码如下以libx264为例说明libx264编码器的preset是一套预定义的编码参数集合核心作用是在‌编码速度‌和‌压缩效率‌之间做灵活权衡同等画质下选择速度越慢的preset最终生成的视频文件体积越小、压缩率越高反之速度越快的preset编码耗时越短但文件体积会明显更大。1.预设等级总览libx264一共提供10个按编码速度降序排列的预设档位默认值为mediumultrafast superfast veryfast faster fast medium slow slower veryslow placebo其中placebo属于极端优化档位相比veryslow仅能获得约1%的画质/压缩率提升编码耗时却会成倍增加实际生产环境几乎不会使用通常可以直接忽略。2.各档位特性与适用场景‌ultrafast‌编码速度接近文件直接复制几乎关闭了所有复杂优化逻辑生成的文件体积最大。适合实时屏幕录制、快速预览的临时编码场景比如1小时的演示视频仅需数分钟即可完成编码。‌superfast‌画质和压缩效率略优于ultrafast仍保留了极快的编码速度适合批量快速处理会议录像等对耗时敏感的场景。‌veryfast‌是直播推流遇到性能瓶颈时的常用应急档位在保证编码实时性的前提下能提供可接受的基础画质。‌faster / fast‌属于中等偏快的档位逐步开启更多运动估计、参考帧优化兼顾了速度和压缩率适合日常批量转码的通用场景。‌medium‌libx264的默认预设参数配置均衡在编码速度和画质压缩比之间取得了最普适的平衡绝大多数常规转码场景都可以直接使用该档位。‌slow / slower‌开启B帧双向预测、更精细的运动搜索等优化细节保留度显著提升压缩效率明显优于默认档位适合制作4K宣传片、高质量存档视频这类对画质要求较高的场景。‌veryslow‌是实用场景下最慢的预设会启用全部高级编码优化逻辑相比ultrafast最终生成的文件体积可缩小30%左右适合对文件体积敏感、不限制编码耗时的高质量母带存档场景。编码器默认线程数一般是cpu物理核心数的1.5倍。单线程一般比4线程的压缩率提高20%。第四、长视频编码器转码根据以上讨论我们要最后落地到文章开篇所提到的场景。如何快速找到每个视频每个分辨率编码的甜点。回答这个问题这前先要定下来我们的编码器策略。1.二次编码2pass的码率控制一般对比crf编码在同样的编码体积下画质能提升10%左右2.单线程刚才提到过单线程对默认线程数至少压缩率提升20%3.Preset的确定虽然是离线转码但是我们没有在为5%的压缩率去数倍的提高编码复杂度的必要。我们选定默认档medium之后的两档的preset:slower.4.快速找到编码甜点2015年前我们的业务以长视频为主至少2分钟以上那种。我们的办法1对每个视频进行gop全量分析2秒左右片段特征码率gop-qp. 进行二维逆变换采样取其中8个片段。2对每个片段做一次 scale:-1:360;preset:veryfast;crf:28转码。得到8个码率去掉最高的码率与最低码率取平均值。3对长视频重新分段。分段原则可以自己定义我们是如下每段视频不小于2分钟长视频最多分段数为104基于2所得码率进行换算到当前分辨率的码率对每段视频进行二次转码。采用2pass,单线程preset:slower转码。5分段转码视频音频的合并如果是多分辨阶梯转码可以共用一次转码。通过上述转码的原则我们比crf:23转码在同样清晰度下压缩率提升一倍左右。分段转码的启动任务可以根据本地的cpu核心数进行调度充分利用本地算力。当然这个方法更适合在服务器上做集群调度转码任务的粒度可控调度算法简单可靠可预知。最后可以接合现在的超分算法更进一步提升端侧清晰度这个需要对超分模型进行微调。我先找找15年的脚本找到了就分享给大家试用哈。

相关新闻