【发布时间】:2013-01-05 14:48:46
【问题描述】:
我在运行时从来自 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 从源代码编译而来的。
欢迎任何有关如何解决此问题的想法。目前,我不在其中:)
【问题讨论】:
标签: ffmpeg video-encoding libavcodec libav libavformat