文档章节

[直播一揽子]x264参数的解释

拉风的道长
 拉风的道长
发布于 2016/07/15 17:49
字数 1874
阅读 221
收藏 1
 

x264_param_default(&param);//设置默认参数具体见common/common.c
    int yuvsize=m_height*m_width*3/2;
    param.i_width=m_width;
    param.i_height=m_height;
    param.i_keyint_min=5;//关键帧最小间隔
    param.i_keyint_max=250;//关键帧最大间隔
    param.b_annexb=1;//1前面为0x00000001,0为nal长度
    param.b_repeat_headers=0;//关键帧前面是否放sps跟pps帧,0 否 1,放    
//    param.analyse.i_subpel_refine=7;//压缩级别1~7
//    param.i_log_level=X264_LOG_NONE;//设置显示信息级别

    //==============================================================
    ////pX264Param = &param;
    ////int yuvsize=m_height*m_width*3/2;
    //* 使用默认参数,在这里因为我的是实时网络传输,所以我使用了zerolatency的选项,使用这个选项之后就不会有delayed_frames,如果你使用的不是这样的话,还需要在编码完成之后得到缓存的编码帧   
    ////x264_param_default_preset(pX264Param, "ultrafast"/*"veryfast"*/, "zerolatency");  

    //* cpuFlags   
    ////pX264Param->i_threads  = X264_THREADS_AUTO/*X264_SYNC_LOOKAHEAD_AUTO*/;//* 取空缓冲区继续使用不死锁的保证.  
    ////pX264Param->i_log_level = X264_LOG_NONE; 
    //* 视频选项      
    ////pX264Param->i_width   = Width; //* 要编码的图像宽度.   
    ////pX264Param->i_height  = Height; //* 要编码的图像高度   
    //pX264Param->i_frame_total = 0; //* 编码总帧数.不知道用0.   
    //pX264Param->i_keyint_max = 10;   

    //* 流参数   
    ////pX264Param->i_bframe  = 0;  
//     pX264Param->b_open_gop  = 0;  
//     pX264Param->i_bframe_pyramid = 0;  
//     pX264Param->i_bframe_adaptive = 0; 

    //* Log参数,不需要打印编码信息时直接注释掉就行   
    //pX264Param->i_log_level  = X264_LOG_DEBUG;  

    //* 速率控制参数   
    //pX264Param->rc.i_bitrate = 1024 * 10;//* 码率(比特率,单位Kbps)  

    //* muxing parameters   
    ////pX264Param->i_fps_den  = 1; //* 帧率分母   
    ////pX264Param->i_fps_num  = 25;//* 帧率分子   
