Steam DeckのHDMI出力の色味がおかしい問題でずっと悩んでいたのだけど、原因が分かって解決できた。
原因
どうもSteam DeckのHDMI出力は常にfull rangeのRGBな一方でそれを示すメタデータが信号に載ってないらしい。実際、出力解像度を1280×800 (Steam Deckのモニターと同じ)にすると正しい色でキャプチャーできることを確認できた。Full rangeのRGBで送られてきた映像をlimitedとして解釈したら色が妙に濃くなって当然。
解決方法
OBSのVideo Capture DeviceのPropertiesを開く
"Use Preset" にチェックが入っていたら外す
"Video range" の設定を適切な値に変える
"Use Preset" が曲者で、これにチェックが入っていると "Video range" を含む多く設定項目が表示されないので設定できない。しかもPropertiesのウィンドウが初期状態だと小さいので、チェックを外して設定項目が増えてもスクロールしないと見えない位置に隠れてて気付きにくいという……
また、Steam DeckのHDMI出力にはSteam Deckの色温度設定が影響する。デフォルトだとやたらと暖色寄りになってしまうので、色温度設定は最大値にする必要がある。
自分の環境向けの設定メモ
Input format: Auto = YUY2のままでOK (NV12との違いは誤差レベルなので分からない。違いがあってもフォーマットの性質を考えるとYUY2の方が良いはず)
Colour space: Rec. 709にする(Rec. 601だと青や緑の色味の鮮やかさが大分落ちる)
Video range: Auto = LimitedのままでOK
最後が特殊。Steam Deckが「自称Limitedだけど中身はFullのRGB」の映像を送ってきてるなら、理屈としてはFullとして解釈するのが正しいはず。ところがFullを指定すると全体的に色が薄くなる。これは「Limited RGBをFullとして解釈した絵」と同じ。
自分の環境ではSteam Deck → RX-A1070と繋いで後者から外部モニターやキャプチャー機器に映像や音声を回している。もしかしたら映像に関してこれが何かしてしまってる可能性があり、それによって理屈(Full)とは異なる設定をする方が正しい見た目になるのかも知れない。