EffecTV

URL: https://www.effectv.dev/
ライセンス: GPL

概要

EffecTV はリアルタイムに動作するビデオエフェクターソフトウェアとして、2001年に公開された。ビデオカメラに写っているものに対してリアルタイムに映像効果を付加し、ディスプレイに映し出すことができる。

ビデオイフェクトというと、ビデオ編集ソフトではよくあるものだが、こうしたソフトウェアではレンダリングに時間がかかり、結果を即座に得ることはできない。そのため、ビデオカメラの前で体を動かしながら、イフェクトのかかり具合を試す、というようなやり方は難しい。 EffecTV ではこうした時間の遅延をいっさいなくし、すぐに効果が表われるため、実際にカメラの前で体を動かして、効果を目で見ることができる。

元々はライブ演奏でのステージ用映像作りのために作られたツールで、ステージ上のカメラでバンドの演奏を撮りながらその映像に効果を乗せてすぐステージに流すという使い方がされていた。今でも VJ 用途でたまに使われている。

リアルタイムイフェクト

EffecTV 自体は、ビデオイフェクトの内容に特化した作りになっており、パラメタの細かな調整ができるとか動画ファイルを生成するなどの機能はまったくサポートされていない。ツールと呼ぶにはあまりにも低機能だ。幸いなことに、EffecTV 発表以降、同じようなリアルタイムビデオイフェクトを可能にしたソフトウェアが、オープンソース/クローズドソース問わず多数発表されているため、より高度なことはそうしたソフトウェアを使ってできるようになった。また、EffecTV に収録されているビデオイフェクトは、多くのソフトウェアに移植されている。

プログラマ向け情報

image

EffecTV は、ビデオからの入力に Video4Linux を、画面への出力に SDL を使う。EffecTV のメイン部分は映像の入出力とキー入力の面倒を見ており、各イフェクトは基本的に、ビットマップとして渡される入力画像に映像効果を加えて、再びビットマップとして出力するだけの処理を行う。あとはキー入力に対する反応だけ書けばよい。これだけで新たなイフェクトを作ることができるため、非常に簡単に自作イフェクトを試すことができるようになっている。例えば右の “QuarkTV” のイフェクト部分のコードは次のようになっている。

    static int draw(RGB32 *src, RGB32 *dest)
    {
            int i;
            int cf;

            memcpy(planetable[plane], src, video_area * PIXEL_SIZE);

            for(i=0; i<video_area; i++) {
                    cf = (inline_fastrand()>>24)&(PLANES-1);
                    dest[i] = (planetable[cf])[i];
                    /* The reason why I use high order 8 bits is written in utils.c
                    (or, 'man rand') */
            }

            plane--;
            if(plane<0)
                    plane = PLANES - 1;

            return 0;
    }

初期化さえ済んでしまえば、実行中はこの draw() という関数が繰り返し呼ばれるだけだ。

他アプリケーションとの連携

EffecTV が提供する面白い機能の一つに、映像出力を他のビデオアプリケーションで使える、というものがある。これは vloopback と呼ばれるモジュールを使って実現しており、これを使うと、アプリケーションで仮想的な Video4Linux デバイスを演じることができ、 他のアプリケーションは通常の Video4Linux にアクセスするのとまったく同じやり方で、その仮想 Video4Linux から映像を取り込むことができる。 このため、EffecTV の複数の映像効果を重ねたい場合には EffecTV どうしを vloopback でつないでやればよい。 また、vic のようなビデオ会議アプリケーションに EffecTV からの映像を流すこともできる。

関連