cBlog

Tips for you.

MacのVLCで再生するとほかのプレーヤーと色が違って(赤っぽく)見える

スポンサーリンク
※当ブログのAmazon、iTunes、サウンドハウス等のリンクはアフィリエイトを利用しています。

前から気づいてはいたけれど、(VLCを使わないことで)無視していた。今回、本気で調べてみた。結論を言うと、VLC内部の問題なので根本的に解決することは不可能である。

参考

yaritakunai.hatenablog.com

 

検証動画プレーヤー

  • IINA
  • QuickTime Player
  • VLC

 

検証用動画

SMPTE color bars - Wikipedia

$ ffmpeg -f lavfi -i smptehdbars=s=1920x1080:r=60000/1001:d=15 -color_range tv -color_primaries bt709 -color_trc bt709 -colorspace bt709 bt709.mp4

 

症状

彩度が過度で(oversaturated)赤みを帯びて見える。

以下は、BT.709の動画を各プレーヤーでディスプレイプロファイル「カラーLCD」上に表示した結果である。Web掲載の都合上、sRGBに変換したのでカラーメーターで測っても誤差がある。

言い訳:この画像だとわかりにくいと思うが、著作権・肖像権の問題のない動画を用意するのが面倒だった。人物の映像だとすぐにわかる。

iina_none

IINA

qt_none

QuickTime

vlc_none

VLC

 

表示結果

原因を探るため、システム環境設定よりディスプレイのプロファイルをBT.709にしたときとsRGBにしたときの各アプリケーションでの表示結果を示す。念のため、VLCの設定はリセットしてからデインターレース、後処理、自動スケーリングすべてオフにした。

BT.709時

bt709_iina

IINA

bt709_qt

QuickTime

bt709_vlc

VLC

sRGB時

srgb_iina

IINA

srgb_qt

QuickTime

srgb_vlc

VLC

 

カラーメーターでの測定結果

以下の表は、上の表示内容のうちイエローとマゼンタをmacOSのDigital Color Meterで測定した結果である。最初にディスプレイのプロファイルをBT.709にしたものを、次にsRGBにしたものを示す。Application列とDisplay, ###列は(差異が生じた原因の)内部で行われている処理の推測である。

参考:Ricci Adams — Mac Color Meters and Color Space Conversion

BT.709

 

File, BT.709

Application

Display, BT.709

Meter, native

Meter, sRGB

VLC

191,191,0

191,0,192

Recognize as sRGB

Through

191,191,0

191,0,192

198,198,0

198,0,198

IINA

191,191,0

191,0,192

Recognize as sRGB, convert to BT.709

Recognize as BT.709

184,184,0

184,0,185

191,191,0

191,0,192

QuickTime

191,191,0

191,0,192

Recognize as BT.709, convert to sRGB

Recognize as sRGB, convert to BT.709

192,191,0

192,0,193

198,198,0

198,0,199

sRGB

 

File, BT.709

Application

Display, sRGB

Meter, native

Meter, sRGB

VLC

191,191,0

191,0,192

Recognize as sRGB

Through

191,191,0

191,0,192

191,191,0

191,0,192

IINA

191,191,0

191,0,192

Recognize as sRGB, convert to BT.709

Recognize as BT.709, convert to sRGB

192,191,0

191,0,192

192,191,0

191,0,192

QuickTime

191,191,0

191,0,192

Recognize as BT.709, convert to sRGB

Recognize as sRGB

199,198,0

198,0,199

199,198,0

198,0,199

 

考察

VLCは、macOSのColorSyncをすっ飛ばして表示しているのではないか。また、以下のようにまとめられると思う。

  • QuickTimeはディスプレイのプロファイルに関わらず常に色が正しい(ただし変換が多いため丸め誤差が必ず含まれる)
  • VLCはsRGBの動画(稀有)をsRGBのディスプレイに表示するときのみ色が正しい
  • IINAは動画のプロファイルに対応していないのか常に動画をsRGBと解釈してしまう

(こういうことだろうか)

動画のプロファイル ディスプレイのプロファイル

無視 無視 vlc

無視 対応 iina

対応 対応 quicktime

 

解決策

根本的な解決は不可能なので、ディスプレイのプロファイルを「カラーLCD」設定時にできるだけQuickTime Playerの発色に近い設定を探っていこうと思う。

QuickTimeのRGB値との2乗誤差を最小化する戦略をとる。本当はRGBではなくL*a*b*の方が人間の感覚に近いと思うのでそっちでやりたかったが、L*とa*、b*とでスケールが違うためRGBにした。

結果は、ビデオ > 出力モジュール > Mac OS XのDisplay primariesを「Adobe RGB (1998)」、Display gamma / transfer functionを「Pure power gamma 2.2」の設定が最も誤差が少なくなった(すべての組み合わせを試したわけではないが)。意外にDCI-P3が良くなかったのはガンマがDisplay P3とは違うからかな。

 

補正結果

多少、QuickTimeに近づいたと思う。赤みは取れた。

vlc_conf

VLC(補正結果)

qt_none

QuickTime(目標、再掲)

vlc_none

VLC(補正前、再掲)

 

追記

[追記 2021/10/21] あんま良くない。