コンテンツへスキップ

映像のガンマ補正

ガンマ補正とは、入力側のカメラと出力側のモニターで、明るさを調整する処理です。古くはブラウン管テレビのために必要だった背景はありますが、この先もガンマ処理は欠かせません。人間の視覚特性は暗部の方が明部よりも敏感で、感覚の特性は直線的ではありません。この特徴をガンマで表すと、0.4のカーブに近いと言われています。

映像のガンマ補正は、入力側と出力側で相互に関係します。DaVinci Resolve のようなアプリケーションで正確にガンマ補正を行うためには、総合的なガンマへの理解が欠かせません。ガンマ処理の背景と、どのような原理なのかを見ていきましょう。

ガンマに対する基礎知識

「ガンマ値は2.4」と、算数の九九を暗記したように覚えている人もいるでしょう。映像を作る上では、このように設定さえ正しければ結果オーライというケースも多いでしょう。私は技術者なので、その2.4はなぜ2.3や2.5ではないのか?と問い掛けたくなるのです。結果オーライにしつつ、なぜそうなっているのかを合わせて知りたいのです。

映像用語のガンマとは、入出力関係で明るさを調整する数式の、指数部の値を指します。あるシステムで、入力されたソースに対して指数を与えることで、出力が変化します。入力のレンジを0〜1.0に正規化した場合、この指数が1.0を超えると出力レベルは下がり、1.0未満だとレベルは上がります。8bitの映像は0〜255で表されますが、この値をそのまま使って計算すると正しい答えが出ません。コードバリューを255で割って、0〜1.0の中に値を収めてから使用します。この入力の右肩に付く指数をガンマと呼びます。

ガンマ1.0の特性を持つ入出力関係では、出力は入力と同じ値になり、右上がり45度の直線となります。よくガンマがリニアだという意味は、この特性のことを指していたのです。さらに、これもよく耳にするガンマ2.4とは、リニアに対して下側に窪んだカーブの特性になり、出力の方が暗くなります。

NTSC時代のマスターモニターは、ブラウン管(CRT)と呼ばれる真空管を使っていました。CRTのガンマ値は2.2〜2.5で、そこから放送用モニターには2.35が採用されたのだと思います。2.35のガンマを入出力グラフで見ると、右上がり45度の直線に対して下側に窪んだ特性になります。そのため、入力信号に対して全体的に暗くなります。この特性はCRTを使う限り避けられないものであり、何らかの対策が必要でした。

そこで、暗い映像を補正するために、あらかじめカメラ側で明るく撮っておき、表示側の特性と掛け合わせることにしました。リニア特性のガンマ1.0に対して逆ガンマをかけるわけで、1.0割ることの2.35で、答えは0.425531914893617です。リニア1.0に対して逆数を取ったわけですが、この1.0というのはシステム全体で採用する総合的なガンマで、システムガンマと呼びます。さまざまな研究から、家庭用テレビで見たときに良好な「見え方」を確保するためには、システムガンマは1.0ではなく1.2近辺であるべきだと考えられていました。先ほどのカメラ側のガンマの計算式を、1.0ではなく1.2にして再計算すると、0.51063829787234になります。この0.51ガンマがNTSC方式では採用され、その後のHDでも引き継がれました。現在でもBT.709のカメラ側のガンマは、0.51近似とされています。

ちなみにBT.709規格(上の画像は規格書からの引用)を見ると、カメラ側のOETFは0.45をベースに若干の調整が加えられています。もう少し詳しく見ると、黒0%からの立ち上がりエッジでは、きれいなガンマ0.45の曲線にはなっていません。これは、このカーブでは入力値が0に近いと出力が過大になるためで、0からの立ち上がり部分0.018未満までは入力を4.5倍した直線特性で、カーブの途中からは0.45のガンマカーブになっています。このように、直線部分と曲線部分が合わさったハイブリッドな特性になっています。これを数学的に近似値となるガンマで表すと、0.51あたりになります。macOSのGrapherアプリを使って、BT.709規格の式をもとにしてグラフを描いてみました。赤がBT.709のハイブリッドなカーブで、0.51のガンマカーブが緑です。暗部では多少の違いはありますが、それ以降のハイライト部まではほぼ似たようなカーブを描いています。

これまでのところ、ガンマは三種類登場しました。CRTや後のLCDでのモニター側のガンマ。これは電気から光に変換するための関数で、EOTF(Electro-Optical Transfer Function)と呼びます。これに対してカメラ側は、光から電気に変換するので、OETF(Opto-Electronic Transfer Function)です。そして、現実的には1.2に落ち着いたシステムガンマは、システム全体を取りまとめる役割で、カメラに入ってくる光とモニターから出ていく光を俯瞰します。そこからOOTF(Opto-Optical Transfer Function)と呼ばれます。

ガンマ値は、入力映像を黒レベル0%から白レベル100%まで1.0で正規化し、その指数として2.4などの値を計算します。8bitの場合、ピークの255が1.0になるように計算して、映像のレベルを0から1.0の間に収めるのです。指数部のガンマ値だけ取り出して見ると、次のような関係式で表すことができます。