//     pX264Param->i_timebase_den = pX264Param->i_fps_num;  
//     pX264Param->i_timebase_num = pX264Param->i_fps_den;  
    /*
    //设置x264输出中最大、最小的IDR帧(亦称关键帧)间距。
    //最大间距默认值(fps的10倍)对大多数视频都很好;最小间距与fps相等
    pX264Param->i_keyint_max = 150;
    pX264Param->i_keyint_min = 50;
    //* 设置Profile.使用Baseline profile   
    x264_param_apply_profile(pX264Param, x264_profile_names[0]);  
    
    //完全关闭自适应I帧决策。
    pX264Param->i_scenecut_threshold = 0;
    //设置亚像素估计的复杂度。值越高越好。级别1-5简单控制亚像素的细化力度。级别6给模式决策开启RDO(码率失真优化模式),
    //级别8给运动矢量和帧内预测模式开启RDO。开启RDO会显著增加耗时。
    //使用小于2的值会开启一个快速的、低质量的预测模式,效果如同设置了一个很小的 –scenecut值。不推荐这样设置。
    //pX264Param->analyse.i_subpel_refine = 1;
    //为mb-tree ratecontrol(Macroblock Tree Ratecontrol)和vbv-lookahead设置可用的帧的数量。最大可设置为250。
    //对于mb-tree而言,调大这个值会得到更准确地结果,但也会更慢。
    //mb-tree能使用的最大值是–rc-lookahead和–keyint中较小的那一个。
    pX264Param->rc.i_lookahead = 0; 
    //i_luma_deadzone[0]和i_luma_deadzone[1]分别对应inter和intra,取值范围1~32
    //测试可以得知,这连个参数的调整可以对数据量有很大影响,值越大数据量相应越少,占用带宽越低.
    pX264Param->analyse.i_luma_deadzone[0] = 32;
    pX264Param->analyse.i_luma_deadzone[1] = 32;
    //码率控制模式有ABR(平均码率)、CQP(恒定质量)、CRF(恒定码率).
    //ABR模式下调整i_bitrate,CQP下调整i_qp_constant调整QP值,范围0~51,值越大图像越模糊,默认23.
    //太细致了人眼也分辨不出来,为了增加编码速度降低数据量还是设大些好,CRF下调整f_rf_constant和f_rf_constant_max影响编码速度和图像质量(数据量);
    pX264Param->rc.i_rc_method = X264_RC_CQP;
    pX264Param->rc.i_qp_constant = 30;
    //自适应量化器模式。不使用自适应量化的话,x264趋向于使用较少的bit在缺乏细节的场景里。自适应量化可以在整个视频的宏块里更好地分配比特。它有以下选项:
    //0-完全关闭自适应量化器;1-允许自适应量化器在所有视频帧内部分配比特;2-根据前一帧强度决策的自变量化器(实验性的)。默认值=1
    pX264Param->rc.i_aq_mode = 0;
    //为’direct’类型的运动矢量设定预测模式。有两种可选的模式:spatial(空间预测)和temporal(时间预测)。默认:’spatial’
    //可以设置为’none’关闭预测,也可以设置为’auto’让x264去选择它认为更好的模式,x264会在编码结束时告诉你它的选择。
    pX264Param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_NONE;
    //开启明确的权重预测以增进P帧压缩。越高级的模式越耗时,有以下模式:
    //0 : 关闭; 1 : 静态补偿(永远为-1); 2 : 智能统计静态帧,特别为增进淡入淡出效果的压缩率而设计
    //pX264Param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
    //设置全局的运动预测方法,有以下5种选择:dia(四边形搜索), hex(六边形搜索), umh(不均匀的多六边形搜索)
    //esa(全局搜索),tesa(变换全局搜索),默认:’hex’
    pX264Param->analyse.i_me_method = X264_ME_DIA;
    //merange控制运动搜索的最大像素范围。对于hex和dia,范围被控制在4-16像素,默认就是16。
    //对于umh和esa,可以超过默认的 16像素进行大范围的运行搜索,这对高分辨率视频和快速运动视频而言很有用。
    //注意,对于umh、esa、tesa,增大merange会显著地增加编码耗时。默认:16
    pX264Param->analyse.i_me_range = 4;
    //关闭或启动为了心理视觉而降低psnr或ssim的优化。此选项同时也会关闭一些不能通过x264命令行设置的内部的心理视觉优化方法。
    //pX264Param->analyse.b_psy = 0;
    //Mixed refs(混合参照)会以8×8的切块为参照取代以整个宏块为参照。会增进多帧参照的帧的质量,会有一些时间耗用.
    //pX264Param->analyse.b_mixed_references = 0;
    //通常运动估计都会同时考虑亮度和色度因素。开启此选项将会忽略色度因素换取一些速度的提升。
    pX264Param->analyse.b_chroma_me = 1;
    //使用网格编码量化以增进编码效率:0-关闭, 1-仅在宏块最终编码时启用, 2-所有模式下均启用.
    //选项1提供了速度和效率间较好的均衡,选项2大幅降低速度.
    //注意:需要开启 –cabac选项生效.
    //pX264Param->b_cabac = 1;
    //pX264Param->analyse.i_trellis = 1;
    //停用弹性内容的二进制算数编码(CABAC:Context Adaptive Binary Arithmetic Coder)资料流压缩,
    //切换回效率较低的弹性内容的可变长度编码(CAVLC:Context Adaptive Variable Length Coder)系统。
    //大幅降低压缩效率(通常10~20%)和解码的硬件需求。
    //pX264Param->b_cabac = 1;
    //pX264Param->i_cabac_init_idc = 0;
    //关闭P帧的早期跳过决策。大量的时耗换回非常小的质量提升。
    pX264Param->analyse.b_fast_pskip = 0;
    //DCT抽样会丢弃看上去“多余”的DCT块。会增加编码效率,通常质量损失可以忽略。
    pX264Param->analyse.b_dct_decimate = 1;
    //open-gop是一个提高效率的编码技术。有三种模式:none-停用open-gop;normal-启用open-gop;
    //bluray-启用open-gop。一个效率较低的open-gop版本,因为normal模式无法用于蓝光编码.
    //某些解码器不完全支援open-gop资料流,这就是为什么此选项并未默认为启用。如果想启用open-gop,应该先测试所有可能用来拨放的解码器。
    pX264Param->b_open_gop = 1;
    //完全关闭内置去块滤镜,不推荐使用。
    //调节H.264标准中的内置去块滤镜。这是个性价比很高的选则, 关闭.
    //pX264Param->b_deblocking_filter = 1;
    //pX264Param->i_deblocking_filter_alphac0 = 0;
    //pX264Param->i_deblocking_filter_beta = 0;
    //去掉信噪比的计算,因为在解码端也可用到.
    pX264Param->analyse.b_psnr = 0; //是否使用信噪比.
    */
    //限制输出文件的profile。这个参数将覆盖其它所有值,此选项能保证输出profile兼容的视频流。
    //如果使用了这个选项,将不能进行无损压缩。可选:baseline,main,high
    ////x264_param_apply_profile(pX264Param, "baseline");

