2012-02-22 7 views
4

私は、MPEG4(I、p、p、p、p ...)フレームのいくつかを格納する、いわゆる "ブロック"を持っています。 すべての「ブロック」について、フレームは「I」フレームで開始し、次の「I」フレームの前に終了します。 (VOL - 「I」フレームの前に「visual_object_sequence_start_code」が必ず含まれています)FFmpegを使用したMPEG逆方向フレームの復号

「ブロック」フレームを「後方」モードで再生できる必要があります。 厚いがあることである:それは「P」フレームだと、それを正しくする「インターフレーム(I)」を必要とするため

  1. それは、ちょうど私のブロックの最後のフレームを取るとデコードを実行することはできませんデコードされる。

  2. 最初の "I"フレームを取得してから、それをffmpegの "avcodec_decode_video"関数に渡して最後の "P"フレームがffmpegに渡されますその前の "P"フレームで、右か? (だけでなく..私の知る限り、この方法をテストしてきたように、私の最後のPフレームは、アーティファクトを持っていたデコード)

今、私は逆方向に行ってる方法です遊ぶ - 最初に私の「ブロック」のフレームの全てをデコードRGBに変換してメモリに格納します。 (ほとんどの場合、ブロックあたり最大25フレームまでです)しかし、この方法は実際には多くのメモリを必要とします...(特にフレームの解像度が高い場合) そして、これは正しい方法ではないと感じていますこれは...

私は質問したいと思いますが、FFmpegを使用してこの「後方に」フレームのデコード/再生を行う方法はありますか?

おかげ

+0

デコードされた「ブロック」フレームをすべてJPEG形式で保存していますが、メモリを大幅に節約できますが、最終的に出力フォーマットはRGBでなければなりません。 JPEGからRGBへの変換... これは正しい選択ではないと感じています(すべての画像をメモリに保存しています) – Gediminas

答えて

1

私は周りの前のフレームに依存するため、Pフレームに、Iフレームから開始し、すべてのPフレームをデコードする方法があるとは思いません。デコードされたフレームを処理するために、それらをファイルに保存することができます。また、限られたストレージとCPUパワーを使用して、古いPフレームを破棄して後で再計算することもできます。

コマンドレベルでは、あなたが一連のイメージに入力されたビデオを変換することができます:

ffmpeg -i input_video output%4d.jpg 

その後、何とかその順序を逆にし、ビデオに戻って変換する:

ffmpeg -r FRAME_RATE -i reverse_output%4d.jpg output_video 

あなたは前を考慮することができますそれがオプションである場合、処理する。

3

何が本当に研究の問題を見ている:

  1. Compressed-Domain Reverse Play of MPEG Video Streams, SPIE International Symposium on Voice, Video, and Data Communications, Boston, MA, November, 1998.

  2. Reverse-play algorithm for MPEG video streaming

  3. MANIPULATING TEMPORAL DEPENDENCIES IN COMPRESSED VIDEO DATA WITH APPLICATIONS TO COMPRESSED-DOMAIN PROCESSING OF MPEG VIDEO.

    次の紙を見て、全体的なアプローチのglimpsを取得するには

基本的に、キーフレームに基づく高度なエンコーディングがありますが、モーション補償のプロセスを逆にして逆方向のフローを実現できます。これは、PフレームのIフレームへのオンザフライ変換によって行われる。これは楽しみにしていますが、はるかに多くのメモリを必要としません。可能であれば、これを新しいファイルとして保存して、それを逆再生要件の標準デコーダに適用することができます。

しかし、これは非常に複雑で、私はこれを実際に行う珍しいソフトウェアを見てきました。

関連する問題