使用 ffmpeg av_seek_frame 只获取视频的第一帧

时间:2021-03-11 13:36:30

标签: c ffmpeg

我正在尝试使用 ffmpeg 函数来捕获一些视频缩略图。我正在使用 ffmpeg 的示例并编写如下代码:

    int timeStamp = ((double)ms / (double)1000) * pFormatCtx->streams[videoStream]->time_base.den / pFormatCtx->streams[videoStream]->time_base.num;
    int ret = av_seek_frame(pFormatCtx, videoStream, timeStamp, AVSEEK_FLAG_BACKWARD);
    while (av_read_frame(pFormatCtx, &packet) >= 0) {
        if (packet.stream_index == videoStream) {
            avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
            if (frameFinished) {
                sws_scale(sws_ctx, (uint8_t const * const *) pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);
                if (++i <= 1) {
                    SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, i);
                }
            }
        }
        av_packet_unref(&packet);
    }

实际上,它在 .mp4 视频中运行良好。但是对于 .ts 视频,它只能捕获视频的第一帧,我认为问题是 av_seek_frame 不起作用,但我不知道如何解决问题。有人可以帮我吗?

0 个答案:

没有答案