0

動画ファイルを処理しています。ffmpeg を使用して各パケットを読み取ります。

オーディオ パケットの場合は、av_interleaved_write_frame を使用してパケットを出力ビデオ ファイルに書き込みます。

ビデオ パケットの場合は、パケットをデコードし、ビデオ フレームのデータを取得し、画像を処理して、圧縮してパケットに戻します。次に、av_interleaved_write_frame を使用して、処理済みのビデオ フレーム パケットを出力ビデオ ファイルに書き込みます。

デバッグを通じて、オーディオ パケットとビデオ パケットを正しく読み取ります。ただし、「av_write_trailer」に行くと終了します。ただし、出力ビデオ ファイルは存在します。

エラー情報は次のとおりです。

*** glibc detected *** /OpenCV_videoFlatten_20130507/Debug/OpenCV_videoFlatten_20130507: corrupted double-linked list: 0x000000000348dfa0 ***

Movie Player (Ubuntu) を使用すると、出力ビデオ ファイルはオーディオを正しく再生できますが、ビデオ信号はありません。VLC プレーヤーを使用すると、最初のビデオ フレームを表示し (同じビデオ画像を保持)、オーディオを正しく再生できます。

「av_write_trailer」にデバッグしてみましたが、ffmpeg ライブラリにあるため、何が悪いのか詳細な情報を取得できませんでした。

別の情報: プロジェクトの以前のバージョンは、オーディオ ストリームを追加せずに、ビデオ フレームを処理するだけです。そしてそれはうまくいきます。

ヒントや手がかりはありますか?

4

1 に答える 1

1

解決策を見つけました。ストリームの time_base に基づいてポイントを設定するために rescale を使用しませんでした。実際、関連するコードはサンプル muxing.c にあります。

于 2013-05-31T19:14:54.327 に答える