ffmpeg 编码器AVCodecContext 的配置参数
来源:互联网 发布:淘宝条形码怎么填 编辑:程序博客网 时间:2024/04/26 14:21
1、先说一些基本的API
AVFormatContex * pFormatCtxEnc;AVCodecContext * pCodecCtxEnc;AVStream * video_st;AVOutputFormat * pOutputFormat;pOutputFormat = av_guess_format(NULL,/*文件名*/,NULL); //根据文件后缀来猜测文件的格式pFormatCtxEnc = avformat_alloc_context();pFormatCtxEnc->oformat = pOutputFormat;video_st = avformat_new_stream(pFormatCtxEnc,0);
2、开始配置编码器上下文的参数
/*AVCodecContext 相当于虚基类,需要用具体的编码器实现来给他赋值*/pCodecCtxEnc = video_st->codec; //编码器的ID号,这里我们自行指定为264编码器,实际上也可以根据video_st里的codecID 参数赋值pCodecCtxEnc->codec_id = AV_CODEC_ID_H264;//编码器编码的数据类型pCodecCtxEnc->codec_type = AVMEDIA_TYPE_VIDEO;//目标的码率,即采样的码率;显然,采样码率越大,视频大小越大pCodecCtxEnc->bit_rate = 200000;//固定允许的码率误差,数值越大,视频越小pCodecCtxEnc->bit_rate_tolerance = 4000000;//编码目标的视频帧大小,以像素为单位pCodecCtxEnc->width = 640;pCodecCtxEnc->height = 480;//帧率的基本单位,我们用分数来表示,//用分数来表示的原因是,有很多视频的帧率是带小数的eg:NTSC 使用的帧率是29.97pCodecCtxEnc->time_base.den = 30;pCodecCtxEnc->time_base = (AVRational){1,25};pCodecCtxEnc->time_base.num = 1;//像素的格式,也就是说采用什么样的色彩空间来表明一个像素点pCodecCtxEnc->pix_fmt = PIX_FMT_YUV420P;//每250帧插入1个I帧,I帧越少,视频越小
pCodecCtxEnc->gop_size = 250;//两个非B帧之间允许出现多少个B帧数//设置0表示不使用B帧//b 帧越多,图片越小pCodecCtxEnc->max_b_frames = 0;//运动估计pCodecCtxEnc->pre_me = 2;//设置最小和最大拉格朗日乘数//拉格朗日乘数 是统计学用来检测瞬间平均值的一种方法pCodecCtxEnc->lmin = 1;pCodecCtxEnc->lmax = 5;//最大和最小量化系数pCodecCtxEnc->qmin = 10;pCodecCtxEnc->qmax = 50;//因为我们的量化系数q是在qmin和qmax之间浮动的,//qblur表示这种浮动变化的变化程度,取值范围0.0~1.0,取0表示不削减pCodecCtxEnc->qblur = 0.0;//空间复杂度的masking力度,取值范围 0.0-1.0pCodecCtxEnc->spatial_cplx_masking = 0.3;//运动场景预判功能的力度,数值越大编码时间越长pCodecCtxEnc->me_pre_cmp = 2;//采用(qmin/qmax的比值来控制码率,1表示局部采用此方法,)pCodecCtxEnc->rc_qsquish = 1;//设置 i帧、p帧与B帧之间的量化系数q比例因子,这个值越大,B帧越不清楚//B帧量化系数 = 前一个P帧的量化系数q * b_quant_factor + b_quant_offsetpCodecCtxEnc->b_quant_factor = 1.25;//i帧、p帧与B帧的量化系数便宜量,便宜越大,B帧越不清楚pCodecCtxEnc->b_quant_offset = 1.25;//p和i的量化系数比例因子,越接近1,P帧越清楚//p的量化系数 = I帧的量化系数 * i_quant_factor + i_quant_offsetpCodecCtxEnc->i_quant_factor = 0.8;pCodecCtxEnc->i_quant_offset = 0.0;//码率控制测率,宏定义,查APIpCodecCtxEnc->rc_strategy = 2;//b帧的生成策略pCodecCtxEnc->b_frame_strategy = 0;//消除亮度和色度门限pCodecCtxEnc->luma_elim_threshold = 0;pCodecCtxEnc->chroma_elim_threshold = 0;//DCT变换算法的设置,有7种设置,这个算法的设置是根据不同的CPU指令集来优化的取值范围在0-7之间pCodecCtxEnc->dct_algo = 0;//这两个参数表示对过亮或过暗的场景作masking的力度,0表示不作pCodecCtxEnc->lumi_masking = 0.0;pCodecCtxEnc->dark_masking = 0.0;
3、一些针对具体要求进行的配置
(1)x264编码时延问题
方法一:
vcodec_encode_video2函数输出的延时仅仅跟max_b_frames的设置有关,想进行实时编码,将max_b_frames设置为0便没有编码延时了
方法二:
1、使用264的API设置编码速度 /** * ultrafast,superfast, veryfast, faster, fast, medium * slow, slower, veryslow, placebo. 这是x264编码速度的选项 */ av_opt_set(m_context->priv_data,"preset","ultrafast",0);
- ffmpeg 编码器AVCodecContext 的配置参数
- ffmpeg 编码器AVCodecContext 的配置参数
- ffmpeg 编码器AVCodecContext 的配置参数
- ffmpeg 编码器AVCodecContext 的配置参数
- ffmpeg 编码器AVCodecContext 的配置参数
- ffmpeg 编码器AVCodecContext 的配置参数
- FFmpeg 编码器AVCodecContext参数设置
- ffmpeg 编码器参数配置
- ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- 转:ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- 转:ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- Linux 音视频技术] 转:ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- Linux 音视频技术] 转:ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表
- FFmpeg之AVCodecContext
- 基于FFMPEG的音频编码器
- H264编码器的参数
- ffmpeg+x264编码,AVCodecContext的gop_size与max_b_frames设置无效
- 在网站制作中随时可用的10个 HTML5 代码片段
- Android数据存储---SQLite
- nagiosQL访问时报错PHP message: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_re
- gcc头文件库文件搜索路径问题
- 漫画:人资部和技术人员都是如何看你的简历的
- ffmpeg 编码器AVCodecContext 的配置参数
- RAII
- ios播放系统自带音效以及震动
- IOS中类和对象还有,nil/Nil/NULL的区别及小结
- mysql的myisam存储引擎特性(五)
- 大数据时代 数据挖掘十大经典算法
- 尺寸标准
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest
- ios短信和电话