我正在从运行时来自 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)。
我正在使用一个相当新的(可能是 2-3 个月大)FFmpeg 版本,它是我从 MinGW 的源代码编译而来的。
欢迎任何有关如何解决此问题的想法。目前,我不在那些:)