0

実行時に 3D エンジンからの入力画像からビデオ ファイルをレンダリングしています (実際の画像ファイルは渡さず、RGB メモリのみを渡します)。これは、ビデオ コーデックとして CODEC_ID_H264 を使用して MP4 を出力する場合に完全に機能します。

しかし、CODEC_ID_MPEG2VIDEO を使用して MPG ファイルを作成したい場合、結果のファイルは単に壊れています。ビデオを正しく再生できるプレーヤーはなく、その MPG を別の MPG ファイルと連結し、結果の MP4 を別のステップで変換したい場合、結果の .mp4 ファイルには両方のビデオが含まれますが、元の MPG ビデオからの多くのフレーム (およびビデオ! サウンドは問題なく動作します) は単純にスキップされます。

最初は MPG -> MP4 変換が問題だと思っていましたが、ビデオ レンダリング エンジンからの最初の MPG が既に壊れていることに気付きました。ただし、壊れているのがシステム ヘッダーなのかシーケンス ヘッダーなのかはわかりません。または、それがまったく異なるものである可能性がある場合。

ご覧になりたい場合は、次のファイルをご覧ください: http://www.file-upload.net/download-7093306/broken.mpg.html

ここでも、ビデオ レンダリング エンジンから MP4 を直接作成する場合、まったく同じ多重化コードが問題なく機能するため、入力データ、swscale() などは正しいと確信しています。唯一の違いは、CODEC_ID_H264 が使用され、いくつかの追加変数 (qmin、qmax など) が設定されていることです。これらはすべて H264 に固有であるため、影響はありません。

また、avformat_write_header も av_write_trailer もエラーを報告しません。

追加情報として、VLC プレーヤーで MPG のコーデック データを表示する場合、FPS、解像度、およびフォーマットを表示できません (640x360、30 fps および 4:2:0 YUV を表示する必要があります)。

MinGW を使用してソースからコンパイルした、かなり新しい (おそらく 2 ~ 3 か月前の) FFmpeg バージョンを使用しています。

これを解決する方法についてのアイデアは大歓迎です。現在、私はそれらから外れています:)

4

1 に答える 1

0

問題は avformat_write_header ではなく、書き込まれた各ビデオ パケットの PTS 値を AV_NOPTS_VALUE に設定しなかったことです。

ビデオパケットごとに設定すると、すべて正常に動作します。

特別な PTS 値を設定する必要がなかったため、AV_NOPTS_VALUE がデフォルトであると想定しました。

于 2013-01-23T14:03:05.140 に答える