2011-08-25 20 views
7

この場合、私は実際にmovファイルからフレームを解析したいと考えています。エンコードされたh264フレームを取得します。私はffmpegを使ってそうすることができましたが、私がffmpeg -i test* test.movを使って再び映画を作ろうとすると、test00: Invalid data found when processing inputが得られ、フレームの構造に間違いがあります。 、XXは、それがI-であるかどうかと言うれる.movファイルを.h264ファイルに変換する

00 00 00 01 XXデータ-------------

:私はそれを理解するように、フレームには、次のような外観を持っている必要がありますPフレームまたはBフレーム。 (タイプ(XX)= 5?)、P(タイプ(XX)= 7?)またはB(タイプ(XX)= 8?)フレームである場合、type(XX) = 0x0F && XXは言う。私はこれらの数字については分かりませんが、私はそれを探していましたが、良い情報源は見つかりませんでした。 NALUは異なるフレームのために何番目の番号をつけなければならないのですか?

4B =サイズ、1B = XX、その後データ:私はMOVファイルにav_read_frameを使用する場合

はとにかく、私はこのように見えるフレームを取得します。 (少なくともこれは私が私が得ると思うものです)

私がフレームを格納するファイルは、いつものサイズです。ヘキサエディタで見るとそうでなければもちろんです。 2つのフレームについてはXXが常に65(すなわち、タイプ(XX)= 5)であり、その後61(すなわち、タイプ(XX)= 1)であり、1フレームについては65である。

これらのフレームは次のようなものだと思います。ただし、異なるフレームタイプのタイプ番号についての私の前提は誤っている可能性が高いです。 (ISO/IEC 14496-10を除いて、これについての読書の提案はありませんが、私はそれを本当に理解していません)。

私はサイズを削除し、XXバイトの前に00 00 00 01とデータを追加しようとしましたが、成功しませんでした。どのように私はフレームを有効なH264エンコードされたフレームに変更することができるかについてのヒント?

答えて

5

まず第一に、私はH264ストリームを理解するための便利なツールをお勧めする必要があります。http://sourceforge.net/projects/h264bitstream/

いいえ、あなたの特定の質問に答えるために、はい、フレームは通常、65と61で一般的に開始する特別なNALユニットを開始します67および68は、それぞれSPS(シーケンスパラメータセット)およびPPS(ピクチャパラメータセット)である。

ffmpeg -i input.mov -vcodec copy output.h264を使用して、Annex Bストリーム(00 00 00 01)を1つのファイルとして正しく取得することをお勧めします。

movからフレームを抽出してtest.movに入れなおして、何を達成しようとしているのか正確に理解できませんでした。

+1

+1。また、 '-vbsf h264_mp4toannexb'オプションが実際の附属書Bストリームを抽出するために必要となるかもしれないと思います。 – misha

+1

Alexと@mishaに感謝します。私はこの解決策を認識していますが、アイフォーン上でフレームの実際の抽出を行っているので、私はプロンプトでそれを行うことはできません、私はコードでこれを行うための方法が必要です。どのような提案をどこから始めるのですか?これを行う理由は、フレームをさらに処理するために、h264フレームをWebサーバー経由で外部フレームワークにストリームする必要があるためです。 –

+0

ffmpegソースから始めます。それはあなたが見るためにすべてそこにあります。 – misha