1
我想以编程方式将mp4视频文件(使用h264编解码器)转换为单个RGB图像。使用命令行,这看起来像:AVFrame到RGB - 解码文物
使用这个命令产生了很好的图片集。但是,当我尝试以编程方式做同样的一些图像(可能B和P帧)看起来很奇怪(例如,有不同的信息等扭曲的区域)。读取和转换的代码如下:
AVFrame *frame = avcodec_alloc_frame();
AVFrame *frameRGB = avcodec_alloc_frame();
AVPacket packet;
int buffer_size=avpicture_get_size(PIX_FMT_RGB24, m_codecCtx->width,
m_codecCtx->height);
uint8_t *buffer = new uint8_t[buffer_size];
avpicture_fill((AVPicture *)frameRGB, buffer, PIX_FMT_RGB24,
m_codecCtx->width, m_codecCtx->height);
while (true)
{
// Read one packet into `packet`
if (av_read_frame(m_formatCtx, &packet) < 0) {
break; // End of stream. Done decoding.
}
if (avcodec_decode_video(m_codecCtx, frame, &buffer_size, packet.data, packet.size) < 1) {
break; // Error in decoding
}
if (!buffer_size) {
break;
}
// Convert
img_convert((AVPicture *)frameRGB, PIX_FMT_RGB24, (AVPicture*)frame,
m_codecCtx->pix_fmt, m_codecCtx->width, m_codecCtx->height);
// RGB data is now available in frameRGB for further processing
}
我如何转换视频流,使每个最终图像显示所有图像数据,使信息从B和P帧包含在所有的帧?
[编辑:]表示伪像的样本图像是在这里:http://imageshack.us/photo/my-images/201/sampleq.jpg/
问候,
感谢您的提示。我已经尝试过,但结果是一样的。我检查了ffmpeg工具如何进行转换,这涉及更多步骤。目前我正在试图弄清楚究竟是什么必要。 – Hyndrix
你能分享带有工件的示例图像吗? – pogorskiy
您在这里:http://imageshack.us/photo/my-images/201/sampleq.jpg/ – Hyndrix