/**/

チュートリアル 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

read dozer.movというメッセージボックスをクリックしてサンプルムービーを読み込んで下さい。

少し待ってからパッチを見て下さい。ここまでの内容で、ムービーを変形する処理には慣れてきたこととと思います。このパッチでは jit.unpack オブジェクトを使って、マトリックスから1つのプレーンを分離し、jit.opオブジェクトに送っています。ここでは、jit.opオブジェクトと jit.rota オブジェクトが、名前付きのマトリックスを使って、jit.rotaオブジェクトから出力されるマトリックスが jit.opオブジェクトの右側の入力マトリックスになる形でのデータのやり取りをパッチコードなしで行なっていることに気がつくと思います。まさに、洗練された Jitterのフィードバックループが行なわれています。

訳注:jit.op オブジェクトのオブジェクトボックスに書かれている @in2_name grendel というアトリビュートの指定は「glendel という名前のマトリックスを(左から数えて)2番目の入力用マトリックスとして使用する」ことを意味しています。これは、マトリックスオペレータと呼ばれる Jitter オブジェクトに共通した機能を使ったものです。詳細は、Jitter に付属する HTML版リファレンスの「Matrix Operator を参照して下さい。

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

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

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

ubumenuからFireWire出力コンポーネントを選択して下さい。選択すると項目のインデックスナンバー(ubumenuの中の項目の位置と同じです)が vox $1というメッセージボックスから、jit.qt.videooutオブジェクトに送られます。何も選択しない場合には、リストの最初の項目がデフォルトのコンポーネントとして使用されます。これは jit.qt.videooutvoc 0 というメッセージを送ることと同じです。

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

ubumenu から使用したい出力モードを選択して下さい。この選択には使用するFireWire機器の種類が関わってきます。私たちの場合は、NTSCのカメラを使用しているため、Apple FireWire NTSCモードを使用します。選択を行なうと、項目のインデックスナンバー(ubumenu の中の項目の位置と同じです)が 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オブジェクトの場合と大きな違いは見られません。しかし、1つだけ重要な相違点があります。

jit.qt.movie オブジェクトは openclose といったメッセージを使用しません。 jit.qt.movieオブジェクトに、アーギュメントとして 0 より大きい値を持った voc メッセージを送信すると、コンポーネントとの接続を開き、voc -1 というメッセージを送信すると、コンポーネントとの接続を閉じて jit.qt.movie の通常の動作に戻ります。vocメッセージのアーギュメントは、jit.qt.videoout と同様に出力コンポーネントを指定します。

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

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

metro に接続されている toggle オブジェクトをクリックして下さい。jit.pwindow に読み込んだムービーが表示されます。このとき、表示されるムービーのフレームにコマ落ちが生じていることに気づく場合があるかもしれません。これは、DVムービーが巨大なデータを持っているためですが、心配はいりません。ビデオ出力コンポーネントに切り替えると、再生状態は改善します。

技術的な注:ビデオ出力コンポーネントに切り替えると再生が改善しますが、その理由は、表示される前にソフトウェアでの復元を行なわないためです。データは、直接ハードウェアに送られ、(必要ならば)そこで処理されます。

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

voc -1と書かれたメッセージボックスをクリックして、出力コンポーネントとの接続を解除して下さい。再生は通常のモードに戻り、再び jit.pwindow に表示が行なわれます。

重要:通常、DVムービーは 720x480 の解像度を持っていますが、ここで生成されている jit.qt.movie オブジェクトのディメンションは 320x240 になっていることに気がついたかもしれません。出力コンポーネントに切り替えると、 jit.qt.movie オブジェクトの出力マトリックスのディメンションとは関係なく、ムービーは元のサイズのままで選択した出力デバイスに送られます。

まとめ

jit.qt.videoout オブジェクトによって、QuickTime のビデオ出力コンポーネントでサポートされているDVカメラのなどのデバイスに、FireWireを経由して、Jitterで処理を行なわれたデータを直接送ることができます。Jitterによる処理を行なわずに、適切にエンコードされたQuickTimeムービーを、ディスクから直接に出力デバイスに送りたい場合には、jit.qt.movie オブジェクトにvocメッセージを送信します。