眩しすぎるHDRスパム広告について

仕事でHDR動画を扱うためにHDR対応のディスプレイを購入したんだけど、最近よく見るHDRスパム広告が外部ディスプレイでも表示されるようになってしまった。

怪しい広告。"Start Chat"ボタンだけ異常に眩しい

これはHDR画像が通常の画像よりも明るい色を表示できることを利用したハックである。 YouTubeでたまに異常に眩しいショート動画が流れてくるでしょ、あれのことです。

スマホのカメラでできるHDR合成とは別物なので注意。あれは露出を変えながら複数の写真を撮影して一枚に合成する技術のことであって、出力がSDRかHDRかは関係ない。

このスパム広告の存在には以前から気づいていたけど、MacBookのディスプレイで日本のサイトを閲覧するときくらいしか遭遇しないので、「悪賢いな〜」と思うくらいで気に留めていなかった。海外から日本のブログ等にアクセスすると、アドネットワークの経路のせいか、日本からアクセスするよりも悪質な広告がよく表示される。

せっかくなので、このスパム広告が眩しく表示される仕組みを調べてみよう。

スパム広告のボタンをinspectorで調べると、 background-imageに glow_white_333_1785758637_1785758673.avif という画像が指定されている。AVIFはAV1に関連する画像フォーマットで、高い圧縮率や、HDRカラーのサポートが特徴である。

一見、ただの真っ白な256x256の画像に見えるが……

ffmpegで中身をチェック:

$ ffmpeg -v error -i Downloads/glow_white_333_1785758637_1785758673.avif -vf "signalstats,metadata=print:file=-" -f null -
frame:0    pts:0       pts_time:0
lavfi.signalstats.YMIN=619
lavfi.signalstats.YLOW=619
lavfi.signalstats.YAVG=619
lavfi.signalstats.YHIGH=619
lavfi.signalstats.YMAX=619
...

lumaは Y=619 で格納されている。 Pythonの colour-science ライブラリで輝度を計算:

$ uv run --with colour-science python -W ignore -c "
import colour
print(colour.models.eotf_ST2084((619-64)/876), 'nits')"

334.847927258 nits

334nits となる。 macOSの場合、HDRコンテンツは203nitsがSDRの白に対応するので、この画像は通常の白いpngに比べて 334 / 203 = 1.65 倍明るく表示される、ということだ。

個人的にはHDRはガンガン普及してほしいけど、広告に使われると迷惑ですね。光害って感じ。

参考