ffmpeg如何从[['I'帧]计算完整的帧 'P'帧]。它在概念上是正确的吗?

标签 ffmpeg

我正在尝试了解 ffmpeg 流视频处理的知识。

我的理解:

我从 IPed Camaera 获得类似“IPPPPPPPPPPPPPIPPPPPPP”的帧..

帧“I”是一个完整的帧,其中帧“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).
          }
 }

现在,当我只显示我收到的帧时,看起来每当收到“I”帧时,它都会正确显示,当收到“P”帧时,图像会抛出。

1)我们需要手动进行计算将“P”帧转换为“I”帧才能渲染?

2)如果不是(1),我需要注意什么?..DTS/PTS 计算在这里起作用吗?

最佳答案

P帧不依赖于前一个P帧,它依赖于前一个图片。因此,例如,如果您有 IPP,则需要 I 和第二个 P 才能使用第三个 P,而不仅仅是第二个 P。

decode_video2 为您进行插值并返回图像,因此它抛出的原因一定有所不同。

PTS/DTS 告诉您何时显示帧,但帧仍然必须有效。

关于ffmpeg如何从[['I'帧]计算完整的帧 'P'帧]。它在概念上是正确的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21774817/

相关文章:

ffmpeg - 如何从 Raspberry Pi 上的 Action 中获取 .mp4 视频?

linux - 在 Elastic Beanstalk 上为 FFMPEG 启用 libmp3lame

Mac 的 FFMPEG 录制输出音频

reactjs - 仅当以 30 FPS 拍摄视频时,FFmpeg 视频输出才被放大?

ffmpeg - 这两个视频有什么区别?

ffmpeg - 如果我将一个 10 秒的剪辑分成两部分,第一个剪辑的结束时间会是 00 :00:05 or 00:00:04 to prevent overlapping?

php - 如何获取上传到 Amazon S3 的视频文件长度?

php - libavdevice.so.57 : failed to map segment from shared object: Permission denied"

python - 组合它们后moviepy破坏视频

vb.net - 录制时可以播放的视频格式?