ffmpeg如何从['P'帧]计算完整帧['I'帧]。它在概念上是正确的?
问题描述:
我想了解ffmpeg流视频处理的知识。ffmpeg如何从['P'帧]计算完整帧['I'帧]。它在概念上是正确的?
我的理解:
我从IPED Camaera,像“IPPPPPPPPPPPPPPPPIPPPPPPP”的帧得到..
框架“我”是一个完整的框架,其中为框架“P”依赖于前面无论是“P”还是“I”都是关闭的。
我用avcodec_decode_video2
while (av_read_frame (context, &packet) >=0)
{
//LOGD (" Received PACKET...DTS and PTS %ld and %ld ", packet.pts, packet.dts);
if(packet.stream_index == videoStreamIndex) {
avcodec_decode_video2 (pCodecCtx, pFrame, &finished, &packet);
if (finished) {
// Here is my frame, getting the type by av_get_picture_type_char(pFrame->pict_type).
}
}
现在,当我只显示我已收到帧获得框架,看起来像每当“我”收到的帧,它显示正常,当收到“P”帧,图像是一个折腾。
1)我们需要手动进行任何计算以将'P'帧转换为'I'帧,以便它可以被渲染? 2)如果不是(1),我必须注意什么?.. DTS/PTS计算是否在这里做魔术?
答
P帧不依赖于前一个P帧,它依赖于前一张图片。因此,例如,如果您有IPP,则需要I和第二个P使用第三个P,而不仅仅是第二个P,而不仅仅是第二个P。
decode_video2
为您做插值并返回图像,所以它抛弃的原因必须是不同的东西。
PTS/DTS告诉你什么时候显示帧,但帧仍然必须有效。
感谢乔治,如果我只对显示视频帧感兴趣,我还需要做PTS/DTS计算吗? – Whoami
您需要从帧中获取PTS信息,告诉您何时显示特定帧(否则您的视频将播放的速度与设备一样快)。 DTS你不应该在意,因为它们是由FFmpeg本身处理的。 –
谢谢,你有没有参考,如何处理点计算,因为它真的很混乱,没有人提供具体的解释。 – Whoami