OOTFの1.2、CRTガンマの2.35、カメラガンマの0.51という正確な値は、私が調べた限りでは諸説ありました。現在のガンマ運用状況や、計算式の辻褄が合うことから、私はこれらの値が妥当であると判断しています。

ガンマ処理

ガンマ2.4とは、DaVinci Resolveで完パケするメディアファイルに付加されたガンマ値が、2.4というように考えてしまいがちです。ここに落とし穴があります。メディアファイルを出力する際には、ガンマ2.4をレンダリングに加えてエクスポートすると間違いになります。

前述の通り、モニター側のガンマはCRT時代は2.35でした。その後登場したLCDでは2.4に規定され、わずかに値に変化がありました。現在では通称Rec.709、正確にはBT.709では、モニター側のEOTFは2.4を前提としています。実は BT.709の規格にはEOTFの記載はありません。これを定義しているのは、別の規格であるBT.1886です。液晶モニターが主流になって、ガンマ値を自由に設定できるようになりました。改めてEOTFの基準を示す目的で、BT.709に続いて策定されたのがBT.1886です。(下の図はBT.1886規格からの引用)

ITU-R BT.1886勧告では、HD制作で使用するLCD向けEOTFを規定しています。EOTFを決定する際に大きな影響を与えたのは、それまで長きにわたって使われてきたCRTの特性でした。CRTを採用したモニターでは、メーカー、モデル、地域によってEOTFが異なっていたことや、CRTを使用したモニターは今後利用できないことから、LCD向けのEOTF策定に至ったとしています。EOTFはCRTの測定特性に基づいて、指数関数を持つ単純な式で規定するとして、ガンマ値2.4であるべきと勧告しています。

BT.709とは、ある信号がモニターに表示されるとき、入力信号の明るさよりも暗く表示されることを意味します。この前提で、DaVinci ResolveからUltraStudio経由でSDIを接続して、モニターに送る映像にガンマ2.4を加えてしまうとどうなるでしょうか?DaVinci Resolve出力とモニターとで二重にガンマが加わることになるので、予想以上に暗い映像になってしまいます。実際、DaVinci Resolve側からの出力には、2.4ガンマを加える処理はしていません。この関係は、BT.709を想定したシステムでは全て同じであるはずです。放送システムをはじめ、家庭で使うBDプレーヤーでも同じシステムであるべきです。ガンマを加えずにリニアで出力して、モニター側で暗めに表示するわけです。

NTSCからBT.709 HDの初期まで、ガンマの運用は安定した時期が長く続いていました。しかしその後、ファイルベースワークフローという黒船がやってきます。いつの時代もゲームチェンジャーが登場するものなのです。メディアファイルがビデオテープの代わりになり、今は放送局への納品も磁気テープからメディアファイルに置き換わろうとしています。メディアファイルを使うということは、マスターモニターなどの外部モニターが必ずしも必要でないことを意味します。自分の手元にやってきたメディアファイルを見るために、皆さんはきっと身近にあるMacなどのパソコンを使うに違いありません。

こうなると、これまでのガンマの扱い方を見直さなければなりません。これまでは完パケの状態ではガンマは加えられていませんでしたが、外部モニターなしでパソコンの中だけで映像を見る時には、どこでガンマを加えれば良いのでしょうか?そのような経緯によって、ガンマ設定についての混乱が起きているのです。

YouTubeでカラーシフトが起きる理由

YouTubeとは言っても、同じ動画なので特別視する必要はないのでは?と疑問に感じる方も多いと思います。テレビCMのWeb配信版のファイルを作る際には、単純なコーデック変換だけで、そのままアップロードしているケースが多いように見受けられます。YouTubeに動画をアップすることが映像業界でも増えてくるにつれて、YouTubeで映像を見るとなんだかこれまでの色味とは違うね、という印象をよく耳にするようになりました。その背景には、日本ではMacを使っている制作関係者が多いということも影響しています。YouTubeとMacの関係を、709規格と絡めて見ていきましょう。

YouTubeの現在の状況では、4K解像度やHDR(PQとHLGの両方)にも対応していて、アップロード時にも特にフォーマットごとの面倒な設定や気遣いは不要です。コンシューマー向けの動画配信サービスなので、この仕様は非常に的を得ていると思います。ただ、HDRをアップロードした際には、リリースまでの時間がSDRに比べると長めのようではあります。私の経験では、これらの各種フォーマットでYouTubeに送った動画コンテンツの映像品質が、大きく変わることはないと見ています。もちろんコーデックが置き換わるための、多少の劣化は起こる可能性はあるでしょう。

このように、YouTube側では映像に対する大きな色変換は加えていないようです。しかし、映像業界ではなぜかYouTube配信でのカラーシフト問題は根強く残っているのです。では、その原因はどこにあるのでしょうか。答えから言いますと、macOSの中の動画ファイルのビューワーに対する「色変更」が原因です。色変更はmacOSのカラーマネージメントシステムのColorSyncなのか、WebブラウザやQuickTimeプレーヤーのようなビューワソフトウエアなのか、他の原因なのかは判明していません。しかし、Macの中に原因があることは間違いありません。

