FFmpeg:比特率动态变化

标签 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:”之后,这样它就会递归循环回来。
请帮忙 !!

谢谢你。

最佳答案

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

关于FFmpeg:比特率动态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127470/

相关文章:

c - 编码/解码程序的逻辑错误 (C)

php - 如何在字符串上使用 PHP rot13?

android - 如何将解码帧从 C 复制到 Android

c# - 如何使用 c# 将 system.io 流对象输入到 ffmpeg

python - 一次在多组图像上批量执行(ffmpeg)命令[新手]

c++ - 我想在 Windows 下使用 C++ 以某种基本方式表示西里尔字符

c++ - 查找视频文件的比特率

ffmpeg 强制执行比特率值而不是指定的值

audio - 采样率、比特率和位深度之间的区别

javascript - 使用 nodejs fluent-ffmpeg 流式传输到 icecast 服务器