如何在h.264视频中寻找特定的帧?

时间:2018-08-27 01:39:41

标签: ffmpeg frame h.264 video-processing

我需要通过FFmpeg从特定帧解码视频,我知道h.264视频具有I帧/ P帧/ B帧,当我使用av_seek_frame()搜索特定帧时,只能帮助我找到最近的I帧,因此我尝试使用AVPacket.dtswhile循环导航到特定帧的位置,然后开始对视频帧进行解复用

auto DurationTime = static_cast<uint64_t>(m_pAVFormatContext->streams[m_VideoStreamIndex]->duration);
auto FrameNum = m_pAVFormatContext->streams[m_VideoStreamIndex]->nb_frames;
av_seek_frame(m_pAVFormatContext, m_VideoStreamIndex, DurationTime / FrameNum * (vSpecificFrame), AVSEEK_FLAG_FRAME | AVSEEK_FLAG_BACKWARD);
int TempValue = 0;
while ((TempValue = av_read_frame(m_pAVFormatContext, &m_AVPacket)) >= 0 && m_AVPacket.stream_index != m_VideoStreamIndex)
{
    av_packet_unref(&m_AVPacket);
}
while(m_AVPacket.dts / (DurationTime / FrameNum) < vSpecificFrame)
{
    if(m_AVPacket.data)
        av_packet_unref(&m_AVPacket);
    while ((TempValue = av_read_frame(m_pAVFormatContext, &m_AVPacket)) >= 0 && m_AVPacket.stream_index != m_VideoStreamIndex)
    {
        av_packet_unref(&m_AVPacket);
    }
}
if(m_AVPacket.data)
    av_packet_unref(&m_AVPacket);

但是问题是,当我对下一帧进行多路分解时,我可以获得posdatasize和所有其他信息,但是图像无法显示。在解复用下一个I帧之前,此特定帧与下一个I帧之间的所有帧都具有相同的大小写。 我使用了错误的方法吗?或者是否还有其他方法可以搜索视频的特定帧?非常感谢。

0 个答案:

没有答案