背景
- 先日、某所で「Rec.709 と Rec.709-A の違いを説明して欲しい」と聞かれたのだが即答できなかった
- 思い返すと一度も特性を確認したことが無かったのでプロットすることにした
目的
- DaVinci Resolve の Rec.709-A の特性をプロットする
- プロット結果から Rec.709-A の数式を推測する
結論
- DaVinci Resolve の RCM *1 を使い Rec.709-A の EOTF/OETF をプロットした様子を図1~図4 に示す。
- 比較用に Rec.709(無印)と Gamma 2.2 もプロットしてある
- Rec.709-A の特性は Gamma 1.961(
)である
- そのため ITU-R BT.709 で定義されているカメラ用の OETF とは特性が異なっている
Rec.709-A の EOTF
![]() |
![]() |
---|---|
図1. Rec.709-A の EOTF(緑の線) | 図2. 低輝度領域を拡大表示したもの |
Rec.709-A の OETF
![]() |
![]() |
---|---|
図3. Rec.709-A の OETF(緑の線) | 図4. 低輝度領域を拡大表示したもの |
検証環境
今回は以下の環境で検証を行った。
項目 | 値 |
---|---|
OS | Windows 11 24H2 |
DaVinci Resolve | VERSION 19.0.3 BUILD 5 |
詳細
以下で結論に至るまでの経緯を書いていく。 検証に使用した Resolve *2 のプロジェクトファイルやソースコードは最後にまとめて紹介する。
EOTF の特性確認
Blackmagic Design のドキュメントを読んでも Rec.709-A の特性については特に言及がなかったため、 Resolve の RCM を利用して特性を確認した。
具体的には図5 に示す 0 CV ~ 1023 CV の単調増加テストパターンに対して、 図6 に示す RCMでの変換と図7 に示すOpenEXR 形式での出力を行って確認することにした。
![]() |
![]() |
---|---|
図6. Resolve の RCM の設定 | 図7. Resolve の Deliver ページの設定 |
図6、図7 を見れば分かるように全体の処理は以下の流れとなっている。
- ① 図5 の画像に Rec.709-A の EOTF を適用して Linear にする
- ② Linear に変換された画像を OpenEXR で保存する
こうすることで、OpenEXR の画像データ自体が Rec.709-A の EOTF を示すものになる。
従って Rec.709-A の特性をプロットするには、保存した画像データから適当に 1 line を抽出してプロットするだけで良い。 プロットした結果が冒頭の 図1、図2 である。
OETF の特性確認
EOTF の確認と同じく Resolve の RCM を利用して特性を確認した(EOTF と似ている箇所が多いので、重要な差分に関しては赤文字にしておく)。
具体的には 図8 に示す 0.00003 ~ 1.0 の log2 スケールでの Rampパターン画像に対して、 図9に示す RCMでの変換と図10 に示す TIFF 形式での出力を行って確認することにした。
log2 スケールに関しては過去記事の DaVinci Resolve を使って Apple Log の特性を調べてみた を参照して頂きたい。
![]() |
![]() |
---|---|
図9. Resolve の RCM の設定 | 図10. Resolve の Deliver ページの設定 |
図9、図10 を見れば分かるように全体の処理は以下の流れとなっている。
- ① 図8 の画像の Rec.709-A の OETF を適用して Non-linear にする
- ② Non-linear に変換された画像を TIFF で保存する
こうすることで、TIFF の画像データ自体が Rec.709-A の OETF を示すものになる。
従って Rec.709-A の特性をプロットするには、保存した画像データから適当に 1 line を抽出してプロットするだけで良い。 プロットした結果が冒頭の 図3、図4 である。
Rec.709-A の Gamma 値の確認
Rec.709-A の EOTF の特性は図1に示す通り得ることができたが、具体的な Gamma 値を得るにはもうひと手間必要である。 そのため以下のことを行った。
まず、EOTF の Gamma カーブは以下の数式で表現できる。
そのため は以下の数式で計算可能である。
今回、画像ファイルとして得られている Rec.709-A の EOTFデータは合計 1023 点ある。 そのため、開始点と終了点を除く 1021点については Gamma値の計算が可能である*3。
ということで 1021点について Gamma値を計算した上で各種統計データを確認したところ以下の結果となった。
項目 | 値 |
---|---|
平均 | 1.9609994 |
標準偏差 | 0.0000052 |
最小値 | 1.9608580 |
最大値 | 1.9610026 |
標準偏差が極めて小さいことから Rec.709-A は単純な Gamma カーブ (power 関数) であることが分かる。 グラフでの目視確認の内容も踏まえて、筆者は Rec.709-A の Gamma値は 1.961 であると結論付けた。
再現実験用のデータ&ソースコード
筆者の行った検証を第三者が後から確認できるようにデータとソースコードを添付しておく。
(ただし、ソースコードは筆者の開発環境でないと動かない可能性が高いです。参考程度に…)
Resolve のプロジェクトファイル
検証に使用したプロジェクトファイルを添付しておく。
Resolve 制御用の Pythonスクリプト
今回は Pythonスクリプトを使って Resolve の制御を行ったので、そのコードも参考情報として添付しておく。
グラフのプロットを行ったコード
EOTF/OETF のグラフのプロットを参考情報として添付しておく。
Gamma値算出のコードを参考情報として添付しておく。
感想
久しぶりに Python から Resolve を制御するコードを書けて満足した。