OpenGL アプリケーションのメイン ウィンドウからビデオ クリップをキャプチャする非常に簡単な方法をユーザーに提供することになっています。キャプチャを開始および停止するためのボタンやキーボード ショートカットを追加することを考えています。開始時に、ファイル名やその他のオプションがある場合はそれを尋ねることができました。Windows (XP/Vista) で実行する必要がありますが、これまで開いていた Linux のドアを閉じたくありません。
このアプリケーションは、OpenGL フラグメントとシェーダー プログラムを使用します。これらの効果は、最終的なビデオで絶対に必要です。
私の要件を満たす可能性のあるいくつかの異なるアプローチさえあるように思えます(しかし、どこから始めるべきか本当にわかりません):
startRecording(filename)、stopRecording、captureFrame などの関数を備えたエンコード ライブラリ。各フレームがレンダリングされるたびに (または毎秒/3 秒ごとに)、captureFrame() を呼び出すことができます。そうすることでプログラムの実行が遅くなる場合でも、実際には問題にはなりません。
アプリケーションからプログラムで制御できるスタンドアロンの外部プログラム。結局のところ、制御できないスタンドアロン プログラムは、ほとんど私が必要とすることを実行します... しかし、前述のように、ユーザーが操作するのは非常に簡単であるべきであり、シームレス性も高く評価します。私のアプリケーションは通常、フルスクリーンで実行されます。さらに、現在 NSIS を使用して準備しているアプリケーションのインストール パッケージの一部として配布できるはずです。
Windows API を使用してスクリーンショットをフレームごとにキャプチャし、(たとえば)ここに記載されているライブラリの 1 つを使用します。Windows でスクリーンショットをキャプチャする方法の例を見つけるのは簡単なようです。ただし、WinAPIレベルで非常に手を汚さないようにするソリューションが大好きです。
OpenGL を使用してオフスクリーン ターゲットにレンダリングし、ライブラリを使用してビデオを生成します。これが可能かどうかはわかりませんが、とにかく痛みが最も少ない方法ではないのではないかと心配しています. 特に、ビデオがキャプチャされているかどうかによって、実際のレンダリングが異なる実行パスを取ることは望ましくありません。さらに、通常の非キャプチャ モードでフレーム レートを低下させる可能性のあるものはすべて避けます。
ソリューションがどちらかの意味で無料である場合、それは素晴らしいことですが、絶対的な要件ではありません。一般に、膨満感が少ないほど良いです。一方、この質問以外の理由により、残念ながら GPL のみのコードにリンクすることはできません。
ファイル形式に関しては、ユーザーがコーデックを検索することは期待できませんが、ビデオの表示が基本レベルの Windows ユーザーにとって十分に簡単である限り、形式が何であるかはあまり気にしません。ただし、出力の圧縮品質を制御できれば素晴らしいと思います。
明確にするために、カムコーダーのような外部デバイスからビデオをキャプチャする必要はありません。また、マウスの動きに本当に興味があるわけでもありません。オーディオに関する要件はありません。アプリケーションはまったくノイズを発生させません。
私は Visual Studio 2008 を使用して C++ を作成しています。このアプリケーションも GLUT と GLUI を利用しています。私は C++ やライブラリのリンクなどについてしっかりと理解していますが、一方、OpenGL は私にとってまったく新しいものです。これまでのところ、実際に仕事を成し遂げるために必要なビットしか学んでいません。
緊急に解決策が必要なわけではないので、お気軽に時間をかけてください :)