現在、正しく再生されるDirectShow.NETグラフがありますが、逆方向にも再生できるようにしたいと思います(最後から開始し、最初から逆方向に再生します)。
IMediaSeeking :: SetRate(double)メソッドを試してみましたが、これは正の値に対してのみ機能します。負の値で試してみるとクラッシュします。
ヘルプ!
私は.aviビデオファイルを使用していますが、それでうまくいく場合は、さまざまな形式を試してみることができます。
現在、正しく再生されるDirectShow.NETグラフがありますが、逆方向にも再生できるようにしたいと思います(最後から開始し、最初から逆方向に再生します)。
IMediaSeeking :: SetRate(double)メソッドを試してみましたが、これは正の値に対してのみ機能します。負の値で試してみるとクラッシュします。
ヘルプ!
私は.aviビデオファイルを使用していますが、それでうまくいく場合は、さまざまな形式を試してみることができます。
実際、フォーマットが時間圧縮を使用していなくても、ストックAVIdemuxがどのフォーマットでも負のレートをサポートするかどうかはわかりません。そして確かに他のほとんどのdemuxフィルターは負のレートをサポートしません。したがって、これを行うには、おそらくカスタムdemuxフィルターが必要になります。これを行う場合は、インデックス付きのコンテナ形式(mp4など)を使用していることを確認してください。
時間圧縮のないフォーマット(motion jpeg、i-framesのみmpeg-2など)を使用する場合、逆再生できるようにするためにフレーム圧縮にかなりの代償を払うことになります。これを本当にうまくやりたい場合は、いくつかのDVD実装で採用されているアプローチを検討してください。それらのいくつかは、iフレームのみを再生することによって逆再生されるため、1または2fpsになります。ただし、トップエンドの実装はGOP全体(約15フレーム)をデコードし、前のGOPをデコードするときにこれらのフレームを逆の順序でレンダリングします。これは、開発とシステムリソースの面でコストがかかりますが、良好な最終結果が得られます。
G
さまざまなビデオファイルを試しましたか?多くのファイルは、一時的な圧縮技術のために前方にしか再生できません(つまり、フレーム内の情報は前のフレーム内の情報に依存します)。
GSpotを使用してファイルを検査し、ファイルにPフレームが含まれているかどうかを確認できます。もしそうなら、あなたはそれを逆にプレイすることができる可能性は低いです。AVIはコンテナであり、その中のビデオは任意のコーデックを使用できます。
IMediaSeeking :: SetPositionsを繰り返し呼び出して、一度に1フレームずつ後方にフレームステップすることで、逆再生が可能になります。スムーズになる可能性は非常に低いですが、複数のカスタムフィルターを作成せずに達成できる最善の方法になると思います。
mjpegやjpeg2000のような一時的な圧縮なしでコーデックを使用すると、この手法で大いに役立ちます。通常の最新のコーデックの場合、解像度とビットレートを下げると役立ちます。
任意のファイルをランダムに逆再生できるようにする必要がありますか?メディアファイルを前処理できれば、切り替えることができる逆バージョンを準備するのは難しくありません。低レベルのツールに慣れている場合は、Avisynthがそれを実行できます。