サンプルスクリプト/ロゴの追加(3)
概要 †
サンプルスクリプト/ロゴの追加(2)同様、マスクを作成してから、Layerフィルタでロゴ画像をクリップの上に重ねます。
ただし、今回はMaskフィルタではなく、ColorKeyMaskフィルタを使用します。鍵(Key)となる色(Color)を指定することによってマスク(Mask)を生成する、クロマキー*1風の合成です。
ColorKeyMaskフィルタはRGB32にのみ対応しているため、ソースクリップがRGB32でない場合は、ConvertToRGB32フィルタを使って変換するようになっています。
スクリプト †
IsRGB32() ? last : ConvertToRGB32() # ソースクリップがRGB32では"ない"場合は、RGB32に変換 logo = ImageSource("ロゴ画像のパス") # ロゴ画像の読み込み logo = ConvertToRGB32(logo) # logoをRGB32に変換。元々RGB32の場合は不要 logo = ColorKeyMask(logo, 色, 許容誤差) # マスク生成 Layer(last, logo, "add", x=数値, y=数値, level=255) # x,yはロゴの座標
使用方法 †
- スクリプト内の「ロゴ画像のパス」を追加したいロゴ画像のパスに変更します。
- 透過させたい「色」(color)を16進数で指定します*2。
- 「色」の「許容誤差」(tolerance)を、0〜255までの整数値で指定します。
- ロゴの位置を決定するために、xとyの値を入力します。よくわからない場合は、とりあえず0に設定して、あとでプレビューしながら調整するといいでしょう。
- levelの値を調節することで、ロゴを半透明化することができます(サンプルスクリプト/ロゴの追加(1)を参照)。
使用例 †
ロゴ画像 †
上の画像*3の紫色の部分が透明になるようにマスクを作成します。
この紫色の部分は、$ff00ff([R,G,B]=[255,0,255])の紫色(マジェンタ)で塗りつぶしてあります。そこで、ColorKeyMaskフィルタの「色」は、$ff00ffに設定します*4。
「許容誤差」は、とりあえず0(誤差なし)にしておいて、あとでプレビューしながら調整することにしましょう(省略不可)。
スクリプト例 †
ColorBars(320,240) # ソースクリップ #//--- ここからサンプルスクリプト ---// IsRGB32() ? last : ConvertToRGB32() # ソースクリップがRGB32では"ない"場合は、RGB32に変換 logo = ImageSource("C:\My Pictures\logo_purple.bmp") # ロゴ画像の読み込み logo = ConvertToRGB32(logo) # logoをRGB32に変換。元々RGB32の場合は不要 logo = ColorKeyMask(logo, $ff00ff, 0) # マスク生成 Layer(last, logo, "add", x=0, y=0, level=255) # x,yはロゴの座標 #//--- ここまでサンプルスクリプト ---// return last
ロゴ画像のパス、色、許容範囲とx, yの値を変更しています。
プレビュー画面 †
上記のスクリプトを実行したところ。これを2倍に拡大すると、下の画像のようになります*5。
許容誤差の調整 †
上のサンプル画像を見ると、円の縁のあたりに、若干、紫色が残っているのがわかります。そこで、許容誤差の値を60に変更してみました(変更した部分のみ記載)。
# 色を$ff00ff(紫)に設定、許容誤差を60に変更 logo = ColorKeyMask(logo, $ff00ff, 60) # マスク生成
これが変更後のスクリプトです。これを実行すると、
まだ紫色は確認できますが、かなり目立たなくなりました。
ただし、あまり許容誤差の値を大きくしすぎると、関係ない範囲の色まで透明に設定されてしまうので、注意してください。
許容誤差を200に設定した場合。紫色以外の部分まで、背景色が透けている。
ColorKeyMaskによって生成されるマスク †
ShowAlphaフィルタを使って、ColorKeyMask適用後のロゴ画像のアルファチャンネルを表示したところ、次のような画像が得られました*6。
サンプルスクリプト/ロゴの追加(2)のマスク画像に似たアルファマスクが生成されているのがわかります。
今回、使用したフィルタ †
- Layer
- ColorKeyMask
- ImageSource
- ConvertToRGB32
関連ページ †
*1 参考: クロマキー - マルチメディア/インターネット事典
*2 16進数による色指定については、ColorPresetsを参照。
*3 添付されている画像はPNGフォーマットですが、実際に使用したのはBMPフォーマットの画像です。
*4 AviSynthでは、#以降の行はコメント扱いされるため、16進数で色を指定したいときは、$記号を頭に付けます。
*5 IrfanViewのlanczosフィルタを使って、2倍に拡大しました。
*6 許容誤差(tolerance)60の場合。