© 著作权归作者所有

拉风的道长
粉丝 54
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
[直播一揽子]x264 for Android 的编译

终于进入正题了。前提条件是你需要有ndk。我这边下载的是r11b的版本。其他的版本也不会出问题。但是为什么不用最新的呢? 在Linux/Mac下,开始x264的编译工作。 首先从官网上下载最新的x26...

拉风的道长
2016/07/10
330
0
[直播一揽子]编码构思和套路

在上篇文章中,我确定了使用的三个库: 也许是我的编码习惯:先各个击破,再合并整合。我决定也采用这样的方式。这样做的好处很明显: 1.考虑范围缩小。比如,在做x264的编码时,无需考虑aac...

拉风的道长
2016/07/10
34
0
x265编译安装及与x264对比

下载x265源文件 下载页面http://www.videolan.org/developers/x265.html。 2. 编译 注:编译需要cmake,参考在CentOS安装CMake 然后根据readme,编译x265, cmake ./source make OK,编译过程...

张旭0512
2014/03/27
0
0
请教在线直播视频如何转换成x264的编码?FMS+C#

需求:我现在通过FMS(fms走的协议是rtmp)在网站上已经实现了视频音频的在线视频直播功能,听别人说x264的视频编码不管在传输还是质量上都有提升,现在想用C或C++做个x264的视频编码插件,把该...

wj02107
2012/01/30
973
1
Proletarian/PushRtmp

#PushRtmp 1:推流功能已实现了 未封装成一个简单易用的库(后续会封装)。 2:喜欢研究aac h264封装rtmp流的 可以调试研究下实现。代码比较少 不像OBS那样复杂的代码。 3:下载windows版本的...

Proletarian
2015/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

两数的最大公约数

hello,复习一下数学知识! 最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 因为之前做一个小功能,需要先计算一下数组的最大公约数,所以我就想记录一下...

woshixin
今天
3
0
学习Node.js的电子书大全

在这里,与大家分享一批很有用的 Node.js 的电子书资源。Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写...

jay603
今天
66
0
《伟大的博弈》读后感作文4100字

《伟大的博弈》读后感作文4100字: 五一小长假,作为工厂员工,没能跟上大家放假的步伐,窝家里两天没出门,逼着自己看完《伟大的博弈》,感触颇多。似乎不能消化,先记录第一遍作为幼稚的见...

原创小博客
昨天
5
0
单点登录-基于Redis+MySQL实现单点登录(SSO)

1. 为什么要用单独登录? 主要便于公司内部多系统统一认证授权管理,一次登录可访问多个跨域系统,也同时更加方便统一管理用户登录(员工离职需要拿掉登录权限、统计所有用户对系统的登录请求...

秋日芒草
昨天
2
0
827. Making A Large Island

思想: 将所有连通的 1 分成一个组,分配编号,然后使用BFS统计1的个数,得到这个组的面积。 遍历格子里所有为 0 的元素,检查四个方向的1所在的组并加上这个组面积。于是得到当前元素为 0 ...

reter
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部