サンプルスクリプト/ロゴの追加(3) のバックアップ差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

*概要 [#m19eb447]

サンプルスクリプト/ロゴの追加(2)同様、マスクを作成してから、[[Layer]]フィルタでロゴ画像をクリップの上に重ねます。

ただし、今回は[[Mask]]フィルタではなく、[[ColorKeyMask]]フィルタを使用します。鍵(Key)となる色(Color)を指定することによってマスク(Mask)を生成する、クロマキー((参考: [[クロマキー - マルチメディア/インターネット事典:http://www.jiten.com/dicmi/docs/k8/15778s.htm]]))風の合成です。

ColorKeyMaskフィルタはRGB32にのみ対応しているため、ソースクリップがRGB32でない場合は、[[ConvertToRGB32>Convert]]フィルタを使って変換するようになっています。

*スクリプト [#o45b23ed]

#code(nonumber){{
IsRGB32() ? last : ConvertToRGB32() # ソースクリップがRGB32では"ない"場合は、RGB32に変換
logo = ImageSource("ロゴ画像のパス") # ロゴ画像の読み込み
logo = ConvertToRGB32(logo) # logoをRGB32に変換。元々RGB32の場合は不要
logo = ColorKeyMask(logo, 色, 許容誤差) # マスク生成
Layer(last, logo, "add", x=数値, y=数値) # x,yはロゴの座標
}}

#br

*使用方法 [#s37e605e]

+スクリプト内の「ロゴ画像のパス」を追加したいロゴ画像のパスに変更します。
+透過させたい「色」(color)を16進数で指定します((16進数による色指定については、[[ColorPresets]]を参照。))。
+「色」の「許容誤差」(tolerance)を、0〜255までの整数値で指定します。
+ロゴの位置を決定するために、xとyの値を入力します。よくわからない場合は、とりあえず0に設定して、あとでプレビューしながら調整するといいでしょう。

*使用例 [#t1c7d402]

**ロゴ画像 [#l3636abb]

#ref(logo_purple.png)

上の画像((添付されている画像はPNGフォーマットですが、実際に使用したのはBMPフォーマットの画像です。))の紫色の部分が透明になるようにマスクを作成します。

この紫色の部分は、$ff00ff([R,G,B]=[255,0,255])の紫色(マジェンタ)で塗りつぶしてあります。そこで、ColorKeyMaskフィルタの「色」は、$ff00ffに設定します((AviSynthでは、#以降の行はコメント扱いされるため、16進数で色を指定したいときは、$記号を頭に付けます。))。

「許容誤差」は、とりあえず0(誤差なし)にしておいて、あとでプレビューしながら調整することにしましょう(省略不可)。

**スクリプト例 [#t4aeba06]

#code(nonumber){{
# ソースクリップ
ColorBars(320,240)
# ソースクリップがRGB32かどうかの判定
IsRGB32() ? last : ConvertToRGB32() # ソースクリップがRGB32では"ない"場合は、RGB32に変換
# Cドライブ -> [My Pictures]フォルダにあるlogo_purple.bmpを開いて、変数logoに代入
logo = ImageSource("C:\My Pictures\logo_purple.bmp") # ロゴ画像の読み込み
# logoをRGB32に変換
logo = ConvertToRGB32(logo) # logoをRGB32に変換。元々RGB32の場合は不要
# 色を$ff00ff(紫)、許容誤差を(とりあえず)0に設定
logo = ColorKeyMask(logo, $ff00ff, 0) # マスク生成
# logoをソースクリップのx=0,y=0の位置に重ねる
Layer(last, logo, "add", x=0, y=0) # x,yはロゴの座標
# return文
return last
}}

**プレビュー画面 [#l706b62d]

#ref(logo04_02_colorkeymask_xy_0.png)

上記のスクリプトを実行したところ。これを2倍に拡大すると、下の画像のようになります(([[IrfanView:http://www.irfanview.com/blank.htm]]のlanczosフィルタを使って、2倍に拡大しました。))。

#ref(logo04_03_tolerance_0_x2.png)

**許容誤差の調整 [#gfddb7d3]

上のサンプル画像を見ると、円の縁のあたりに、若干、紫色が残っているのがわかります。そこで、許容誤差の値を60に変更してみました(変更した部分のみ記載)。

#code(nonumber){{
# 色を$ff00ff(紫)に設定、許容誤差を60に変更
logo = ColorKeyMask(logo, $ff00ff, 60) # マスク生成
}}

これが変更後のスクリプトです。これを実行すると、

#ref(logo04_04_tolerance_60_x2.png)

まだ紫色は確認できますが、かなり目立たなくなりました。

ただし、あまり許容誤差の値を大きくしすぎると、関係ない範囲の色まで透明に設定されてしまうので、注意してください。

#ref(logo04_05_tolerance_200_x2.png)

許容誤差を200に設定した場合。紫色以外の部分まで、背景色が透けている。

**ColorKeyMaskによって生成されるマスク [#w6f7771c]

ShowAlphaフィルタを使って、ColorKeyMask適用後のロゴ画像のアルファチャンネルを表示したところ、次のような画像が得られました((許容誤差(tolerance)60の場合。))。

#ref(logo04_06_showalpha.png)

サンプルスクリプト/ロゴの追加(2)のマスク画像に似たアルファマスクが生成されているのがわかります。

* 今回、使用したフィルタ [#a949418c]

-[[Layer]]
-ColorKeyMask
-ImageSource
-[[ConvertToRGB32>Convert]]

* 関連ページ [#ffb3e4ac]

#ls2(サンプルスクリプト/ロゴ)