要望があったので rgb2yuy2 の BT.709 版を作成しました。
いつものところにアップしてあります。
ついでに「内部もBT.709」という色変換プラグインも作って公開してます。
AviUtl プラグイン フィルタ by うえぽん
さて、これを作っていて思ったのですが、RGB素材をUVダウンサンプリングしてBT.709で出力する際は、「内部もBT.709」色変換プラグインを用いて行わないと若干劣化してしまいそうです。
とりあえず、rgb2yuy2(BT.709) の AviUtl内部(YC48) から YUY2 へ変換している部分を見ればなんとなく意味が分かると思います。
AviUtl内部(YC48)はBT.601ベースになっているので BT.709 のYUY2で出力するには色域を変換する必要があります。変換に際して輝度Y0,Y1を求めるには色差情報も必要になります。で、左右の色差の平均を求めるタイミングが問題になります。
UVダウンサンプリングフィルタは色変換プラグインの前の AviUtl内部(YC48)のBT.601 ベースで行います。UVダウンサンプリングフィルタは左右のピクセルの色差を同じにします。そうすると色変換時に輝度Y0,Y1を求めるための色差も左右で同じになってしまいます。これによって最終的な輝度情報が少しだけ劣化しまうわけです。
というわけで、解決方法はないか何かと考えたら、AviUtl内部(YC48)もBT.709ベースにしたらどうかと思いついたわけです。そんなわけで「内部もBT.709」色変換プラグインを作った次第です。
いつものところにアップしてあります。
ついでに「内部もBT.709」という色変換プラグインも作って公開してます。
AviUtl プラグイン フィルタ by うえぽん
さて、これを作っていて思ったのですが、RGB素材をUVダウンサンプリングしてBT.709で出力する際は、「内部もBT.709」色変換プラグインを用いて行わないと若干劣化してしまいそうです。
とりあえず、rgb2yuy2(BT.709) の AviUtl内部(YC48) から YUY2 へ変換している部分を見ればなんとなく意味が分かると思います。
// 内部YC48 左(y0, cb0, cr0)、右(y1, cb1, cr1) // 出力YUY2(Y0, U, Y1, V) Y0 = ( (219*y0 - 27*cb0 - 48*cr0 + 2048) >> 12 ) + 16; Y1 = ( (219*y1 - 27*cb1 - 48*cr1 + 2048) >> 12 ) + 16; U = ( ( 228*(cb0+cb1) + 26*(cr0+cr1) + 4096) >> 13 ) + 128; V = ( ( 17*(cb0+cb1) + 230*(cr0+cr1) + 4096) >> 13 ) + 128;
AviUtl内部(YC48)はBT.601ベースになっているので BT.709 のYUY2で出力するには色域を変換する必要があります。変換に際して輝度Y0,Y1を求めるには色差情報も必要になります。で、左右の色差の平均を求めるタイミングが問題になります。
UVダウンサンプリングフィルタは色変換プラグインの前の AviUtl内部(YC48)のBT.601 ベースで行います。UVダウンサンプリングフィルタは左右のピクセルの色差を同じにします。そうすると色変換時に輝度Y0,Y1を求めるための色差も左右で同じになってしまいます。これによって最終的な輝度情報が少しだけ劣化しまうわけです。
というわけで、解決方法はないか何かと考えたら、AviUtl内部(YC48)もBT.709ベースにしたらどうかと思いついたわけです。そんなわけで「内部もBT.709」色変換プラグインを作った次第です。
コメント