tl - 私の使用例では、最終的なAVIには表示されないフレームがshowstopperであり、AVI mux/demuxプロセスが複雑であるため、最初にフレームがドロップされることがあります。だから私は、フレームの処理を開始する前に、最初にいくつかの特別なフレーム(GUID /カウンタのペアがピクセルでコード化されていることがわかっています)を押すことで解決するでしょう。私は、AVIを書いた後、これらの特別なフレームを探して、処理が始まるフレームを特定することができます。
私が見たことはすべて、もともと私が求めていたことは事実上不可能であると信じています。ファイルサイズに基づいて、私は技術的にはビデオフレームがAVIファイルに書き込まれていると思うが、ほとんどの場合、そうではないかもしれない。
つまり、virtualdubやVLC、さらにはDirectShow AVIスプリッタなどのaviプレーヤーは、オーディオの開始前に存在するビデオフレームを無視/ドロップします。だから私はあなたがpre-audioフレームを抽出するためにいくつかの他のライブラリとAVIファイルを解析する必要があると思います。
私が気にする理由は、AVIファイル内の各フレームのエントリを持つ並列データ構造を作成し、どのデータがどのフレームに対応するのかを知る必要があるからです。 AVIからフレームをドロップすると、フレームとデータを一致させることができません。
ビデオ/オーディオキャプチャフィルタの後にカスタムトランスフォームフィルタを作成することに成功しました。これらのフィルタはタイムスタンプを見て、オーディオ開始時間が設定されビデオフレームがその時間の後になるまでビデオフレームをドロップします。次に、フィルタダウンストリームは、処理中のビデオフレームに依存することができることを知っています。欠点は、実際にはオーディオフィルタが少し遅れてサンプルを配信することです。そのため、オーディオが100msで開始するとき、250msでビデオフレームを処理するまではわかりません。つまり250msのビデオデータを落としています私はビデオフレームにオーディオが付随することを知っています。オーディオが開始してから1ビデオサンプル時間以上経過すると、別のAVIツールと違った動作をすることができます。AVIMux /スプリッタを制御しようとする私の自信が衰え始めます。
AVIMuxとAVIスプリッタは、それらを正確に制御しようとする価値がないほど複雑であるということだけを受け入れています。
ありがとうございました。残念ながら、これは私が見ているものと一致しません。 私は、既存のaviファイルを取り込み、ビデオ/オーディオストリームに分割してから、タイムスタンプとオーディオを約100ミリ秒前にシフトする単純なグラフを作成しました。その後、これをAVIマルチプレクサで結合して書き出します。その結果、AVIファイルは小さく、6フレーム短くなります。私はこのプロセスを繰り返し、毎回6フレームを連続的にトリミングすることができます。すべてのビデオフレームには正のタイムスタンプがあります。 私は負のタイムスタンプが落ちることにもつながる可能性があることを認識していなかったので、私はそれを見据えています。 – aggieNick02
さらなる実験の後にビットを追加して明瞭にするには、オーディオを前方にシフトすると、元のサイズと同じサイズのAVIファイルになりますが、directshowやvirtualdubなどのAVIファイルを見ると、フレームはスキップされます。結果のファイルを単純なaviスプリッタとavi muxバックを使って実行すると、ファイルサイズが実際に低下することになります。 – aggieNick02
マイナスのタイムスタンプについての声明も確認しました。ビデオサンプル全体の時間が負の場合、それは実際に落とされます。いずれかの部分が陽性であれば、それは保持される。私が作業しているDirectShowのソースは、実際には時間の経過とともに最初のフレームを完全に否定することがあります。したがって、これは知っていると素晴らしいです。 – aggieNick02