2012-01-31 8 views
0

DirectShow SDKのpushsourceの例に基づいてDirectShowソースフィルタを作成しようとしています。私のソースフィルタは基本的にビットマップのセットを出力します。それぞれのビットマップは通常、ビデオに約600ミリ秒続きます。私はAsync_readerをWave Parserでオーディオ用に使用し、新しいフィルタでビデオをプッシュするフィルタグラフを設定しました(フィルタはCSourceStreamであり、FillBuffer関数でフレームを生成します)。これらは両方ともWMASFWriterに接続され、WMVを出力します。WMASFWriterを使用すると、各キーフレーム間隔で一時停止するビデオが生成されます

私が見つけたのは、ビデオが1秒間または2秒間一時停止するキーフレームの間隔に対応していることです。これはHD解像度では悪いようですが、それは赤いニシンかもしれないと考えました。これを引き起こしているのはどんな種類ですか? FillBufferを呼び出す頻度(フレームレートが30fpsな​​ので、同じビットマップを複数のフレームで繰り返すことになります)に関連していますか?

答えて

2

常識は、(問題の効果を有する特定の経験とは対照的に)キーフレームの符号化は、帯域幅を過度に消費し、残りはすぐにキーフレームを次のセグメントの動きを符号化するのに不十分であることを示唆しています。私はこれがCBRモードであると仮定し、おそらくVBRモードがより良いエンコーディングを与えるかもしれません。

+0

私は本当にCBRプロファイルを使用しています - 現在、ビットレートは100kbpsです。おそらく1080p(Windows Live Movie Makerのプロファイルを見て)でかなり低いと思いますか?いくつかの初期実験の後、ビットレートを1000kbpsに上げることは問題をかなり助けるように思われたので、うまく機能する構成にヒットする必要があると思われます。 – Andrew

+0

これは非常に低いビットレートのCBRプロファイルでエンコーディングされていたため、エンコーダーは品質をさらに低下させる方法がなく、代わりにフレームをドロップし始めました。 –

+0

はい、プロファイル設定を調査中です。 CBRプロファイルにはどのようなビットレートをお勧めしますか? – Andrew