【问题标题】:FFmpeg: bitrate change dynamicallyFFmpeg:比特率动态变化
【发布时间】:2012-04-12 16:08:41
【问题描述】:

我阅读了上一个帖子,这是来自 NISHAnT 的回复, FFMPEG: Dynamic change of bit_rate for Video

 avcodec_init();

 avcodec_register_all();

 codec = avcodec_find_encoder(CODEC_ID_H263);

 c = avcodec_alloc_context();

 picture= avcodec_alloc_frame();

    c->bit_rate = bitrate;
    c->width = w;
    c->height = h;
    c->time_base= (AVRational){1,framerate};
    c->pix_fmt = PIX_FMT_YUV420P;

 avcodec_close(c);

 av_free(c);

这是我的代码:

    if(previous_BR != cur_BR){
        previous_BR = cur_BR;

        AVCodecContext* new_c = av_mallocz(sizeof(AVCodecContext));;

        avcodec_copy_context(new_c, ost_table[0]->st->codec);


        avcodec_close(ost_table[0]->st->codec);
        av_free(ost_table[0]->st->codec);

        avcodec_init();
        avcodec_register_all();

        ost_table[0]->enc = avcodec_find_encoder(CODEC_ID_H264);
        new_c = avcodec_alloc_context3(ost_table[0]->enc);
        ost_table[0]->st->codec = new_c;

        AVFrame *picture= avcodec_alloc_frame();

        new_c->bit_rate = cur_BR;
        new_c->width = 352;
        new_c->height = 288;
        int framerate = 30;
        new_c->time_base= (AVRational){1,framerate};
        new_c->pix_fmt = PIX_FMT_YUV420P;
        new_c->codec_type = AVMEDIA_TYPE_VIDEO;
        new_c->codec_id = CODEC_ID_H264;}

我尝试将我的代码添加到 transcode(),但 ffmpeg 在通过我的代码后退出。 我的代码有问题吗? 或者我还应该添加什么?

我把代码放在“redo:”之后,这样它就会递归循环回来。 请帮忙!!

谢谢。

【问题讨论】:

    标签: ffmpeg encode bitrate


    【解决方案1】:

    c 是AVCodecContext 结构。 您必须首先为您正在播放的文件类型配置 ffmpeg。通过在 ffmpeg 根目录中配置第一个 build.sh 文件来构建它。 对于文件类型,您必须配置 codec9coder-decoder) 和 muxer/demuxer。 例如要播放 avi 文件,您必须为 avi 配置 muxer/demuxer 和编解码器,分别为 MPEG "AVI" 和 "MPEG4"。

    【讨论】:

    • 嗨,softy,感谢您的回复,我只是想知道我上面列出的代码是否有效,我应该将它们放在 ffmpeg.c 的哪个位置,或者我需要在我自己的应用程序中使用它.但是,我更喜欢只修改现有的 ffmpeg.c。
    • 取决于。如果它是 ffmpeg 的补充,则必须放入 ffmpeg 代码并在头文件中定义其原型。如果不是,则必须制作单独的应用程序并将其与 libavcodec 链接(和其他ffmpeg库)。此外,您必须为比特率设置错误处理条件。您不能放置CODEC_ID_H263(h.263)不可接受的比特率。
    • 嗨,softy,我上传了我的代码,请看看我需要修改什么才能使它工作?在重做之后可以吗:?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2017-01-11
    • 2017-10-21
    • 2017-09-01
    相关资源
    最近更新 更多