私が確認できたことは、macOSが扱うBT.709メディアファイルのOOTFは、1.2ではなく1.0であるということです。これにより、QuickTimeプレーヤーなどのmacOSのAPIをダイレクトに使っているソフトウエアは、BT.709動画を表示する際のEOTFが、2.4ではなく1.96になっているのです。その結果、DaVinci ResolveのOutput Color SpaceをRec.709 (Scene)にしてNCLCを1-1-1で書き出し、それをQuickTimeプレーヤーで表示すると明るく見えることになります。本当ならQuickTimeプレーヤーはBT.709動画が来ると、EOTFを2.4で表示するべきなのですが、なんらかの理由で1.96ガンマに変更しているわけです。YouTubeからのダウンロードした動画でも同様のことがWebブラウザ内で発生するので、明るく見えるというカラーシフトが起きます。

そこで登場するのが、Rec.709-Aです。「YouTube完パケ」のOutput color spaceはこのRec.709-Aにすることで、DaVinci ResolveのビューワとWebブラウザで、YouTubeを見た時の色味を一致させることができます。Rec.709-AのOutput color spaceにすることで、ビューワの見え方は変わらないものの、ファイルに書き出すレンダリングバリューに、2.4/1.96ガンマがかかることで暗く出力されます。YouTubeには暗めに送り、Webブラウザでの表示で明るくすることで、結果的に辻褄が合うわけです。

DaVinci ResolveのビューワをColorSync有効な状態で見た時と、YouTubeにファイルをアップロードしてGoogle Chromeで表示した様子を比較してみると、Rec.709-Aだけが同じ色の見え方であることがわかります。これは、YouTubeを経由すると、WebブラウザはNCLCを参照した色調整が加わらなくなること。macOSは1-1-1メディアファイルには、ガンマ1.96を適用すること。この二つの理由から、DaVinci Resolveからのファイル出力時に、2.4/1.96ガンマをかけて暗くしたRec.709-Aが同じに見えるのです。これはMac環境だけでの挙動になるので、Windows環境ではメディアファイルへのガンマ処理が異なるため、同じに見えないことが予想されます。私が検証した四つのYouTubeクリップは、下記のリンクから確認できます。

01 Rec.709 (Scene)
02 Rec.709 Gamma 2.4
03 Rec.709 Gamma 2.2
04 Rec.709-A

macOSが恣意的な色変更を、動画メディアに対して加えているのですか?と疑問に感じるかもしれませんが、その状況証拠もあります。私はMacBook ProのXDRタイプのLCDを載せたモデルを使っています。そのため、システム設定からDisplay設定に進むとこれまでのような設定項目とは異なっています。PresetのポップアップからCustomize Presetsに進みます。すると、リストが表示され9つのReference項目が出てきます。その中からHDTV Video (BT.709-BT.1886)を選択してプラスマークから複製を行います。一般的なHDフォーマットをもとにしてユーザーの好みに応じてカスタマイズができるようになっています。

カスタマイズ項目を見ると、「Apply System Gamma Boost」とデフォルト値1.22が目につきます。1.22という数字には見覚えがないのですが、いくつかのこれまで登場したガンマ値の計算で、1.22の理由が判明しそうです。試しに2.4割ることの1.96を計算してみました。答えは1.224489795918367で、これを意味しているようです。「Apply System Gamma Boost」はチェックボックスになっているので、無効にすることが可能で、XDRタイプのディスプレイ搭載Macなら映像業界に面倒をかけている「Apple独自のガンマ変更」を無効にできるようです。

試してみました。「Apply System Gamma Boost」の1.22を有効にすると、ガンマ2.4のようなしっかりしたコントラストになり、無効にすると明るくなりこれまでのApple仕様のガンマに見えます。この機能は一部のハードウエアの条件を満たさないと使えない機能なため、一般的ではありません。ただ今後のMacでは、XDRのような仕様のパネルの採用が増えると思われます。この仕様がデフォルトになると、映像制作者に優しいMacになってくれるでしょう。

ちなみに私は先ほどのカスタマイズ機能を使って、一般的なBT.709/D65向けの設定を作成してあります。外部リファレンスモニターを使うことが理想ではあるのですが、いつも理想通りの環境があるとは限りません。MacBook Proだけの環境でも、「それなりに」色をきちんと表示したい時には、これが使えると思っています。

検証の環境

この考察が前提としている環境は、下記のとおりです。macOSやソフトウエア、ドライバなど、いろいろな環境がこの先変化していくため、この記事の内容には「賞味期限」があることをご理解ください。最終更新日(ページ最下部に表示)から時間が経過してからの内容に関する正確性は、執筆時から変わっている可能性があります。

  • macOS14.0(Windows環境は対象外です)
  • DaVinci Resolve Studio 18.6
  • UltraStudioシリーズのビデオI/OとDesktop Video 12.5
  • SDIもしくはHDMI接続のリファレンスモニターと波形モニター
  • MacBookPro18,2
2023-10-01 10:20:19|山本久之