FFMPEG encode基本流程

本文详细解析了FFMPEG编码器的工作流程,包括查找编码器、配置编码器参数、初始化编码器、编码帧数据及输出编码文件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FFMPEG encoder流程
a)定义如下数据结构
    AVCodec *codec;
    AVCodecContext *c= NULL;
    int i, ret, x, y, got_output;
    FILE *f;
    AVFrame *frame;
    AVPacket pkt;
    uint8_t endcode[] = { 0, 0, 1, 0xb7 }; //mpeg文件结尾


b)流程

//查找编码器
codec = avcodec_find_encoder(codec_id);

//分配编码器结构体

c = avcodec_alloc_context3(codec);

/设置编码器参数
    c->bit_rate = 400000;
    c->width = 352;
    c->height = 288;
    c->time_base= (AVRational){1,25};
    c->gop_size = 10; 
    c->max_b_frames=1;
    c->pix_fmt = AV_PIX_FMT_YUV420P;

av_opt_set(c->priv_data, "preset", "slow", 0);

avcodec_open2(c, codec, NULL)

f = fopen(filename, "wb");

frame = avcodec_alloc_frame();

frame->format = c->pix_fmt;
frame->width  = c->width;
frame->height = c->height;

ret = av_image_alloc(frame->data, frame->linesize, c->width, c->height,c->pix_fmt, 32);                         

av_init_packet(&pkt);

fflush(stdout);

ret = avcodec_encode_video2(c, &pkt, frame, &got_output);

fwrite(endcode, 1, sizeof(endcode), f);
fclose(f);
avcodec_close(c);
av_free(c);
av_freep(&frame->data[0]);
avcodec_free_frame(&frame);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值