如何用LCEVC编码
低复杂度增强视频编码(LCEVC)是将于2020年发布的三种MPEG编解码器之一. 三者之中, LCEVC是唯一一个可以对流媒体领域产生直接影响的平台, 因为它可以完全在软件中实现,而不会降低系统性能或设备电池寿命. 事实上,LCEVC已经被许多流媒体生产商作为V-Nova的P+编解码器实现. 在本教程中,我将详细介绍如何使用FFmpeg 4对LCEVC进行编码.0.1-17和版本2.9构建539246的V-Nova的P+编码器. 我还将快速查看一下编码速度和相对质量.
关于LCEVC
LCEVC是一种混合编解码器,它将两层和两种技术合并到每个编码流中 图1.)基础层是来自任何现有编解码器的低分辨率编码,例如H.264、HEVC、VP9或AV1,它在没有LCEVC解码器的平台上提供向后兼容性. 增强层, 哪个提供了额外的细节和分辨率, 使用LCEVC编解码器进行编码.
>
图1. LCEVC压缩文件有两个流:基础层和增强层.
举个例子, 图2 显示了VLC播放器播放使用960x540 H的1080p LCEVC编码文件.264编码为基础层. 在我写这个教程的时候, 2020年1月, VLC播放器不兼容lcevc, 检测并播放底层流, 正如您在右侧的编解码器信息窗口中看到的那样, 并直接忽略了LCEVC数据. 这种向后兼容性是LCEVC最大的优势之一.
图2.当我写这篇文章时,VLC播放器不兼容lcevc,所以它只能看到960x540h.264基础层在这个1080p LCEVC编码文件.
有了这些背景知识,就很容易理解对LCEVC进行编码需要什么了. 首先,您必须为基础层选择编解码器并配置该编码. 然后你必须配置增强层. lcevc有两种用例——视频点播(VOD)和直播——每种用例都需要不同类型的编码.
短暂的, 对视频点播, V-Nova建议使用恒定速率因子(CRF)模式, 哪个提供了每个标题编码的度量. 由于CRF不是默认设置,因此必须同时配置基础层和增强层. 对于live, V-Nova建议使用恒定比特率(CBR)编码,这是默认的LCEVC模式. 你会看到, 如果您不需要在增强层中实现任何非默认设置, CBR配置要简单得多. 我将依次详细说明.
VOD编码
我测试的FFmpeg编码器可以输入MXF, YUV / Y4M, MP4, 和ProRes文件和输出传输流(.ts)和 .mp4文件. 它支持8位,4:2:0编码和10位,4:2:2编码的短期路线图. The FFmpeg executable is available for Windows and Linux; I tested the Windows version.
正如前面提到的, 生产LCEVC, 您必须识别和配置基础层编解码器并配置增强层. 我所有的测试都使用x264编解码器作为基础层, 使用传统的x264/FFmpeg控件来配置这一层.
这是典型的FFmpeg, 增强层配置是在指定的交换机之后进行的, 在这种情况下 -eil_params
,单个选项用分号分隔,所有参数用引号括起来. 需要说明的是,“eil”代表“编码集成层”.与所有FFmpeg命令一样, 如果要应用默认值, you can exclude that configuration option; FFmpeg will use the default value automatically.
下面是一个包含基础层和增强层配置的简单命令行:
ffmpeg 我子午线_30.mp4 v - c: pplusenc_x264 -g 120 -keyint_min 120 -sc_threshold 0 -eil_params "rc_pcrf = 23;比特率=;rc_pcrf_gop_length = 120.mp4
批1. 一个简单的LCEVC命令行,显示 -eil_params 设置
如果您熟悉FFmpeg,这是一件很简单的事情.
ffmpeg调用ffmpeg.
我子午线.mp4
命名输入文件.
v - c: pplusenc_x264
确定P+ (V-Nova的LCEVC实现)作为视频编解码器,x264作为基本编码器. 当基础层使用其他编解码器时,这种语法显然会发生变化.
-g 120 -keyint_min 120 -sc_threshold 0
在基础层配置GOP配置.
-eil_params“rc_pcrf = 23,比特率=;rc_pcrf_gop_length = 120”
configures the enhancement layer; I cover the various options specified. 你会学到, 我不需要包含GOP长度控制,因为默认GOP大小是2秒, 或者为这个60帧/秒的测试文件设置120帧. 中的多个命令的表示 -eil_params 字符串.
Meridian_pplus.mp4
命名输出文件.
请注意,当您将P+编码器与x264编解码器一起使用时,默认预设为 veryslow
,而不是 媒介
,这通常是x264的默认预设. 这对生产并不重要, 但如果你将P+编码时间和/或质量与原生x264编码进行比较, 确保为两者选择相同的预设. 如果在命令字符串中未指定预设值, 我通常会默认为中档, 你会比较苹果和橘子, 或者更具体地说,LCEVC使用 veryslow
预设为x264使用 媒介
预设.
有了这个背景, 让我们探索增强层选项,然后循环回到基础层. 我不会介绍所有的选项,只介绍那些您最有可能使用或考虑使用的选项.
比特率控制
如前所述, LCEVC有两种现有的比特率控制技术, CRF和CBR, 前者推荐用于视频点播,后者推荐用于直播. 我将在接下来的直播部分介绍CBR.
CBR控制是默认选项. 要部署CRF编码,必须在 -eil_params
字符串,并设置CRF值. 与我见过的其他CRF实现一样, 取值范围为1 ~ 51, 分数越低,结果越好. 在这种情况下,选择控制基本层和增强层的整体质量. 典型值在20-36之间.
在指定CRF模式时,还必须插入一个未指定的比特率命令. 相应的, 如第1批所示, 设置CRF值为23, 之后,您将向编码集成层部分添加以下开关 -eil_params
:
rc_pcrf = 23;比特率=
根据V-Nova, LCEVC的P+实现有一个上限的CRF模式, 但当我写这篇文章时,它还不能用于测试. 与x264和其他传统编解码器, 无上限的CRF是所有较长形式内容生产者所关注的问题,因为它有可能出现数据峰值. 我问过这个问题, 我的联系人回答说:“我们通常观察到,由于多层次的方法,LCEVC的峰值低于本地, 因此,无上限的CRF可能会被接受."
扩展模式
缩放模式决定了基础层的分辨率,因为它与最终输出分辨率相关. 如图所示 表1, 2D, 这是默认值, 决定2:1的比例, 生产一个960x540的基材层用于1080p输出和一个640x360的基材层用于720p输出.
表1. 设置基础层的缩放方式和大小
一维缩放仅为水平缩放, 生成1080p视频960x1080和720p视频640x720的基础层. 当尝试为编码阶梯上较低的阶梯优化编码参数时,这个选项值得探索. 最后一个选项, 0D, 或者没有缩放, 测试模式是否永远不会在生产中使用, 这就是为什么我没有记录表1中提到的原生模式.
在LCEVC标准中指定了额外的缩放模式(3D和4D),以进一步缩放基础层. 这些功能在我测试的FFmpeg版本中还没有提供,目前正在开发中, 根据V-Nova.
在 -eil_params
字符串,则在=符号后指定缩放模式. 要选择一维模式,你需要添加 scaling_mode_level0 d = 1
到引号内的其他命令.
增强层GOP大小
该交换机以帧为单位设置增强层的GOP大小,并且必须等于基础层的GOP大小. 您可以在批1中看到以下开关,将GOP大小设置为120帧, 或者2秒, 对于这个60 FPS的测试文件:
rc_pcrf_gop_length = 120
正如前面提到的, 此设置的默认值是2秒, or, 更具体地说, 2倍帧速率, 如果你的GOP大小是2秒, 你不需要包括这个开关.
犹豫不决
抖动是有意将噪声注入到流中,以尽量减少在低比特率编码时可能出现的色带或阻塞伪影等视觉损害. 抖动在默认情况下是禁用的,通过这个开关启用:
-dc_dithering_type =制服
启用抖动后,还可以设置抖动强度. 根据V-Nova文件, ,默认值为5, 值7-8表示更明显的抖动, 而值2-3应该用于几乎无法察觉的抖动.“你用这个开关来设定强度, 我把它设为4, V-Nova在其推荐的命令字符串中包含的值:
-dc_dithering_strength = 4
我用Harmonic的足球测试剪辑试验了抖动, 哪个包含重要的高动作和许多细节,比如制服号码和草, 以2Mbps和4Mbps的速度测试有抖动和没有抖动的60 fps片段. 在两种数据速率下, 犹豫不决并没有减少人工制品,而是创造了一种不同的人工制品, 做出犹豫和不犹豫的决定是非常主观的.
In 图3左路的犹豫似乎澄清了几个进攻线的数据. 然而, 抖动所带来的好处每一帧都不一样, 在做出犹豫不决的决定之前,我肯定会在多个眼球面前测试多个片段. 我没有在任何比较中使用犹豫.
图3. 从2Mbps的编码中,抖动似乎在这一帧中产生了稍微清晰的数字.
如果你在犹豫, 请注意,根据V-Nova的文档, 抖动自适应应用:
编码器动态地、自适应地应用抖动, 根据基层质量(base qp). 不考虑指定的强度, 它会在静态/非常简单的场景中自动消失,它的强度会根据基本qp在逐帧的基础上自动调节, 从超过某一阈值开始(-dc_dithering_qp_start
),并超过第二个阈值(-dc_dithering_qp_saturate
).
我没有试验这两个指定开关中的任何一个.
操作上,抖动在编码期间计算,但在解码期间应用. 如果你解码是为了公制计算, V-Nova指示您通过此开关禁用解码器中的抖动:
-disable抖动
如果你决定犹豫, 不要指望禁用抖动会对度量分数产生巨大影响, 然而. 在2Mbps的编码中, 视频多方法评估融合(VMAF)评分为79分.38比79.没有抖动的片段是58. 在4Mbps时,差异甚至更小,抖动片段为90.36,无抖动的片段是90.51. 如果你假设VMAF准确地衡量了人们对视频的主观评价, 这些数字确实表明,犹豫不决与非犹豫不决的决定将是多么具有挑战性.
高度不能被8整除的分辨率.g., 540P)
如果你的输出分辨率不能被8整除, 您应该将这个开关插入命令字符串中:
-encoding_transform_type = dd
OK, this covers the most frequently used switches 对视频点播 encoding; let's switch over to live.
实时编码
大多数现场制作人使用CBR控制. 与LCEVC, 您可以为整个流选择CBR, 但是对于基流有两种比特率控制方法, CBR或CRF, 后者是默认值. 使用默认设置, CRF值由LCEVC编解码器自动计算, 哪一个对于基本层和增强层之间数据速率的最佳分配至关重要. 如果您对H有特定的操作约束,则应该仅对基础层使用CBR.264年流.
若要在基础层上选择CBR控制,请将以下内容添加到 -eil_params
命令字符串:
rc_pcrf_base_rc_mode = cbr
在为基础层部署CBR时,不需要设置CBR数据速率. 相反,它是通过LCEVC的内部利率控制机制自动设定的.
中不设置数据速率 -eil_params
字符串,因为编码器将从基础层控件的比特率设置中获取此值. 如果你使用2秒的关键帧为你的基础层, LCEVC的默认值是什么, 你也不需要指定, 使您的最终命令字符串免受任何 -eil_params
. 以下是V-Nova在我回顾的一系列CBR测试中使用的命令字符串:
我输入.Mp4 v - c: pplusenc_x264 -aq-mode 1 -aq-strength 0.8 - block -2:-2 -线程1 -g 120 -keyint_min 120 -sc-threshold 0 -b:v 4M输出.mp4
批2. CBR命令字符串V-Nova,用于大规模测试
很好很简单,但是有一些基本的编解码器优化我们还没有讨论. 我们将在这里结束与配置相关的讨论.
推荐X264参数
为获得最佳视觉质量进行编码时,V-Nova建议进行以下设置:
-aq-mode = 3
-aq-strength = 1.3
解块= 2;2
短暂的, AQ是自适应量化, 它允许编解码器在帧周围重新分配比特以优化视觉质量. AQ是一种心理视觉配置,可以提高视觉质量,但会降低旧的客观质量指标的分数,这些指标通常基于压缩帧与原始帧的差异. 稍后会详细介绍.
在默认模式下(e.g., no aq-mode
在命令字符串中设置),x264使用模式1,根据在 位.ly / 2 rfrf71,使编解码器能够“在每个帧内重新分配比特”.模式3是“自动变差AQ,偏向于黑暗场景”."
V-Nova还建议进行调整 aq-strength
to 1.从默认值1增加到3, 哪一个, 根据同一份文件, 设置AQ偏向低细节(“平坦”)宏块的强度.“终于, V-Nova建议将默认块设置从0:0调整为-2:-2, 它调节H.264环路滤波器.
这些是非常模糊的控件,大多数编码专业人员乐于忽略它们, 但考虑到LCEVC独特的混合结构, 我想它们确实能提高视觉质量. 然而,这是我在实际执行LCEVC之前要确认的一个假设.
同样,前面提到的设置是为了获得最大的视觉质量. 当编码通过客观质量度量来度量质量时, V-Nova推荐这些设置(不需要更改 解块
建议):
-aq-mode = 1
-aq-strength = 0.8
解块= 2;2
您可以在批2中显示的命令中看到这些.
所以如果你在制作视觉比较, 您应该使用最上面的设置集, 但是对于度量标准, 最下面的一组. 很明显, 如果你使用客观指标来比较LCEVC和其他编解码器, 比如x264或x265, 你应该使用编解码器的内部调整机制来禁用任何心理视觉调整. 例如,如果您使用x264编解码器(曲调psnr值
),则禁用AQ和所有其他可视化优化. 这应该会稍微降低视觉外观,但会提高度量分数, V-Nova推荐的第二组选项也是如此.
我在测试中学到的东西
我创建了两个用于测试的命令字符串:一个用于VOD测试的CRF,另一个用于实时CBR. 我只在CRF设置下测试了性能,在CBR设置下测试了性能和质量.
下面是我用于性能测试的CRF命令字符串, 编码一段60帧/秒的Netflix Meridian(如图)和足球测试片段的30秒片段:
ffmpeg 我子午线_30.Mp4 v - c: pplusenc_x264 -aq-mode 3 -aq-strength 1.3 解块 -2:-2 -线程1 -预设 veryslow -g 120 -keyint_min 120 -sc_threshold 0 -eil_params "rc_pcrf=23; 位rate=" Meridian_pplus_CRF.mp4
批3. 用于VOD的Meridian CRF LCEVC编码字符串
下面是用于比较的x264命令字符串:
ffmpeg 我子午线_30.mp4 -c:v libx264 -预设 veryslow -crf 23 -g 120 -线程1 -keyint_min 120 -sc_threshold 0 Meridian_x264_CRF.mp4
批4. x264 CRF的等效字符串
表2 显示结果. 明确地说,LCEVC编码碱基H.960x540的264层和1080p的增强层, 而x264则将整个流编码为1080p. 总的来说,LCEVC将x264的编码时间减少了60%.
表2. 以秒为单位的编码时间. LCEVC比原生H减少了大约60%的编码时间.264以相同的分辨率.
我使用 线程1
这将FFmpeg限制为每个编码的一个核心. 我这样做是因为我注意到当使用8个线程编码时,x264剪辑中的一些严重的瞬态质量下降(关于这个主题的更多信息), 请看我的文章, FFmpeg线程命令:它如何影响质量和性能," at 位.ly / ffmpeg_threads). 当使用8个线程时,LCEVC仍然比x264快50%左右. 我在我的HP ZBook笔记本电脑上进行了所有测试.8 GHz Intel至强处理器E3-1505M v5 CPU,运行Windows 10 Pro 32GB内存.
以下是我用于性能测试的CBR命令字符串:
Ffmpeg -i meridian_30.Mp4 v - c: pplusenc_x264 预设的媒介 -aq-mode 3 -aq-strength 1.3 - block -2:-2 -线程1 -g 120 -keyint_min 120 -sc-threshold 0 -b:v 4M meridian_pplus_CBR.mp4
批5. 用于live的Meridian CBR LCEVC编码字符串
下面是x264命令字符串:
Ffmpeg -i meridian_30.mp4 -c:v libx264 -预设介质-g 120 -keyint_min 120 -sc_threshold 0 -线程1 -b:v 4000k -maxrate 4000k -bufsize 8000k meridian_x264_CBR.mp4
批6. x264 CBR的等效字符串
我使用 媒介
预设而不是 veryslow
模拟实际操作. 如前所述,我包含了 预设的媒介
切换两个命令字符串,因为尽管 媒介
是x264的默认预设(并且在该字符串中不需要), -veryslow
是LCEVC的默认值,所以 媒介
需要在那个字符串中吗.
您可以在中查看性能试验的结果 表3,再次显示使用单个线程的编码. 在这种情况下, 当我用8个线程编码时, LCEVC仍然比x264快, 但只有25%左右, 而x264几乎在每个视频中都表现出上述短暂的质量问题.
表3. LCEVC比原生H减少了约52%的编码时间.264以相同的分辨率.
我比较了LCEVC和H的质量.264基,全分辨率H.264使用指标和视觉, 处理这里提到的两个文件, Netflix的Meridian剪辑和Harmonic的橄榄球剪辑. 对于度量标准, 我以1-4Mbps的速度为每种技术创建了四个编码, 使用V-Nova推荐的度量比较设置(-aq-mode = 1, -aq-strength = 0.8、解块= 2;2
)和调整x264剪辑的PSNR (曲调psnr值
). 很明显, 两个样本不足以得出任何确切的结论, 但是质量评估并不是本文的目的, 完成了所有其他的工作, 我想快速评估一下结果.
就指标而言,LCEVC轻松赢得了VMAF试验,其BD-Rate优势约为32%.264,这意味着LCEVC可以产生与本地H相同的质量.264的68%比特率. 这应该允许LCEVC达到其主要质量目标, 使用H达到HEVC质量(大致)是多少.以与HEVC相同的比特率将264作为基础层. 图4 显示了从子午线剪辑和VMAF度量使用剪辑调整为度量计算的速率失真图.
图4. LCEVC与H.264使用30秒的子午线剪辑片段
然而,带有H的LCEVC.264碱基和本地H.264在SSIM测试中几乎持平,在PSNR测试中落后. 我的发现与V-Nova对大量Netflix测试片段进行测试后得出的结果大致相似. 我对VMAF很具体,对PSNR很模糊,因为我的主观评价与VMAF更一致,因为我相信VMAF比PSNR更能准确地预测主观评分.
也就是说, 就像我尊重VMAF一样, 比较编解码器时, 正式的主观比较是必须的, 我认为对于LCEVC来说尤其如此. 任何不包括重大主观测试输入的flcevc早期评估都不应给予太多权重. 任何完全或主要依赖PSNR的人都是被误导了.
相关文章
低复杂度增强视频编解码器(LCEVC)已准备就绪. V-Nova是编解码器背后的主要开发者, 我们采访了公司首席执行官兼联合创始人Guido Meardi, 无论是在技术方面还是在许可结构方面.
2021年6月29日
Royalty will be paid by streaming service providers; the codec will be free for encoder/player developers
2021年5月20日
V-Nova首席执行官 & 联合创始人Guido Meardi介绍了LCEVC(低复杂度增强视频编码),并解释了2019年流媒体西部视频剪辑中神奇的发生方式.
2020年4月13日
V-Nova首席执行官 & 联合创始人Guido Meardi在视频工程峰会上的演讲中讨论了编码复杂性和成本的当前问题,以及LCEVC(低复杂度增强视频编码)如何解决这些问题.
12月2日2019
创新的步伐越来越快,对视频编解码器的要求也越来越高. MPEG的三部分计划回答了版税、许可和计算效率的问题. 满足VVC、MPEG-5 Part 1 (EVC)和MPEG-5 Part 2 (LCEVC).
10月15日2019
提及的公司及供应商