FFmpeg:比特率动态变化

时间:2012-04-12 16:08:41

标签: ffmpeg encode bitrate

我读了上一个帖子,这是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:”之后,以便递归循环。 请帮助!!

谢谢。

1 个答案:

答案 0 :(得分:0)

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