Project N: 005-BlankClip(ベタクリップの作成)
次に、背景となるビデオクリップを作成して、その背景の上に画像を合成することにします。
前回読み込んだ画像は、いったん脇に置いておきます。
さて、背景を作成するといっても、「1枚の画像から・・・」と言ってしまった以上、別の画像を使うわけにはいきません。
というよりも、別の画像を描くのが面倒だったりするのですが・・・。
そこで、BlankClipフィルタを使って、単色べた塗りのビデオクリップを作成することにします。
BlankClipフィルタの書式は、次の通りです。
引数の説明:
補足(1):
fps_denominatorは、fpsで設定したフレームレートが正確でない場合に使用します。
fps=30000, fps_denominator=1001なら、30000/1001=29.97fpsとなります。
(追記):
fps_denominatorのデフォルトは1なので、fps=29.97として、fps_denominatorを指定しなかった場合、29.97/1=29.97fpsとなります。
補足(2):
templateを指定すると、templateのクリップと同じ属性(フレームレートや色空間などが同じ)のクリップが作成されます。
たとえば、前回の画像をtemplateとして使用する場合、次のように記述します。
1行目で変数を指定していませんので、templateにはlastを代入します。

すると、このようなクリップが作成されます。

ファイル情報を見ると、templateに使用した画像と同じであることがわかります。
colorは指定していないので、デフォルトの黒になっていますが、colorパラメータを追加指定することも可能です。
たとえば、color=$ff0000とすると、赤のクリップが、

color=$0000ffとすると、青のクリップが作成されます。

BlankClipがどのようなフィルタであるか、だいたいわかってきましたね。
では、実際に背景のクリップを作ることにしましょう。
・・・。
どういうクリップにすればいいのか思いつかないので、デフォルトのままにします。
だって、引数が多いんだも~ん(笑)

とりあえず、これで行ってみることにします。
いつも適当ですみません(笑)
なお、BlankClipと同等の機能をもつフィルタに、Blacknessがあります。
(追記):
BlankClipとBlacknessは、名前が違うだけで、中身は一緒です。
上のリンク先にも、「Blacknessは、BlankClipの別名(alias)」と書かれています。
つまり、「Blackness(color=$ff0000)」とすれば、BlacknessなのにRednessな(?)クリップを作ることも可能です。
詳しくは、マニュアル参照。
前回読み込んだ画像は、いったん脇に置いておきます。
さて、背景を作成するといっても、「1枚の画像から・・・」と言ってしまった以上、別の画像を使うわけにはいきません。
というよりも、別の画像を描くのが面倒だったりするのですが・・・。
そこで、BlankClipフィルタを使って、単色べた塗りのビデオクリップを作成することにします。
BlankClipフィルタの書式は、次の通りです。
BlankClip(clip template, int length, int width, int height, string pixel_type, int fps, int fps_denominator, int audio_rate, bool stereo, bool sixteen_bit, int color)
引数の説明:
- template: テンプレート。
- length: 長さ(フレーム数)。
- width, height: 幅, 高さ。
- pixel_type: 色空間("RGB24", "RGB32", "YUY2" or "YV12")。
- fps: フレームレート。
- fps_denominator: フレームレートの分母。
- audio_rate: 音声のサンプリング周波数。
- stereo: ステレオかモノラルかの選択。
- sixteen_bit: 16bitかどうか(templateが16bitなら、falseでも16bit)。
- color: クリップの色(デフォルトは$000000(黒))。
補足(1):
fps_denominatorは、fpsで設定したフレームレートが正確でない場合に使用します。
fps=30000, fps_denominator=1001なら、30000/1001=29.97fpsとなります。
(追記):
fps_denominatorのデフォルトは1なので、fps=29.97として、fps_denominatorを指定しなかった場合、29.97/1=29.97fpsとなります。
補足(2):
templateを指定すると、templateのクリップと同じ属性(フレームレートや色空間などが同じ)のクリップが作成されます。
たとえば、前回の画像をtemplateとして使用する場合、次のように記述します。
ImageReader("C:\My Documents\nyatrix\img\nyatrix.png", 0, 0, 24, false)
BlankClip(last)
1行目で変数を指定していませんので、templateにはlastを代入します。

すると、このようなクリップが作成されます。

