AviutlのGPUフィルタでHDR2SDR
この前公開したclfiltersは、基本的にはこれまでNVEncやQSVEncなどに実装してきたGPUフィルタをAviutlでも使えるようにしたもの。
対応フィルタの中にはvpp-colorspace(色空間変換)があって、この中でhdr2sdrを使うことができる。
使い方が少しややこしいので、使い方の説明をしてみる。
HDR
HDRは、High Dynamic Rangeの略で、これまでよりもレンジの広い範囲の輝度を扱うための仕組み。それに対して、従来の取り扱い方をSDRという。
基本的にはHDRに対応する処理系が必要で、対応していない処理系では、本来の効果を発揮しない。(まあ私自身はHDR対応モニタを持ってないのでそもそもよくわからんが…)
AviutlでのHDR
AviutlでHDR素材を入力してHDR非対応モニタで見ると、そのままだと暗くくすんだ色に表示されてしまうことが多い。
今回の入力サンプルはこちらからお借りした。

HDRは基本的にはHDRのまま取り扱うのがよさそうだが、一方でSDRに変換したい場合には、clfiltersのhdr2sdr機能を活用できる。
clfiltersのhdr2sdr機能の使い方
まず、入力色空間を把握する必要があるので、MediaInfoで分析する。
MediaInfoでの分析結果はこちらの通り。

これを入力側の情報として設定していく。(このあたりが入力映像に合っていないとうまくいかない)
今回の例だと、
- colorprim bt2020 (color primariesより)
- transfer smpte2084 (transfer characteristicsより)
- matrix bt2020nc (matrix coefficientより)
とすればよいことがわかる。
なお、transferは"PQ"ならsmpte2084、"HLG"の場合はarib-std-b67を選択するとよいようだ。

出力側はSDRなのでbt709と設定した上で、matrix, colorprim, transferのチェックを入れる。
さらにhdr2sdrをnoneから使用したいものに変更して、入力ピーク(輝度)と目標輝度を適当に調整していく感じ。これはいろいろ試してみてお好みのものにしてみてほしい。(クリックで拡大)
目標輝度=100の場合で4つのオプションを試してみるとこんな感じ。(クリックで拡大)




こんな感じで、どうしても白く飛んじゃってるところはあるけど、ある程度それらしいSDR映像に変換できる。
まあ、本来はHDR映像はちゃんとHDR対応モニタで表示するか、あるいは再生中にmadVR等でSDR変換するのがいいと思うけど、AviutlでSDR映像に変換したい場合はこんな方法もあるよ、ということで。
今回紹介したhdr2sdrの実装は、もともとはgithubで要望があって、mpv等の実装を参考としてNVEncCのCUDA版vppフィルタに実装し、さらにそれをOpenCLに移植したもの。
clfiltersを作ったことで、このあたりを実際に切り替えてすぐチェックできるようになったのは良かったと思う。
対応フィルタの中にはvpp-colorspace(色空間変換)があって、この中でhdr2sdrを使うことができる。
使い方が少しややこしいので、使い方の説明をしてみる。
HDR
HDRは、High Dynamic Rangeの略で、これまでよりもレンジの広い範囲の輝度を扱うための仕組み。それに対して、従来の取り扱い方をSDRという。
基本的にはHDRに対応する処理系が必要で、対応していない処理系では、本来の効果を発揮しない。(まあ私自身はHDR対応モニタを持ってないのでそもそもよくわからんが…)
AviutlでのHDR
AviutlでHDR素材を入力してHDR非対応モニタで見ると、そのままだと暗くくすんだ色に表示されてしまうことが多い。
今回の入力サンプルはこちらからお借りした。

HDRは基本的にはHDRのまま取り扱うのがよさそうだが、一方でSDRに変換したい場合には、clfiltersのhdr2sdr機能を活用できる。
clfiltersのhdr2sdr機能の使い方
まず、入力色空間を把握する必要があるので、MediaInfoで分析する。
MediaInfoでの分析結果はこちらの通り。

これを入力側の情報として設定していく。(このあたりが入力映像に合っていないとうまくいかない)
今回の例だと、
- colorprim bt2020 (color primariesより)
- transfer smpte2084 (transfer characteristicsより)
- matrix bt2020nc (matrix coefficientより)
とすればよいことがわかる。
なお、transferは"PQ"ならsmpte2084、"HLG"の場合はarib-std-b67を選択するとよいようだ。

出力側はSDRなのでbt709と設定した上で、matrix, colorprim, transferのチェックを入れる。
さらにhdr2sdrをnoneから使用したいものに変更して、入力ピーク(輝度)と目標輝度を適当に調整していく感じ。これはいろいろ試してみてお好みのものにしてみてほしい。(クリックで拡大)
目標輝度=100の場合で4つのオプションを試してみるとこんな感じ。(クリックで拡大)




こんな感じで、どうしても白く飛んじゃってるところはあるけど、ある程度それらしいSDR映像に変換できる。
まあ、本来はHDR映像はちゃんとHDR対応モニタで表示するか、あるいは再生中にmadVR等でSDR変換するのがいいと思うけど、AviutlでSDR映像に変換したい場合はこんな方法もあるよ、ということで。
今回紹介したhdr2sdrの実装は、もともとはgithubで要望があって、mpv等の実装を参考としてNVEncCのCUDA版vppフィルタに実装し、さらにそれをOpenCLに移植したもの。
clfiltersを作ったことで、このあたりを実際に切り替えてすぐチェックできるようになったのは良かったと思う。
スポンサーサイト