4

DirectShow.NET のフォーラムでこれに関するスレッドを開始しました。リンクはhttp://sourceforge.net/projects/directshownet/forums/forum/460697/topic/5194414/index/page/1 ですが、残念ながら問題は解決していません。 ...

ウェブカメラからビデオをキャプチャし、マイクからオーディオをキャプチャしてファイルに保存するアプリケーションがありますが、何らかの理由でオーディオとビデオが同期しないため、次のことを試しました: 1. ffdshow エンコーダーで開始し、AVI に変更しましたMux - 問題が解決せず、オーディオが遅延し、ビデオの最後で画像がフリーズしたままになり、オーディオが継続する-sync (ただし、最初の 2 秒は使用できません) 3. オーディオとビデオの両方のタイムスタンプを出力する SampleGrabber を作成します。 ReferenceClock をキャプチャ フィルタ (オーディオ/ビデオ) の 1 つに手動で設定しようとしましたが、どちらも IReferenceClock 5 にキャストされません。SystemClock を作成し、ReferenceClock を設定しました - 違いはありませんVirtualDub で一致するかどうかを確認しますが、一致しません...

ああ、GraphEditPlus でグラフを作成しようとしたことを忘れていましたが、問題はまだ残っています。グラフへのリンクは次のとおりです

現在、DirectShow.NET のサンプルの CapWMV サンプルですべての変更をテストしています。

どんなアドバイスでも大歓迎です、私は絶望的です:/

ありがとう、

エラン。

アップデート:

オーディオとビデオの間に一定の 500 ミリ秒のギャップがあるようです。virtualDub を使用してオーディオを 500 ミリ秒遅延させると問題ないように見えますが、グラフでこれを設定するにはどうすればよいですか?

4

3 に答える 3

4

キャプチャ バッファのサイズと同じオーディオ ストリームの遅延があります。つまり、0.5 秒後にキャプチャを開始したフル バッファを取得します。レイテンシを調整するには、より小さいバッファーを使用するか、バッファーにオフセットを適用する必要があります。

見る:

IAMBufferNegotiationがキーワードです。

于 2012-04-19T19:57:53.400 に答える
2

私の状況に解決策を追加したかっただけで、誰かに役立つかもしれません。

マイクからのオーディオと一緒にウェブカメラからのビデオを録画しようとしていました。ビデオは HD (1080p) なので、MPEG4 でエンコードされた AVI ファイルを保存したかったので、Avi Mux と一緒に ffshow-tryous (無料の Mpeg4 エンコーダー) を使用しました。フィルター、問題は、私のビデオの一部 (ほとんどの場合:)) に同期の問題があることでした。

私が発見したのは、Avi Mux は同期を処理せず、データが適切な時間に到着することを前提としていることです (ここに書かれています - http://msdn.microsoft.com/en-us/library/dd407208(v=vs.85))。 aspx )、同期を処理する WMAsfWriter を使用してみましたが、正常に動作しました (上記の 2 秒間のフリーズは VLC Player の単なる不具合でした) が、高解像度ではうまく機能せず、カスタムで使用するのに問題がありましたプロファイル (フィルターは接続されません)。

私もRomanの提案を試してみましたが、リンクは非常に興味深く有望でしたが(私は本当にそれらを読むことをお勧めします-まだ投稿に+1を与えることはできません...)、違いはありませんでした:/

私の最終的な解決策は、MPEG4 をあきらめて MPEG2 だけを使用することでした。Avi Mux から Microsoft MPEG2 Encoder に切り替えました。

うまくいけば、これは他の誰かを助けるでしょう。

ありがとう、

エラン。

于 2012-04-21T20:45:01.123 に答える
1

Xvid MPEG-4 デコーダーを使用して、WMV から AVI にビデオをレンダリングするときに同じ問題が発生しました。

MPEG-4 をあきらめずに私の最終的な解決策は、AviMuxer 設定ConfigAviMux::SetMasterStreamプロパティを構成することでした。

MSDN 構成からの AVI ファイルへのビデオのキャプチャの記事で説明されているように:

2 つの別々のデバイスからオーディオとビデオをキャプチャする場合は、オーディオ ストリームをマスター ストリームにすることをお勧めします。これは、AVI Mux フィルタがビデオ ストリームの再生速度をオーディオ ストリームに合わせて調整するため、2 つのストリーム間のドリフトを防ぐのに役立ちます。

コード例:

IConfigAviMux _filterAVIMuxerCfg = (IConfigAviMux)_filterAVIMuxer;
_filterAVIMuxerCfg.SetMasterStream(0); // I've add first audio ;)
于 2014-03-06T10:19:35.360 に答える