配信のビットレート設計 — 現場で最初に任される仕事
なぜ1本の動画に複数の解像度を用意するのか。ABRの仕組みから、解像度ごとのレート歪み曲線とその凸包でラダーを決める考え方、過剰なビットレートが3つの経路で損をする理由、PSNR・SSIM・VMAFの性格の違いと使い分け、そしてper-titleエンコーディングまで。最後は代表クリップの取り方から検証の回し方まで手順に落とします。
比喩: 服を1サイズしか作らない店
服屋が1サイズしか作らなければ、客の大半には「きつい」か「だぶだぶ」を売ることになります。かといってサイズを1cm刻みで揃えれば、在庫と管理費が膨れ上がる。何段作るか、どの間隔で刻むかが商売の設計そのものです。
動画配信でこの「サイズ展開」に当たるのがビットレートのラダー(階段)です。視聴者の回線は光回線から混雑した移動体まで千差万別で、同じ視聴者の中でも刻々と変わります。1本しか用意しなければ、太すぎて止まるか細すぎて汚いかのどちらかを配ることになる。かといって段を増やせば、エンコード費用もストレージも段の数だけ増えます。
配信の現場で最初に任されるのが、この階段を決める仕事です。地味ですが、画質と配信コストと視聴体験が一箇所で交差する数少ない設計点でもあります。
ABR — プレイヤーが自分で選ぶ
いまの配信はほぼすべて ABR(Adaptive Bitrate、適応ビットレート)です。仕組みは単純で、同じ映像を複数の品質で用意し、数秒ごとのセグメントに切っておく。マニフェスト(HLSなら .m3u8、DASHなら .mpd)に段の一覧を書いておくと、プレイヤーが実測スループットとバッファ残量を見て、セグメント単位で段を選び直します。
サーバは何も判断しません。段を並べて置いておくだけで、選ぶのはクライアント側です。だから設計者の仕事は「どんな段を並べておくか」に尽きます。
途中で段を乗り換えられるためには、全段でセグメントの切れ目が一致していなければなりません。つまりキーフレームの位置を全解像度で揃える必要がある——ここは動画圧縮の基礎で扱ったGOP設計の話なので、本記事では前提として置きます。揃っていないラダーは、段を増やすほど切替のたびに映像が飛ぶとだけ覚えておいてください。
ビットレートと画質は比例しない
段を決める前に、押さえておくべき性質がひとつあります。ビットレートを2倍にしても画質は2倍にならない、ということです。
符号化の品質とレートの関係を描いた曲線をレート歪み曲線(R-D曲線)と呼びます。この曲線は上に凸です。低いレートの領域では少しビットを足すだけで画質がぐんと上がり、高いレートの領域では同じだけ足してもほとんど動かない。JPEGの量子化で見た挙動と同じ理屈で、細かい係数を残すほど1ビットあたりの見返りが減っていきます。
この曲線の形を知らないまま「余裕を見て高めに」と決めると、見えない画質に金を払い続けることになります。逆に、崩れ始める肩の位置を知っていれば、同じ体感画質を最も安いレートで買える。ラダー設計は本質的に、この曲線の上でどの点を選ぶかという問題です。
解像度をまたぐと曲線が交差する
ラダーの段は「ビットレートの値」だけでなく「解像度」もセットで決めます。そして同じビットレートでも、どの解像度で符号化するかによって画質が変わります。
低いビットレートで高い解像度を送るとどうなるか。画素数が多いぶん1画素あたりのビットが足りず、量子化が粗くなってブロックノイズとぼやけが出ます。同じビット数を低い解像度に使えば、その解像度の中では十分きれいに符号化でき、再生時にアップスケールしたほうが結果として見た目が良い。逆に高いビットレートでは、低解像度は上限に張り付いて(元の解像度以上の情報は作れない)、高解像度が追い抜きます。
つまり解像度ごとにR-D曲線を描くと、低レート側では低解像度が上、高レート側では高解像度が上で、途中で交差します。あるビットレート で選ぶべき解像度は
は「解像度 でビットレート に符号化したときの画質」、 は「それを最大にする 」。つまりこの式は「そのビットレートで解像度を片っ端から試して、いちばん綺麗に見えたものを採る」と言っているだけです。どれが勝つかはレートによって変わる——それがまさに曲線が交差する理由です。
各レートでいちばん上に来る曲線をたどった包絡線が凸包(convex hull)で、ラダーの段はこの上から選ぶ、というのが原則です。
コメント
コメントにはログインが必要です