OpenGLアプリケーションが快適にキャプチャできるglcについて(キャプチャ、再生、エンコード)
ここではglcを用いたキャプチャ/再生/エンコード作業についてを扱う。「OpenGLアプリケーションが快適にキャプチャできるglcについて(概要/インストール/Mandriva Linux向けパッケージ)」の作業例のように${HOME}/glc/以下を指定した場合、以下の各コマンドは「OpenGLアプリケーションが快適にキャプチャできるglcについて(概要/インストール/Mandriva Linux向けパッケージ)」のラッパースクリプトのファイル名に合わせて(「glc-capture」は「glc-capture-wrapper」のように)実行する。
キャプチャ
キャプチャ操作はglc-captureコマンドによって行う。
$ glc-capture [オプション...] [実行コマンド] [実行コマンドへの引数...]
このようにしてOpenGLアプリケーションを起動すると、既定ではShift+F8を押すことで録画が開始され、再びこのキーを押すかアプリケーションが終了するまでの間の映像と音声がキャプチャされる。この開始/終了のキーの組み合わせは--hotkeyオプションで変更できる。下はF12を設定する例。
$ glc-capture --hotkey F12 [オプション...] [実行コマンド] [実行コマンドへの引数...]
また、アプリケーション起動時にキャプチャ開始することもでき、--startオプションを指定する。この場合も、停止するときに押すキーは同様。
(Shift+F8で止める) $ glc-capture --start [オプション...] [実行コマンド] [実行コマンドへの引数...] (任意のキーで止める) $ glc-capture --hotkey [キーの組み合わせ] --start [オプション...] [実行コマンド] [実行コマンドへの引数...]
その他、--fpsオプションでキャプチャフレームレートを指定するなど、色々なオプション指定が別途可能となっている。
SDLを用いたアプリケーションの場合、SDLのサウンド出力ドライバがPulseAudioなどの別の出力先になって正常に音声をキャプチャできない場合があるので、--force-sdl-alsa-drvオプション*1を付けてALSAサウンドシステムからの出力を強制する。
再生とエンコード
キャプチャされた動画は独自の形式(.glcファイル)で保存される。これは付属のglc-playコマンドによって再生できる他、映像と音声のそれぞれについての変換出力も行える。
情報の取得
映像と音声は.glcファイルの「ストリーム番号」を指定して取り出す。その番号はglc-playの-iオプション指定によりストリーム一覧を含む各種情報を出力して確認する。
シンプルな構成では
$ glc-play -i 1 [.glcファイル] [ 0.00s] audio stream 1 [ 0.10s] video stream 1 [ 696.79s] end of stream video stream 1 frames = 19259 fps = 27.64 bytes = 12.91 GiB bps = 18.98 MiB audio stream 1 packets = 32657 pps = 46.87 bytes = 29.28 MiB bps = 43.02 KiB
のようにそれぞれ1つずつのストリームとなり、ともに「1番」で取り出せる。-iオプションの後ろに指定するのは詳細度で、1から6が指定できるが、ストリーム番号の一覧が見たいだけなら「1」でOK。
映像の変換(x264サポート付きのmencoderを用いてH.264にエンコード)
映像はglc-playに-yオプションを付けることで映像のストリーム番号を指定してYUV4MPEG形式として取り出せる。
映像はYUV4MPEG形式のファイル(ディスク上)に書き出して2passエンコードしてもよいのだが、数GiB単位(あるいはそれ以上)のとてつもない量のディスク領域を用いるため、パイプを用いてmencoderに渡すという形を2回行うのが現実的。ただし、非常に多くのCPU資源を用い、エンコードにかかる時間もかなり長くなる。
$ glc-play [入力ファイル] -o - -y [映像のストリーム番号] | mencoder -demuxer y4m -nosound -ovc x264 -vf harddup -ofps [出力フレームレート] -x264encopts [x264用オプション...]:pass=1:turbo=1 - -of rawvideo -o /dev/null $ glc-play [入力ファイル] -o - -y [映像のストリーム番号] | mencoder -demuxer y4m -nosound -ovc x264 -vf harddup -ofps [出力フレームレート] -x264encopts [x264用オプション...]:pass=2 - -of rawvideo -o video.264
音声の変換
音声についてはglc-playに-aオプションを付けることでWAVEファイルとして取り出せる。
$ glc-play -a [音声のストリーム番号] [.glcファイル] -o temp.wav
あとは好きな形式にエンコードする。AACへのエンコード作業は「zoomeとSMILEVIDEOへアップロードする動画の再エンコード回避に関する覚え書き(2009/8/21現在)」で扱っている。
好みのコンテナ形式に入れる
MP4コンテナへ映像と音声を入れる(mux)作業については「zoomeとSMILEVIDEOへアップロードする動画の再エンコード回避に関する覚え書き(2009/8/21現在)」で扱っているので、ここでは書かない。
動画共有サイトにアップロードするのでなければ、MKVToolnixのmkvmerge GUI(mmg)でMatroskaコンテナに入れるなど、好きな入れ物に入れてOK。ただし、mmgでは手動でフレームレートを「FPS」の欄に入力する必要がある。これは「zoomeとSMILEVIDEOへアップロードする動画の再エンコード回避に関する覚え書き(2009/8/21現在)」でMP4Boxを用いる場合の-fpsオプションに相当する。
なお、glcの公式ページにエンコード支援スクリプトへのリンクがあるが、これは(H.264+MP3).mp4な形式となり、コンテナはオプションで変更できるようだが、オーディオにmp3という部分が好みでないため、おすすめはしない。
関連記事:
- zoomeとSMILEVIDEOへアップロードする動画の再エンコード回避に関する覚え書き(2009/8/21現在)
- OpenGLアプリケーションが快適にキャプチャできるglcについて(概要/インストール/Mandriva Linux向けパッケージ)
- OpenGL/ALSA環境向けキャプチャツールglcの(H.264+AAC).mp4向けエンコード支援スクリプトを作成
- OpenGL/ALSA環境向けキャプチャツールglcでキャプチャした動画ファイルを無劣化の形式にエンコードする
使用したバージョン:
- glc 0.5.8