gpt4 book ai didi

codec - FFMPEG中帧和包的区别

转载 作者:行者123 更新时间:2023-12-03 14:40:54 32 4
gpt4 key购买 nike

我正在尝试使用 LibAV 解码 mpeg 视频文件。有两个术语我无法正确理解,镜框 数据包 .

按照我目前的理解,镜框 是未压缩的视频帧和 数据包是压缩帧。

问题 :

  • 数据包有多个帧,对吗?
  • 一个帧可以只是一个数据包的一部分吗?我指的是一半的帧信息在packet1中,另一半在packet2中的情况?是否可以?
  • 我们如何知道 LibAV 中一个数据包中有多少帧?
  • 最佳答案

    回答您的第一和第三个问题:

  • 根据 doc for the AVPacket class : "对于视频,它通常应该包含一个压缩帧。对于音频,它可能包含多个压缩帧。
  • decode video example给出了读取数据包中所有帧的代码;你也可以用它来计算帧数:

  • static void decode(AVCodecContext *dec_ctx, AVFrame *frame, AVPacket *pkt,
    const char *filename)
    {
    char buf[1024];
    int ret;
    ret = avcodec_send_packet(dec_ctx, pkt);
    if (ret < 0) {
    fprintf(stderr, "Error sending a packet for decoding\n");
    exit(1);
    }
    while (ret >= 0) {
    ret = avcodec_receive_frame(dec_ctx, frame);
    if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
    return;
    else if (ret < 0) {
    fprintf(stderr, "Error during decoding\n");
    exit(1);
    }
    printf("saving frame %3d\n", dec_ctx->frame_number);
    fflush(stdout);
    /* the picture is allocated by the decoder. no need to
    free it */
    snprintf(buf, sizeof(buf), filename, dec_ctx->frame_number);
    pgm_save(frame->data[0], frame->linesize[0],
    frame->width, frame->height, buf);
    }
    }

    关于codec - FFMPEG中帧和包的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53574798/

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