実行時に 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 バージョンを使用しています。
これを解決する方法についてのアイデアは大歓迎です。現在、私はそれらから外れています:)