Skip to content

译文说明

本文由 Hy4 preview 机器翻译自韩文原文,仅供参考。技术细节请以韩文原文为准。

一个宽幅画面击穿了 720p 计费档位 ​

概述 ​

在上一篇文章中,我们讨论过 MPS 会依据长边/短边与宽高比来判定分辨率等级。本文则是一个不得不真正改动该判定逻辑的调试案例。用户运营的是以竖版短视频为主的服务,希望只用 720p 和 360p 两个等级来控制 ABR 转码费用,却遇到了在特定条件下意外触发 1080p 等级的问题。

问题提出:为什么只有 iPad 会被计入 1080p 费用 ​

用户提出的问题是这样的:他已经把 ABR 模板配置为只使用 720p 和 360p 两个 rendition,但在横向宽高比大于 9:16 的输入(例如在 iPad 等平板设备上录制的视频)上,会不必要地一并触发 1080p 转码。

需求很明确。

Rendition配置
Rendition 1 - 720p横向分辨率限制为 720px
Rendition 2 - 360p横向分辨率限制为 360px

需求是:当输入宽高比大于 9:16(即横向更长)时,转码模板要强制把横向分辨率上限限制为 720 或 360,避免在 iPad 这类宽屏设备上被抬到 1080p。既没改编码器也没改码率配置,却只在特定宽高比下等级跳变,因此必须拆开模板的分辨率缩放逻辑本身来看。

原因:只固定一条边,另一条边就会超出上限 ​

该服务的 ABR 模板原本是以竖版短视频(9:16)为基准设计的。由于竖版视频占绝大多数,「把长边(高度)对齐到等级上限、短边(宽度)按比例计算」这一条规则就足够了。

问题在于,该模板所参照的等级上限本身是分别对长边和短边独立设置的。两个等级的定义如下。

等级条件
360P长边 ≤ 640px 且 短边 ≤ 360px
720P长边 ≤ 1280px 且 短边 ≤ 720px

这与上一篇文章中讨论的 MPS 比例分支方式是另一种形态,但与StreamLive 的分辨率等级判定相同,都采用「必须同时满足长边和短边才算该等级」的 AND 条件结构。也就是说,只要两个条件中有一个超出,就会被挤出该等级。

「只固定长边」这条规则在宽高比接近 9:16 时没有问题。但当宽高比落入 9:16 与 16:9 之间、也就是接近正方形的区间(包含 iPad 的 4:3 这类宽高比)时,情况就变了。在这个区间里,只把长边对齐到等级上限,短边按比例如此计算后反而会超出该等级的短边上限。

用数字来看是这样的。对 850×1280 的输入套用「把长边(1280)对齐到 720p 上限」的规则做缩放,长边已经是 1280、与上限相等,因此一点都不会缩小,短边则原样保留 850。但 720P 的短边上限是 720px。850 远超这个上限,因此该产物无法满足 720P 的 AND 条件(长边 ≤ 1280 且 短边 ≤ 720),被推到更高等级 1080P。明明没改过任何画质配置,却只因一个宽高比就导致等级跳升,其真面目正是如此。

解决:按宽高比区间划分优先级 ​

修改方式是:把宽高比(横向 ÷ 纵向,记为 x)划分为三个区间,并在每个区间里采用不同的「哪条边先对齐上限」策略。

按宽高比区间的优先级规则

条件处理
x > 16:9长边优先
16:9 ≥ x ≥ 9:16短边优先
x < 9:16长边优先

两端区间(纵向很长或横向很宽的情况)先把长边对齐上限、短边按比例计算,短边也会自然落在上限之内。真正有问题的是中间区间,也就是接近正方形的宽高比。在这个区间里要反过来:先把短边对齐上限、长边按比例计算,这样长边也能落进自己的上限之内,从而同时满足两个条件。

实测验证:用四种宽高比确认 ​

我把修改后的规则实际代入了四种宽高比。

宽高比输入判定处理输出
8:16(x=0.5,< 9:16)720×1440长边优先长边 1440→1280640×1280
10:16(x=0.625,中间区间)800×1280短边优先短边 800→720720×1152
16:8(x=2.0,> 16:9)1440×720长边优先长边 1440→12801280×640
16:10(x=1.6,中间区间)1280×800短边优先短边 800→7201152×720

四种情况的输出都满足 720P 的 AND 条件(长边 ≤ 1280、短边 ≤ 720)。尤其是 10:16 和 16:10 这类落入「中间区间」的宽高比,短边优先规则准确生效,可以看到长边为 1152/1152,宽裕地落在上限(1280)之内。iPad 一类的 4:3(x=1.33)宽高比也属于这个中间区间,因此用同一条规则处理。

我也把同一套逻辑代入 360p 等级做了确认。

宽高比输入判定处理输出
比 9:16 更竖长的画面360×720长边优先长边 720→640320×640
比 9:16 更宽的画面500×640短边优先短边 500→360360×461

两种情况都精确满足 360P 的 AND 条件(长边 ≤ 640、短边 ≤ 360)。

小结 ​

  1. 该 ABR 模板所参照的等级定义,对长边和短边各设独立上限,并且是必须同时满足两个条件的 AND 结构。与StreamLive 的分辨率判定方式属于同一形态。
  2. 以竖版短视频(9:16)为前提制定的「只固定长边」规则,会在宽高比处于 9:16 与 16:9 之间的区间(包含 iPad 的 4:3)里导致短边超出等级上限,这正是被意外判定为更高等级(1080P)的原因。
  3. 解决办法是把宽高比划分为三个区间(x>16:9、9:16≤x≤16:9、x<9:16),两端区间采用长边优先、中间区间采用短边优先,应用不同的缩放规则。
  4. 用四种宽高比实测验证的结果,全部满足目标等级的 AND 条件。

即便是以竖版内容为主的服务,只要存在任何一条用户上传平板或横拍视频的路径,「只固定长边就行」这个简单假设就会在该路径上被精确击穿。如果不亲自按宽高比区间算一算到底是哪条边决定等级,就会一直以为计费档位已牢牢固定在两个等级上,直到在账单上撞见意料之外的等级。

基于 VitePress 构建 · 部署于腾讯云 EdgeOne Pages