ファイル情報を見ると、templateに使用した画像と同じであることがわかります。
colorは指定していないので、デフォルトの黒になっていますが、colorパラメータを追加指定することも可能です。
BlankClip(last, color=$000000)
たとえば、color=$ff0000とすると、赤のクリップが、

color=$0000ffとすると、青のクリップが作成されます。

BlankClipがどのようなフィルタであるか、だいたいわかってきましたね。
では、実際に背景のクリップを作ることにしましょう。
・・・。
どういうクリップにすればいいのか思いつかないので、デフォルトのままにします。
だって、引数が多いんだも~ん(笑)
BlankClip()

とりあえず、これで行ってみることにします。
いつも適当ですみません(笑)
なお、BlankClipと同等の機能をもつフィルタに、Blacknessがあります。
(追記):
BlankClipとBlacknessは、名前が違うだけで、中身は一緒です。
上のリンク先にも、「Blacknessは、BlankClipの別名(alias)」と書かれています。
つまり、「Blackness(color=$ff0000)」とすれば、BlacknessなのにRednessな(?)クリップを作ることも可能です。
詳しくは、マニュアル参照。
Project N: 004-FlipVertical/FilpHorizontal(画像の反転)
ImageReaderで画像を読み込んだ時、しばしば画像の天地が反転することがあります。

