ffmpeg,X264编码结果I帧QP比P帧还大
enc_ctx->profile =FF_PROFILE_H264_MAIN ;
enc_ctx->time_base.den = 24;
enc_ctx->time_base.num = 1;
enc_ctx->gop_size = 8; /* emit one intra frame every twelve frames at most */
enc_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
enc_ctx->max_b_frames = 0;
enc_ctx->has_b_frames = 0;
av_opt_set(enc_ctx->priv_data, "preset", "slow", 0); ///
av_opt_set(enc_ctx->priv_data, "tune", "zerolatency", 0);
enc_ctx->bit_rate = br ;
enc_ctx->rc_min_rate = br ;
enc_ctx->rc_max_rate = br ;
enc_ctx->bit_rate_tolerance = br;
enc_ctx->rc_buffer_size = br;
enc_ctx->rc_initial_buffer_occupancy = enc_ctx->rc_buffer_size*3/4;
enc_ctx->rc_buffer_aggressivity = (float)1.0;
enc_ctx->rc_initial_cplx = 0.5;
enc_ctx->i_quant_factor = -1;
基本设置,固定码率150k,enc_ctx->i_quant_factor默认为 -1,编码结果
[libx264 @ 005cbb40] frame I:38 Avg QP:36.34 size: 4044
[libx264 @ 005cbb40] frame P:262 Avg QP:35.27 size: 339
I的质量比P还差。
ffmpeg中i_quant_factor的解释
/**
* qscale factor between P and I-frames
* If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
* If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
* - encoding: Set by user.
* - decoding: unused
*/
float i_quant_factor;
enc_ctx->i_quant_factor = -0.7;时:
[libx264 @ 006ecb40] frame I:38 Avg QP:36.11 size: 4067
[libx264 @ 006ecb40] frame P:262 Avg QP:34.89 size: 337
enc_ctx->i_quant_factor = -1.4;时
[libx264 @ 0276cb40] frame I:38 Avg QP:35.34 size: 4439
[libx264 @ 0276cb40] frame P:262 Avg QP:35.17 size: 280
enc_ctx->i_quant_factor = -2;时
[libx264 @ 02beda40] frame I:38 Avg QP:34.59 size: 4155
[libx264 @ 02beda40] frame P:262 Avg QP:33.71 size: 323
i_quant_factor 相当于x264的参数ipratio
默认值:1.40
修改I帧量化值相比P帧量化值的目标平均增量。越大的值会提高I帧的品质。
原因估计:应该是i_quant_factor 绝对值越大,I帧质量越好。还有猜测可能是码率不够,限制了I帧的比特数。
设置固定码率300k时:
[libx264 @ 016dbb40] frame I:38 Avg QP:29.21 size: 6367
[libx264 @ 016dbb40] frame P:262 Avg QP:29.60 size: 622
ffmpeg,X264编码结果I帧QP比P帧还大的更多相关文章
- WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...
- ffmpeg音频编码
在弄音频采集时,需要设置缓存的大小,如果只是简单的采集和直接播放PCM数据,缓存的大小一般不影响播放和保存. 但是,如果需要使用FFMpeg音频编码,这时,音频缓存的大小必须设置av_samples_ ...
- (转)x264 编码流程
转自:http://alphamailpost.blog.163.com/blog/static/20111808120128111160728/ http://www.usr.cc/thread-5 ...
- X264编码流程详解(转)
http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...
- 视频x264编码浅析
声明 x264_param_t 结构体变量: x264_param_t params; x264_param_default_preset(¶ms, "ultrafast&q ...
- ffmpeg x264编译与使用介绍
问题1:我用的是最新版本的ffmpeg和x264,刚刚编译出来,编译没有问题,但是在linux 环境使用ffmpeg的库时发现报错error C3861: 'UINT64_C': identifier ...
- ffmpeg x264安装
fmpeg安装第三方编码器(encoder)库,ffmpeg编码h264(完) ffmpeg安装第三方编码器(encoder)库 关键词:ffmpeg.编码h264.第三方encoder 安装好了ff ...
- JavaCV FFmpeg AAC编码
上次成功通过FFmpeg采集麦克风的PCM数据,这次针对上一次的程序进行了改造,使用AAC编码采集后的数据. (传送门) JavaCV FFmpeg采集麦克风PCM音频数据 采集麦克风数据是一个解码过 ...
- Android camera采集视频 X264编码
参考 http://blog.csdn.net/zblue78/article/details/6058147 感谢 ExperiencesOfCode 硬件平台:CPU Intel G630 @2. ...
随机推荐
- SharePoint自动化系列——Content Type相关timer jobs一键执行
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 背景: 在SharePoint Central Administration->Monito ...
- mysqli报错(HY000/2002)
Warning: mysqli::mysqli(): (HY000/2002): 没有那个文件或目录 解决:把localhost 换成127.0.0.1就好了.
- 2016年6月26日 星期日 --出埃及记 Exodus 14:23
2016年6月26日 星期日 --出埃及记 Exodus 14:23 The Egyptians pursued them, and all Pharaoh's horses and chariots ...
- MVC api json 格式
输出json var formatters = config.Formatters.Where(formatter => formatter.SupportedMediaTypes.Where( ...
- VC++ 监控指定目录改变
转载:http://www.cnblogs.com/doublesnke/archive/2011/08/16/2141374.html VC++实施文件监控:实例和详解 相关帮助: http://h ...
- Java-集合框架整理
一.List 接口集合: 1.优势以及特点:有序,允许重复元素 . 2.实现类: * AarrayList 类:不同步,可变长度数组,倍增率为 1/n ; * LinkedList 类:不同步,链表结 ...
- 【Unity3D游戏开发】基础知识之Tags和Layers (三二)[转]
Tags和Layers分别表示是Unity引擎里面的标签和层,他们都是用来对GameObject进行标识的属性,Tags常用于单个GameObject,Layers常用于一组的GameObject.添 ...
- 用@RequestMapping映射请求
DispatcherServlet接受一个web请求之后,将请求发送给@Controller注解声明的不同控制器类. 这个调度过程依赖控制器类及其处理程序方法中声明的各种@RequestMapping ...
- C#中Monitor和Lock以及区别
Monitor对象 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...
- weblogic启动报错
重启了一次linux服务器后,weblogic启动莫名报错,查看日志发现说部署的项目有个bean类无法加载, 1.然后手动删除 已经部署的项目,先在 domais/servers/AdminServe ...