RGBA 8bitとYCbCr 422 10bitの変換とITU-R BT.709の話

junpei yoshino
MIXI DEVELOPERS
Published in
Dec 25, 2021

--

この記事では、RGBAとYCbCrの変換におけるITU-R BT.709の話をします。映像信号に含まれる色表現の変換について我々の中で間違えたことがあったので共有できればと思います。

自社のライブ映像編集でSMPTE 2110を活用しています。SMPTE 2110とは、徐々に映像業界で導入され始めているライブ制作をIPネットワークの上でやるために使われる規格です。この規格は映像や音など要素ごとに分割して扱うため、ソフトウエアでも処理しやすいのが特徴です。

我々は、SMPTE 2110に関連するソフトウエア開発を行っています。映像は、SMPTE 2110の中で、-20(ダッシュ20)というパートで扱われています。SMPTE 2110–20では、RGBやYCbCrでの表現などいろいろなパターンがあります。

我々が使っているベースバンド信号をIPに変換する機材では、YCbCrで映像をIPネットワークに流しています。今日はこのYCbCrとRGBの変換の話をします。ネットワーク中を流れるYCbCrを含むパケットをサーバに引き込んで、映像の画像を加工等の処理をします。OpenGLなどでRGBAな素材を映像に混ぜ込みたいため、変換の必要が発生します。

この変換の計算について教えてくれるのが、ITU-R BT.709 です。我々はBT.709–6を活用して計算を行っています。

ドキュメントは公開されているので読めばわかると言えばそうなのですが、これを読まずに変換を想像でやっていたときは、若干の色の違いが発生して、悩みました。具体的には、BT.709–6では、各値ごとに値域があり、その範囲に合わせる必要がありました。

YCbCrが10bitでRGBが8bitの場合

Y: 64 から 940

Cb,Cr: 64 から 960

R,G,B: 16 から 235

以下の記事で紹介したWebRTCと2110を繋ぐMoaniというアプリでもこの計算をしています。

映像信号の画素等の表現を変換するときは、その値域について調べてから実装するようにしましょう。

--

--