こんな感じです。
これは(たぶん)、AviSynth2.5.4で読み込んだ時の画像です。
AviSynth2.5.5 alpha(AVS 2.5.5 alpha [170604])では、反転しませんでした。
LoadVFAPIPluginフィルタで、VFAPIプロジェクトファイル(*.tpr, *.aupなど)を読み込んだときにも同様の現象が見られます。
なぜ、こうなるのか・・・は、わかりません(汗)
まるも製作所さんの2004年6月3日の日記あたりが参考になるかもしれません。
さて、このように上下が反転したビデオクリップを正しい位置に戻すことができるフィルタがあります。
FlipVerticalフィルタです。
正確には、画像の上下を反転させるフィルタと言ったほうがいいでしょうか?
反転している画像を、さらに反転させることで、正しい方向に戻すことができるのです。
FlipVerticalの書式は次の通りです。
引数はclip型のclipだけです。
ですから、前回のスクリプトに「FlipVertical()」と続けるだけで、OKです(※)。
このように修正したら、スクリプトを保存して、再読込します(VirtualDubModの場合、[F2] -> [F5](または[F5]のみ)。

こんな感じになります。
ちなみに、画像を左右に反転させるフィルタに、FlipHorizontalがあります。こちらは、AviSynth2.5から登場しました。
※変数を指定していないので、直前のクリップにはlastという特別な変数が割り当てられ、そのlastは省略可能であるからです。

こんな感じです。
これは(たぶん)、AviSynth2.5.4で読み込んだ時の画像です。
AviSynth2.5.5 alpha(AVS 2.5.5 alpha [170604])では、反転しませんでした。
LoadVFAPIPluginフィルタで、VFAPIプロジェクトファイル(*.tpr, *.aupなど)を読み込んだときにも同様の現象が見られます。
なぜ、こうなるのか・・・は、わかりません(汗)
まるも製作所さんの2004年6月3日の日記あたりが参考になるかもしれません。
さて、このように上下が反転したビデオクリップを正しい位置に戻すことができるフィルタがあります。
FlipVerticalフィルタです。
正確には、画像の上下を反転させるフィルタと言ったほうがいいでしょうか?
反転している画像を、さらに反転させることで、正しい方向に戻すことができるのです。
FlipVerticalの書式は次の通りです。
FlipVertical(clip clip)
引数はclip型のclipだけです。
ですから、前回のスクリプトに「FlipVertical()」と続けるだけで、OKです(※)。
ImageReader("C:\My Documents\nyatrix\img\nyatrix.png", 0, 0, 24, false)
FlipVertical()
このように修正したら、スクリプトを保存して、再読込します(VirtualDubModの場合、[F2] -> [F5](または[F5]のみ)。

こんな感じになります。
ちなみに、画像を左右に反転させるフィルタに、FlipHorizontalがあります。こちらは、AviSynth2.5から登場しました。
※変数を指定していないので、直前のクリップにはlastという特別な変数が割り当てられ、そのlastは省略可能であるからです。
Project N: 003-VirtualDubModのエディタで新規avs作成
そうこうしているうちに、前回から一週間。
AviSynth.orgが復活。そして、ImageReaderのページが消滅・・・。
といっても、ImageReader自体は最新のα版(170604)でも使えるようですし、たぶんフィルタ自体がなくなってしまうことはないと思う・・・のですが。でも今後は、ひょっとして「静止画読み込み=ImageSource」的な方向で行くのかな?何の根拠もない話です。
ImageSourceフィルタはImageReader+α的なものらしいので、ここではImageReaderを使って、話を進めることにします。
ちなみに、ImageSourceは、v2.5.5のα版(170604)でも使えます。
さて、では実際に、私が描いたへっぽこ画像を読み込んでみましょう。今回は、VirtualDubModのスクリプトエディタを使って、新規AVSファイルを作成することにします。
VirtualDubModを起動したら、メニューの[Tools] -> [Script Editor]から、スクリプト・エディタを開きます。

こんな感じで記述します。書式については、前回を参照のこと。ただし、(少なくとも)ImageSourceフィルタに関しては、新たにinfoパラメータが追加されています。
上のスクリプトついて簡単に説明しておくと、左から順に、nyatrix.pngというファイルを読み込んで、0フレームから0フレームまでの範囲(つまり、フレーム番号0の1フレームしかない動画?)で、フレームレートは24fps、DevILライブラリは使用しない(false)、といった感じになります。
今回は「1枚の画像から・・・」というコンセプトでやっていますので、このようなスクリプトになりました。
などとして、1枚の画像を繰り返すこともできますし(この場合、99番フレームまでの、つまり0から99までの合計100フレームの動画ができる)、連番ファイルを読み込むことも可能です(マニュアル参照)。
スクリプトが出来たら、これを保存します。
ちなみに、スクリプトに間違いがあると、VirtualDubModが強制終了したりすることもありますので、くれぐれもスクリプトに間違いがないことを確認してから保存してください。
そういう点では、まずはメモ帳でスクリプトを作成したほうが無難かもしれません(だったら、やるなよw)。

スクリプト・エディタのメニューから、[Save & Open as AVI]を選択し、適当な名前を付けて保存します。拡張子は*.avsです。

すると、このようにVirtualDubModのプレビュー画面に、画像が表示されます。

VirtualDubModの[File Information]を見てみると、このようになっています。
ところで上のサンプル画像を見てもらえばわかるように、ImageReaderで画像を読み込むと、天地がひっくり返ることがあります。
次回は、これを正しい方向に戻すフィルタを紹介します。
スクリプト入門を読んだ人は、すでに馴染みのあのフィルタです。
では、また次回。
AviSynth.orgが復活。そして、ImageReaderのページが消滅・・・。
といっても、ImageReader自体は最新のα版(170604)でも使えるようですし、たぶんフィルタ自体がなくなってしまうことはないと思う・・・のですが。でも今後は、ひょっとして「静止画読み込み=ImageSource」的な方向で行くのかな?何の根拠もない話です。
ImageSourceフィルタはImageReader+α的なものらしいので、ここではImageReaderを使って、話を進めることにします。
ちなみに、ImageSourceは、v2.5.5のα版(170604)でも使えます。
さて、では実際に、私が描いたへっぽこ画像を読み込んでみましょう。今回は、VirtualDubModのスクリプトエディタを使って、新規AVSファイルを作成することにします。
VirtualDubModを起動したら、メニューの[Tools] -> [Script Editor]から、スクリプト・エディタを開きます。

ImageReader("C:\My Documents\nyatrix\img\nyatrix.png", 0, 0, 24, false)
こんな感じで記述します。書式については、前回を参照のこと。ただし、(少なくとも)ImageSourceフィルタに関しては、新たにinfoパラメータが追加されています。
上のスクリプトついて簡単に説明しておくと、左から順に、nyatrix.pngというファイルを読み込んで、0フレームから0フレームまでの範囲(つまり、フレーム番号0の1フレームしかない動画?)で、フレームレートは24fps、DevILライブラリは使用しない(false)、といった感じになります。
今回は「1枚の画像から・・・」というコンセプトでやっていますので、このようなスクリプトになりました。
ImageReader("C:\My Documents\nyatrix\img\nyatrix.png", end = 99)
などとして、1枚の画像を繰り返すこともできますし(この場合、99番フレームまでの、つまり0から99までの合計100フレームの動画ができる)、連番ファイルを読み込むことも可能です(マニュアル参照)。
スクリプトが出来たら、これを保存します。
ちなみに、スクリプトに間違いがあると、VirtualDubModが強制終了したりすることもありますので、くれぐれもスクリプトに間違いがないことを確認してから保存してください。
そういう点では、まずはメモ帳でスクリプトを作成したほうが無難かもしれません(だったら、やるなよw)。

スクリプト・エディタのメニューから、[Save & Open as AVI]を選択し、適当な名前を付けて保存します。拡張子は*.avsです。

すると、このようにVirtualDubModのプレビュー画面に、画像が表示されます。

VirtualDubModの[File Information]を見てみると、このようになっています。
画像サイズ:140x180
フレームレート:24
フレーム数:1
色空間:RGB24
ところで上のサンプル画像を見てもらえばわかるように、ImageReaderで画像を読み込むと、天地がひっくり返ることがあります。
次回は、これを正しい方向に戻すフィルタを紹介します。
スクリプト入門を読んだ人は、すでに馴染みのあのフィルタです。
では、また次回。
Project N: 002-ImageReader
何はともあれ、まずは画像を読み込まないことには始まりません。
静止画像を読み込むことができるフィルタとして、AviSynthにはImageReaderフィルタがあります(v2.5.6から、同様のフィルタとして、ImageSourceが追加されるようです)。
ImageReaderは、AviSynth v2.5.2から登場したフィルタで、元々はWarpEnterprises氏作のImageSequenceプラグイン(ImageSequence/CoronaSequence)だったものを、内部フィルタとして取り入れたものです。
v2.5.5(AVS 2.5.5 alpha [170604])のマニュアルによると、書式は次の通りです。
2004-03-20版の2.5.5alphaから、fpsパラメータはint型ではなく、float型に変更になっているらしいのですが(こちらを参照)、ここではマニュアルの表記に従うことにします。
それとマニュアルでは、2つ目の引数はbeginとなっていますが、こちらはstartが正しいようなので、ここではstartとしておきます。
各引数について簡単にまとめると、このようになります。詳しくはマニュアルを読んでください。
少し補足。
マニュアルには、ImageReaderで読み込むことができる画像の種類は書かれていません。ただし、ImageWriter(画像を書き出すフィルタ)が対応しているフォーマットについては、次のように書いてあります。
ImageReaderも、これらのタイプの画像を読み込むことができる・・・かもしれません。
とりあえず、BMPとJPEGとPNGの3種類は、読み込むことができます。この3つは確認済みなので、間違いないです。
さて、そろそろF1も終盤へとさしかかって来るところなので、今回はこの辺りでおしまいにします(笑)。
次回は、このImageReaderフィルタを使って、実際に画像を読み込んでみましょう。
静止画像を読み込むことができるフィルタとして、AviSynthにはImageReaderフィルタがあります(v2.5.6から、同様のフィルタとして、ImageSourceが追加されるようです)。
ImageReaderは、AviSynth v2.5.2から登場したフィルタで、元々はWarpEnterprises氏作のImageSequenceプラグイン(ImageSequence/CoronaSequence)だったものを、内部フィルタとして取り入れたものです。
v2.5.5(AVS 2.5.5 alpha [170604])のマニュアルによると、書式は次の通りです。
ImageReader (string "file", int "start", int "end", int "fps", bool "use_devil")
2004-03-20版の2.5.5alphaから、fpsパラメータはint型ではなく、float型に変更になっているらしいのですが(こちらを参照)、ここではマニュアルの表記に従うことにします。
それとマニュアルでは、2つ目の引数はbeginとなっていますが、こちらはstartが正しいようなので、ここではstartとしておきます。
file: 読み込む画像。 start: 開始フレーム。 end: 終了フレーム。 fps: フレームレート。 use_devil: DevIL.dllを使用するかどうか。
※DevIL.dllは、AviSynthインストール時に、一緒にシステム・ディレクトリにコピーされます。
各引数について簡単にまとめると、このようになります。詳しくはマニュアルを読んでください。
少し補足。
マニュアルには、ImageReaderで読み込むことができる画像の種類は書かれていません。ただし、ImageWriter(画像を書き出すフィルタ)が対応しているフォーマットについては、次のように書いてあります。
*bmp, dds, ebmp*, jpg/jpe/jpeg, pal, pcx,
*png, pbm/pgm/ppm, raw, sgi/bw/rgb/rgba, tga, tif/tiff
ImageReaderも、これらのタイプの画像を読み込むことができる・・・かもしれません。
とりあえず、BMPとJPEGとPNGの3種類は、読み込むことができます。この3つは確認済みなので、間違いないです。
さて、そろそろF1も終盤へとさしかかって来るところなので、今回はこの辺りでおしまいにします(笑)。
次回は、このImageReaderフィルタを使って、実際に画像を読み込んでみましょう。
Project N: 001-新企画始動。
AviSynth関連のコンテンツがなくなるかも?とかいいながら、AviSynthを使った新企画始動です(笑)
いったいどういうことをやるのかと言いますと、ズバリ!「1枚の画像から15秒のCMを作る!!」です。
(°Д°)ハァ?
・・・えーっと、もう少しわかりやすく言うとですね、1枚の画像とAviSynthを使って、15秒の動画を作ってみよう、しかもこのサイトのCMを・・・という企画です。
実は、これ、「AviSynthスクリプト入門」の第4章として考えていたものなんです。
どのあたりが「スクリプト入門」なのかと言いますと、動画(スクリプト)を作る過程で関数を作ったり、フィルタの紹介をしたりといったことをしようかなと考えていたわけです。
実際には、半年くらい前から考えていた企画だったんですが、諸般の事情により、あわやお蔵入りの危機にありました(笑)
かなり長期の連載になりそうなのも、その一因だったんですが、ブログだったら気軽に書けそうかなと思い、ようやくスタートさせることができました。
ただし、まだ動画は影も形も・・・影の「か」くらいしか出来上がっていません。
見切り発車。頓挫必至。企画倒れか・・・。
気を取り直して・・・とりあえず、使用する画像は、これです。

適当ですみません(笑)
で、完成イメージ(実際には、すでに違ったものになってますが)。

一目でわかる(?)かと思いますが、マトリックス風をイメージしてます、一応。あくまでもイメージ(汗)
なぜ、今、マトリックス?企画したのが、レボリューションズの公開前後だったからかな、とか思い起こしてみる。たぶん、そんな感じです。
そろそろ、ユーロ2004のオランダ対チェコ戦が始まるので、今回はこのへんで。
いったいどういうことをやるのかと言いますと、ズバリ!「1枚の画像から15秒のCMを作る!!」です。
(°Д°)ハァ?
・・・えーっと、もう少しわかりやすく言うとですね、1枚の画像とAviSynthを使って、15秒の動画を作ってみよう、しかもこのサイトのCMを・・・という企画です。
実は、これ、「AviSynthスクリプト入門」の第4章として考えていたものなんです。
どのあたりが「スクリプト入門」なのかと言いますと、動画(スクリプト)を作る過程で関数を作ったり、フィルタの紹介をしたりといったことをしようかなと考えていたわけです。
実際には、半年くらい前から考えていた企画だったんですが、諸般の事情により、あわやお蔵入りの危機にありました(笑)
かなり長期の連載になりそうなのも、その一因だったんですが、ブログだったら気軽に書けそうかなと思い、ようやくスタートさせることができました。
ただし、まだ動画は影も形も・・・影の「か」くらいしか出来上がっていません。
見切り発車。頓挫必至。企画倒れか・・・。
気を取り直して・・・とりあえず、使用する画像は、これです。

適当ですみません(笑)
で、完成イメージ(実際には、すでに違ったものになってますが)。

一目でわかる(?)かと思いますが、マトリックス風をイメージしてます、一応。あくまでもイメージ(汗)
なぜ、今、マトリックス?企画したのが、レボリューションズの公開前後だったからかな、とか思い起こしてみる。たぶん、そんな感じです。
そろそろ、ユーロ2004のオランダ対チェコ戦が始まるので、今回はこのへんで。



