チュートリアル22

ビデオ出力コンポーネントを使用する


このチュートリアルでは、Jitter上でQuickTime互換のビデオ出力デバイス(例えばDVカメラ)に対して、コンピューターのアナログビデオ出力を介さずに、直接マトリクスや映像のシーケンスを送る方法について見ていきます。今回はjit.qt.videooutオブジェクトについて詳しく説明しますが、その出力の性能を見るためにjit.qt.movieオブジェクトについても再び触れます。

このチュートリアルのパッチの例は、DVカメラがコンピューターのFireWireポートに接続されていること、電源が入って、VTRモードになっていることを前提に書かれています。しかしここに書かれているテクニックはQuickTimeのビデオ出力コンポーネントをもったデバイスに対してであれば同じように使うことができます。


ラインの終端

jit.qt.videooutオブジェクトをJitterパッチの最終オブジェクトとして使用することで、最終的に処理されたJitterマトリックスを、直接ビデオ出力デバイスに送ることが出来ます。これは前のチュートリアルで見たjit.qt.grabオブジェクトの使い方と非常に似ている事が分かるでしょう。

jit.qt.grabjit.qt.videooutオブジェクトはどちらも動作をさせる前に、コンポーネントの使用を開始することが必要です。jit.qt.videooutオブジェクトの場合は、コンポーネントを使用することでビデオ出力デバイスに接続しています。そして前のチュートリアルにもあったように、jit.qt.videooutオブジェクトを使用する前に、使用可能なデバイスや出力モードのリストを作成し、そこから選択して設定をする作業が必要になります。既に一つ前のチュートリアルでjit.qt.grabオブジェクトでの設定方法の手順は分かっているので、jit.qt.videooutオブジェクトの設定方法は理解しやすいでしょう。

・Jitter Tutorialフォルダからチュートリアルパッチの22jVideoOutput.patを開いてください。


実行中のjit.qt.videoout

・dozer.movのメッセージボックスをクリックして例のムービーを開いてみてください。

少し待ってからパッチを見てみてください。ここまでの内容で、ムービーを変形する方法についてはいくつか知っているはずです:このパッチではjit.unpackオブジェクトを使用して、マトリックスから一つのプレーンを分離して、jit.opオブジェクトに送っています。jit.opオブジェクトとjit.rotaオブジェクトがお互いに名前を決めたマトリックスを使用して、パッチコードを使わずに、jit.rotaオブジェクトから出力されるマトリクスがjit.opオブジェクトの右側の入力マトリクスになっている事に気づくでしょう。そうです。ここで素晴らしいJitterのフィードバックループが行われています。

metroオブジェクトの上のトグルボックスをオンにしてパッチの処理を開始させてください。 jit.qt.videooutは何の効果もないように見える事に気づくでしょう。このオブジェクトはopenメッセージを受信するまで、単にインレットから入ってきたマトリックスをアウトレットに送って通過させるだけです。今はまだopenメッセージボックスをクリックしないでください。その前に設定しなくてはいけない事があるのです。

・getvoclistと書かれたメッセージボックスをクリックしてみてください。getvoclistメッセージをjit.qt.videooutオブジェクトに送ると、右アウトレットから、シンボルvoclistに続く形でメッセージのリストが出力されます。このリストに含まれているのは、それぞれ使用可能なビデオ出力コンポーネント(video output component)です。短縮形でvocと表します。この使用可能な出力コンポーネントのリストはroute オブジェクト、iterオブジェクトを通って、左側のubumenuに入ります。そして簡単にそこから選択して設定する事が出来るようになります。私達の環境では、リストはFireWireの一つだけでした。

ビデオ出力コンポーネントがMacOSに登録されているなら、そのデバイスの機材が使用不可能な時でもvoclistでリストアップされ、そしてそれを選択することも出来ます。使用可能な機材が一つも無い時、 jit.qt.videooutオブジェクトにマトリックスを送ると、このオブジェクトはMaxウィンドウに-200 Errorを出力します。

ubumenuからFireWire出力コンポーネントを選択してください。選択すると項目のインデックス番号(ubumenuの項目のインデックス番号と、jit.qt.videooutの中の出力コンポーネントの番号は同じになります)がvox $1メッセージボックスを経て、jit.qt.videooutオブジェクトに伝えられます。何も選択していなかった場合、初期状態で、リストの最初の項目が使用される事になります。これはjit.qt.videoout にvoc 0のメッセージを送るのと同じ事です。

・getvocmodesと書かれたメッセージボックスをクリックして選択した出力コンポーネントで使用可能なモードのリストを取得してください。得られたリストはシンボルvocmodesに続く形でrouteオブジェクト、 iterオブジェクトを通って、右側のubumenuに入ります。私達のリストはApple FireWire NTSCとApple FireWire PALの2つの項目でした。

ubumenuから使用したい出力モードを選択してください。この選択には使用するFireWire機器の種類が関わってきます。私達の場合は使用しているカメラがNTSCのものなので、Apple FireWire NTSCモードを使用します。選択すると項目のインデックス番号(ubumenuの項目のインデックス番号と、 jit.qt.videooutの中の出力モードの番号は同じになります)がvoxmode $1メッセージボックスを経て、 jit.qt.videooutオブジェクトに伝えられます。何も選択していなかった場合、初期状態で、リストの最初の項目が使用される事になります。これはjit.qt.videooutにvocmode 0のメッセージを送るのと同じ事です。

