ロボットからの着信ビデオとオーディオ ストリームからムービーを作成する Delphi 6 アプリがあります。PC は、一連の JPEG フレームとしてビデオ ストリームを受信し、PCM オーディオ データのブロックとしてオーディオを受信します。Windows の AVIFile 関数 (AVIStreamCreate など) を使用してムービーを作成しています。ビデオ コンプレッサの選択には、AVISaveOptions() 関数を使用し、ユーザーがシステムで利用可能なコンプレッサから 1 つを選択できるようにします。例: Microsoft Video 1、Radius の Cinepak Code など。Microsoft H.263 や H.261 など、他のいくつかの利用可能なものは AVIERR_BADFORMAT エラーで失敗するため、テストできませんでした。音声は GSM 6.10 コンプレッサーを使用して圧縮されます。
問題は、比較のために Adobe Premiere のようなツールを使用できる圧縮率に近づくことができないように見えることです。注意してください、Premiere が私のものとは異なる全体的なプロセスを使用して、MPEG や Quicktime などの別のファイル形式に圧縮していることは承知しています。しかし、可能であれば、同等の圧縮率を得たいと考えています。
AVISaveOptions() からどのコンプレッサーを選択しても、コンプレッサーで使用可能な圧縮品質設定 (たとえば、Microsoft Video 1 の時間品質比と圧縮品質) をどれだけ低くしても、常に数分のビデオが終了します。サイズが約 14MB の AVI ファイルを作成します。比較のために、私が Adobe Premiere を使用して作成できるファイルは、サイズが 1 MB 未満であり、ほぼ同じ視覚的品質に見えます (つまり、私の目的には十分です。ここでは、実際の品質の低下は気にしません)。
Windows AVI API の使用によるファイル出力を調べると、コンプレッサーで変更した設定がフレーム レートに影響を与えていないことがわかります。これは常に入力フレーム レートと同じです。必要に応じて、明らかに入力側でフレームをドロップできますが、それはオーディオに同期されているため、少し面倒です。できれば避けたいと思います。
しかし、もっと重要なのはデータレートです。コンプレッサーの設定をどれだけ低くしても、約 2.3 kbps を下回ることはありません。私が Premiere で作成したビデオ、および私が再生したその他のビデオで再生時間に対するファイル サイズの比率が健全なものは、すべて約 1.2 kbps です。
私の AVI ファイルのファイル サイズと、Premiere で作成したファイル サイズ、または他の人から送られてきた圧縮率の高いファイル サイズとの全体的な違いは、10 対 1です。したがって、私の圧縮率は他のビデオ ファイルよりも 10 倍悪く、他のファイルのビデオ品質に不快な違いはありません。
同等の圧縮率を得るにはどうすればよいですか?
更新:David Heffernanによる返信には、私にとってうまくいった迅速な解決策が含まれています。重要なライセンス警告も含まれているため、強調しています。私のように、ユーザーが XVid コーデックをできるだけ便利に使用できるようにしたい方は、以下の記事をお読みください。これには、ユーザーのコンプレッサーの選択を、選択した圧縮構成の選択と共に、今後のセッションでユーザーを再び悩ませることなく再利用する方法に関する説明が含まれています。
http://msdn.microsoft.com/en-us/magazine/hh580739.aspx
興味深いことに、私の以前の出力 AVI ファイル サイズから XVid コーデックを使用して作成されたファイルへのサイズの変化は 12.231 MB から 632 KBであり、ビデオ品質は妥当以上のものでした。