OpenGLレコーディング

OpenGLのフィードバックに続いて、今回はOpenGLのレコーディング、つまり、OpenGLの描画を記録してムービー・ファイルにする方法です。実は、3月に映像作品の上映が予定されていて、これがなんと初体験のDVD納品(=ノン・インタラクティブ)なものだがら、いろいろと研究しているところです。フツーの映像作家や音楽家にとっては簡単なことが、インタラクティブ系の人には面倒だったりしますが、これはその典型ですね。

というわけで、学生クエストならぬ自分クエストであるOpenGLのレコーディングとして、4つの方法を考えました(他にもあったら教えてね)。

(1) 自力でパッチを作成する。
(2) 他人様のパッチを利用する。
(3) スクリーン・キャプチャを使う。
(4) スキャン・コンバータを使う。

(1)の自力作成に関しては、要はOpenGLが描画した画像をマトリックスにすれば、jit.qt.recordでムービー化できるわけですね。具体的なパッチは次のようになります。ダウンロードはこれopengl-recordingpat.zipです。

opengl-recording.gif

このパッチのように、jit.gl.sketchにglreadpixelsメッセージを送っておけば、アーギュメントで指定した名前のjit.matrixからマトリックスを取り出すことができます。ただし、OpenGLとマトリックスはY軸の方向が逆なので、jit.resampなどを使って画像を上下反転する必要があります。

あとはjit.qt.recordでムービーに書き出すだけですけど、qmetroの時間間隔やリアルタイム録画の可否、そしてwriteメッセージでのフレーム・レートを適切に設定する必要があります。変な設定だと、妙に動きが速いムービーになったり、必要以上にファイル・サイズが大きなムービーになっちゃいますよ。このあたりのことは2061:Maxオデッセイ(p.781)参照ね。

ちなみに、jit.qt.videooutでDVテープに記録してもいいですね(同書p.789)。それから、jit.gl.textureにtomatrixメッセージを送って、テクスチャーをマトリックス化できるハズなのですが、私の環境ではうまくいきません。なんでかな? あと、OpenGLフィードバックにも書いたように、ソフトウェア・レンダリング(同書p.839)は処理速度の面で不利な場合が多いと思います。さらに、jit.desktopという反則スレスレ技もありますけど、これも処理速度が遅いのが難点です(同書p.851)。

(2)の他人様のパッチというのは、Randy Jones氏(C74の開発スタッフの一人)が作成したrender_nodeのことです(他にもあるかな?)。

このパッチの特徴は、ノン・リアルタイム処理として、OpenGLの描画を1フレームずつ描きながら、ムービー・ファイルに保存してくれることです。なので、HD画像であろうが、オブジェクトが100万個あろうが、コマ落ちすることなく完璧なムービーを作ってくれます(ホント?)。さらには、動画を自然に見せるモーション・ブラーをかける機能があり、オーディオとの完全な同期が可能です(ということになっている)。

render-node.jpg

ただし、このパッチが定める方法やドローイング・コンテクストに従ってOpenGLの描画を行う必要があります。これは、それほど難しくはないものの、ちょっと面倒かもしれません。また、レコーディング速度は結構遅いです。これはOpenGLの問題ではなくって、ノン・リアルタイム処理におけるオーディオのディスク書き出しの問題だそうです。あと、当然のことながら、リアルタイムに操作しながら映像を変化させることはできないので、このパッチが用途に合わない場合もあるでしょうね。

【追記】ノン・リアルタムでのオーディオのディスク処理は、Signal Vector Sizeを大きくすると良いみたいです。

(3)のスクリーン・キャプチャは、動画として画面の一部または全体をムービーにしてくれる機能を持ったユーティリティ・ソフトウェアで、Snapz Pro X 2 Movie Capture(US$69)などがありますね。フリーウェアでもあるかな?? command+shift+3を1秒間に30回叩くってのは、多分無理でしょう(笑)。

(4)のスキャン・コンバータは、ビデオカードのVGA出力またはDVI出力をビデオ信号に変換する外部デバイスで、CPUにもGPUにも負担をかけないのが二重丸。以前のPowerBookなどのようにビデオ信号出力があれば、そのままでOK。いずれの場合も、ビデオ信号になればビデオ・デッキなどで録画したり、コンピュータでキャプチャしたりできるわけです。

ただし、比較的安価なSDコンポジット変換だと画質がイマイチだし、Matrox MXOあたりだとHDおよびSDのSDI出力が可能ですけど、SDIを受けるデバイスも必要となり、結構な金額になっちゃいます。モノが増えたりケーブルを繋いだりするのもイヤなので、ま、最後の手段ということで。

OpenGLレコーディング」への5件のフィードバック

  1. masato221

    コメント初登場です。
    (4)のスキャン・コンバータで、こちらの製品にも注目。
    http://www.blackmagic-design.com/products/intensity/
    このintensityは、HDMI端子の入出力を持つキャプチャボードですが、PowerBookやMacBookProに搭載されているディスプレイ出力のDVI端子は、安価なアダプタ(http://www.comon.co.jp/24F19M.htm)でHDMIに変換することができるので、ディスプレイ出力をそのまま高画質で録画ができるのでは、と。

    ただやはり著作権の問題がでてくるので、HDCP対応のビデオカード限定とかってなってしまうとちょっと現実味に欠けますが…、。コストとしては4万円くらいで実現できるので、試してみる価値はありますね。

    返信
  2. aka

    IntensityはUS$249だそうで、安価でいいですね。ぜひ試してレポートしてください(他人任せ〜笑)。

    Mac(PC)のDVIとHDCPとの関係って良く分からないですね。コピー不可信号を出しているわけではないと思うのですが、コピー許可も出していないとすると、IntensityがHDMI-Inをどう扱うのかな?とか、HDMI-Outはセカンド・モニタのように使えるのか?とか、うむ〜実際に使わないと分からないことが一杯なので、ぜひ!

    返信
  3. masato221

    やってくれました、vadeことantonさん。
    InternsityによるGLの録画に成功した様子。
    ハイエンドなマシンでの実験なので手が出せないところもありそうですが、、朗報ですね。
    http://www.cycling74.com/forums/index.php?t=msg&th=25624&start=0&rid=0&S=0fce05ff04667cb68237bffd1fd65ffc

    Jitterでハイビジョンかつ音もオフラインで同期させるようなレンダリングのプログラムを実装すればいい話、といわれればそれまでですが、その手間だけでなく+高価なHDのVideoミキサーの代わりにも使えるということでしょうから、やはり魅力的ですね。

    返信
  4. ピンバック: ノン・リアルタイムのディスク処理 « akalogue

  5. ピンバック: 続OpenGLレコーディング « akalogue

aka へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です