gpt4 book ai didi

image - AVFrame 到 RGB - 解码伪影

转载 作者:行者123 更新时间:2023-12-04 23:04:30 24 4
gpt4 key购买 nike

我想以编程方式将 mp4 视频文件(使用 h264 编解码器)转换为单个 RGB 图像。使用命令行看起来像:

ffmpeg -i test1080.mp4 -r 30 image-%3d.jpg

使用此命令会生成一组漂亮的图片。但是当我尝试以编程方式做同样的事情时,一些图像(可能是 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/

问候,

最佳答案

如果 avcodec_decode_video 的第三个参数返回一个空值,并不意味着错误。这意味着框架还没有准备好。您需要继续读取帧,直到该值变为非零。

if (!buffer_size) {
continue;
}

更新

尝试添加检查并仅显示关键帧,这将有助于隔离问题。
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) {
continue; // <-- It's important!
}

// check for key frame
if (packet.flags & AV_PKT_FLAG_KEY)
{
// Convert
img_convert((AVPicture *)frameRGB, PIX_FMT_RGB24, (AVPicture*)frame,
m_codecCtx->pix_fmt, m_codecCtx->width, m_codecCtx->height);
}
}

关于image - AVFrame 到 RGB - 解码伪影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14215554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com