・これで出力デバイスにデータを送るための準備が整いました。openメッセージボックスをクリックしてコンポーネントの使用を開始してください。少し待つと、パッチの中のjit.pwindowに表示されているものと同じ映像が、デバイスのディスプレイに映し出されるはずです。

Maxウィンドウにエラーが表示される、またはデバイスのディスプレイに何も表示されない場合は、デバイスがスリープモードになっていないかチェックしてみてください。

・出力に関する他の要素もコントロールする事が出来ます。使用する特定のcodecは、使用する機材に依存して決まります(例えば、Apple FireWireは常に出力にApple DV codecを使用します)。しかし、出力時のcodecのクオリティに関してはコントロールする事が可能です。codecquality $1のメッセージボックスの上のubumenuでいくつかの項目を選択して、出力デバイスの表示を比べてみてください。Minimum Quality (codecquality 0)や、Low Quality(codecquality 1)を選択すると多少画質が劣化する代わりに、表示の速度が改善できるはずです。標準はNormal Quality(codecqualityn 2)です。

ただ通過させるだけの場合

もし、ディスクドライブから直接出力デバイスに送りたい場合で、しかもJitterではそのデータに対してどんな処理もしたくない場合には、jit.qt.movieオブジェクトが使えます。この機能は、ディスクにあるムービーがすでに使用するビデオ出力コンポーネントに適切なフォーマットである時等に使用したくなることが多いでしょう。例えば、あなたがFireWire出力デバイスを使っていたら、ファイルはすでにApple DV codecの標準的なイメージ解像度とフレームレートで圧縮されているはずです。


出力コンポーネントをjit.qt.movieで使用する

出力コンポーネントをjit.qt.movieオブジェクトで使用していても、jit.qt.videooutオブジェクトの時と大きな違いは見られません。しかし、一つだけ重要な違いがあるのです。

jit.qt.movieオブジェクトはopenやcloseといったメッセージを必要としません。jit.qt.movieオブジェクトに、アーギュメントとして0以上の数値をつけたvocメッセージを送るとコンポーネントの使用が開始します。そしてコンポーネントの使用を停止してjit.qt.movieを通常の動作に戻すには、voc -1メッセージを送ります。vocメッセージのアーギュメントは、jit.qt.videooutの時と同じように、出力コンポーネントを指定しています。

それ以外では、2つのオブジェクトのビデオ出力コンポーネントへのアクセスの仕方は同じです。

・readと書かれたメッセージボックスをクリックして、DVエンコードのQuickTimeムービーをディスクから読み込んでください。これらのファイルは普通、ファイル名の後ろに.dvという拡張子がついています。これらのムービーは一般にサイズが大きいので、チュートリアルのパッケージにはサンプルファイルを含めませんでした。もしあなたのコンピューターにApple iMovieが入っているなら、iMovieのTutorialフォルダにDV ムービーのサンプルがあります。

metroについているトグルオブジェクトをクリックしてください。jit.pwindowに読み込んだムービーが表示されるでしょう。ここで、フレームがとびとびに表示されている事に気づくかもしれません。それは、DVムービーが巨大なデータを持っているからです。心配しないでください−ビデオ出力コンポーネントに切り替えれば再生は改善します。

テクニカルノート:ビデオ出力コンポーネントに切り替えると再生が改善しますが、その理由はソフトウェアでの解凍をしなくなるからです。ソフトウェアの部分は単純に通過させて、直接デバイスハードウェアにデータを送ってしまい、データの解凍をデバイス側で行っているのです。

・getvoclostとgetvocmodesのメッセージボックスとubumenuオブジェクトを使って、前の章で行ったようにデバイスと出力モードを選択してください。(voc $1メッセージボックスを経て)出力デバイスを設定すると、jit.pwindowへのムービーの再生が止まり、選択したデバイスのディスプレイに再生されるはずです。使用するDVムービーがサウンドを含む場合は、サウンドも出力デバイスで再生されるでしょう。ムービーが出力デバイスに対して適切にエンコードされていれば、再生はスムーズに行われるはずです。

・voc -1と書かれたメッセージボックスをクリックして出力コンポーネントの使用を停止してください。再生は通常のモードに戻り、jit.pwindowに再び表示されます。

重要:DVムービーが通常で720x480の解像度を持っているのに対し、今回のjit.qt.movieオブジェクトの大きさが320x240である事に疑問を持つ方もいるかもしれません。出力先を出力コンポーネントに切り替えると、ムービーはjit.qt.movieオブジェクトの大きさの設定とは関係なく、もとのサイズのまま、選択した出力デバイスに送られます。


まとめ

jit.qt.videooutオブジェクトを使うことで、処理したJitterのデータをFireWireを通じて、QuickTime のビデオ出力コンポーネントでサポートされている(例えばDVカメラのような)デバイスに直接送ることが出来ます。適切なエンコードがされているQuickTimeムービーを、Jitterで処理をしないでディスクドライブから直接、出力デバイスに送りたい場合、vocメッセージをjit.qt.movieオブジェクトに送る事によって可能になります。