x264实时编码的码率控制--一个简单的QP调节方法
X264编码参数设置
X264编码参数设置By:林立翔standfly@北京邮电大学多媒体通信中心2011-11一,X264版本本项目使用X264编码版本为20091008-2245,附带FFMPEG解码器用以验证编码效果。
二,编译条件本测试在windows xp平台下的visual studio 2008 编译环境下进行三,软件配置1. 打开X264CODEC文件夹,双击X264CODEC解决方案,用Visual Studio 2008打开工程文档2. 单击左上角解决方案资源管理器中X264ENCODE解决方案—>击右键 左击属性,进入X264ENCODE属性页—>选择配置属性—>调试—>在右栏的命令参数中输入所需的编码参数。
四,编码参数设置1.x264基本参数设置格式[--参数名参数值 ...] --output 输出文件输入文件其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。
观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号。
此外,还有短参数模式。
这是为了简化某些常用参数名设计的。
一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。
注意此时这个字母区分大小写。
在--fullhelp 列表里,有短参数的参数的短参数都列在此参数的前面。
2.本测试预设的编码参数--crf 23 --tune psnr --preset medium --output X:\xxx\xxx.264 --fps 25 X:\广科院测试序列\左测试序列1.yuv 1920x1080其中,1).crfcrf为一种根据片子质量自动分配码率的 vbr 码率控制方式。
可用的值从 1到 51,越小编码质量越好,码率越高。
一般使用 16 到 24可以为浮点。
本测试预采用此参数或许不同码率下的编码数据。
X264用法
----
@cd /d "%~dp0"
x264 -p2 --stat "XXX.stat" -B XXXX [option] -o "%~dpn1_p2.mp4" "%~1"
@pause
注意一般pass 1 都加上--slow-firstpass这个参数。
pass 1压完看下视频是否满足自己要求,不满意就继续
输入:
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由ffms或lavf打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。
输出:
x264可以输出没有封装的H.264视频流,扩展名是.264;matroska视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。
--bitrate 1000 (以1000kbps码率为例)
>x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs
ssim:为提高ssim做了优化的参数;
fastdecode:可以快速解码的参数;
zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。
中文版MeGUI的x264编码配置
中文版MeGUI的x264编码配置在MeGUI用内置工具AVS创建一个简单脚本(这里暂时不介绍AVS的各种滤镜使用参数),要求在点击DirectShowsource(手工、专业)能弹出视频预览窗就可以保存AVS了。
此时内建的AVS会自动加载到MeGUI 主界面,进入本文主题压制参数x264配置。
用内置工具建AVS脚本保存后会自动加载到MeGUI界面(AVS的保存最好和视频同在一起)视频输出,注意MeGUI分配的路径是和源视频同一处的,如果本身源视频就是mkv的那么视频输出要改一下视频名称或是存放路径,以免被覆盖转制出错。
没有勾选―显示高级设置‖英文―Show Advanced Setting‖设置界面没有显示完全。
勾选―显示高级设置‖后,配置界面完全显示出来,主要主要面板:编码模式有这么几种:ABR \ Const.Quantizer \ 2pass –1st pass \…… \ Const.Quality,说说常用的,ABR:平均码率,做动画基本不用,Const Quality:恒定质量模式(追求质量不计码率和容量大小的片子使用),一次编码,做动画基本不用,xPass:x次处理,能做到动态高码率,静态低码率,看到很多动画在激烈的打斗场面的时候都会有很高的码流,甚至有10m,20m的说,但是,在静态画面的时候码流较低,这是为了使体积都用在最需要的时候,如果激烈战斗的动态画面码率低的话那么就什么都看不清楚了…所以2pass 对于压缩后片子的整体质量有所提高。
对于那么多的编码模式,最终要用的都是:Auto-2PASS,两次的编码压缩使得码率低,体积更小,质量也高,但是消耗的时间是CQ模式的大约一倍,CQ模式相当于只跑了第2PASS,而2PASS模式还要跑完第一PASS才跑第二PASS。
(加入列队编码时注意到,自动二次编是要跑完两个x264才完成视频输出,时间久就是因为这样来的。
)BITRATE:码率设置,以kbps为单位,片源好以1500kbps以上压制成1024X576的片子体积能减三倍以上,当然码率越高和源的差别越小。
X264简单配置详解
X264 简单配置详解1、X264 介绍X264 是一个基于 H264 的免费开源的视频编码器,属于后起之秀,采用x264 编解码的视频文件,相比较 xvid 或者其它流行的编解码器转换效率和转换后的画面质量都更加优异,已经受到众多非编人士的青睐。
2、Basic 基本配置preset 预设:通过preset 的参数调节编码速度和质量的平衡。
preset 预设参数类似于 WinRAR 的压缩方式参数,参数值有:UltraFast、SuperFast、VeryFast、Faster、Fast、Medium、Slow、Slower、VerySlow、Placebo。
从快到慢,参数越来越慢,越慢压缩比越高,消耗的时间也越长,默认是 Medium。
Tuning 优化:特别的情况时可以指定片子的类型和视觉优化的参数。
默认值为None,没有特殊要求的不用设置此项。
Tuning 的参数值有:●f ilm:电影、真人类型;●a nimation:动画类型;●g rain:需要保留大量的颗粒时使用;●s tillimage:静态图像编码时使用;●p snr:为提高psnr 做了优化的参数;解释:峰值信噪比(PSNR),是一种评价图像的客观标准。
●s sim:为提高 ssim 做了优化的参数;解释:一种衡量两幅图像相似度的指标,其值越大越好,最大为 1,经常用到图像处理中,特别在图像去噪处理中在图像相似度。
Profile 画质级别:X264 有四种画质级别,分别是baseline, extended, main, high;默认为:Auto(自动),其他参数值的含义:(1)Baseline Profile:基本画质。
支持 I/P 帧,只支持无交错(Progressive)和 CAVLC;(2)Extended profile:进阶画质。
支持 I/P/B/SP/SI 帧,只支持无交错(Progressive)和 CAVLC;(3)Main profile:主流画质。
X264-libx264编码库
X264-libx264编码库X264编码库libx264实现真正的视频编解码,该编解码算法是基于块的混合编码技术,即帧内/帧间预测,然后对预测值变换、量化,最后熵编码所得。
编码帧的类型分为I帧(x264_type_i)、P帧(x264_type_p)、B帧(x264_type_b),在H264中叫做图像⽚Slice。
X264把整帧图像看作⼀个Slice,⽚中有slice_type_i、slice_type_p、slice_type_b之分。
I帧只有slice_type_i,P帧有slice_type_i、slice_type_p,B帧三种⽚都有。
X264的H264视频编码过程可以分为三个步骤:⾸先根据规则判定当前帧的编码类型,如果是B帧,要缓冲存放、获取;然后对待编码图像进⾏帧内预测、帧间预测、整数DCT变换、量化和熵编码;最后把压缩的H264数据进⾏NAL层打包输出。
X264编码器有关的重要结构体:x264_image_t:实际参与编码的编码帧图像信息。
typedef struct{int i_csp; //图像空间颜⾊int i_plane; //图像平⾯数⽬int i_stride[4]; //每个图像平⾯的跨度,也就是每⼀⾏数据的字节数uint8_t *plane[4]; //每个图像平⾯存放数据的起始地址,plane[0]是Y平⾯,plane[1]是U平⾯,plane[2]是V平⾯}x264_image_t; //待编码的图像x264_picture_t:x264编码器定义便于控制的图像帧,描述⼀帧的特征。
包含x264_image_t和x264_param_t结构体。
typedef struct{int i_type; //帧的类型,初始化为auto,在编码过程⾃⾏控制int i_qpplus1; //此参数减1代表当前帧的量化参数值int i_pic_struct; //帧的结构类型int b_keyframe; //输出是否是关键帧int64_t i_pts; //⼀帧的显⽰时间戳int64_t i_dts; //输出解码时间戳x264_param_t *param;x264_image_t img;x264_image_properties_t prop;x264_hrd_t hrd_timing;void *opaque;} x264_picture_t; //x264编码视频帧x264_param_t:初始化编码器。
X264参数设置(1)
0
设置VBV模式的最大码率,强烈建议如果使用,则用2-pass bitrate
Vbv-buffsize
0
设置VBV的最大Buffer大小
Vbv-init
0
初始化buffer值
qpmin
10
Qp最小量化值,qp值越小,视频越清晰,码率越高,一般qp小于16即接近无损压码
qpmax
Aq-mode
1
0:不使用AQ自适应模式,
1:使用
推荐:使用缺省值
Beta deblocking值越低,被去块化(deblock)的方块越少。增加Beta值,环状物(ringing)就越少,而降低Beta则DCT块越少(矛盾)?。/showthread.php?t=109747
如果你不需要编码很细,不介意偶尔的块,可以用-2:-1;如果你喜好更明亮的画面,且不介意一点点模糊,那就用1:2;动画则用低beta值;推荐用缺省值
X264参数设置(1)
X264参数设置
注:I帧:关键帧,P帧:预报帧,B帧:I帧和P帧之间的双向插值帧
名称
缺省值设置IDR帧的最大间隔为250帧,IDR帧就是可备用于拖拽的帧,IDR帧一定是I帧,反之不成立。最好是设成帧率的10倍。显然改值越小,P,B帧越少。
min-keyint
interlace
无
交错编码,无详细说明,缺省值
以下是码率控制
码率控制方法有三种:qp, bitrate, crf,他们是互斥的。三种方法目标不同:qp:固定量化子,bitrate:固定文件大小,crf固定视频“质量”
qp
无
固定量化模式(CQ),数值是针对P帧的量化值,I,B帧则根据ipratio和pbratio算出;0值表示无损压缩;推荐使用crf方法替代qp;值越小越清晰。
码率控制
X264码率控制流程分析码率控制的理论知识:码率控制的目的和意义:图像通信中码率控制的目的:通过调节编码参数,控制单位时间内的编码视频流的数据量,以使产生的比特流符合各种应用的需求。
视频压缩的效率和视频内容有很大的关系,对于变化多样的画面,视频编码的输出的码流变化较大,在信道环境不好的时候就容易导致解码端显示的质量的不稳定。
率失真理论:由于传输带宽和存储空间的限制,视频应用对压缩比有较高的要求。
而无损编码较低的压缩比无法满足视频在实际应用中的需求。
但如果给视频引入一定程度的失真,通常可以获得较高的压缩比。
率失真理论对有损压缩编码下的失真和编码性能之间的关系的描述,为码率控制的研究提供了坚实的理论依据。
率失真理论主旨是描述编码失真度和编码数据速率的关系。
该理论建立在图像是连续的基础上的,在有限数据速率下,由于存在量化误差,必然存在失真。
当使用有损编码方法时,重建图像g(x,y)和原始图像f(x,y)之间存在差异,失真度D的函数形式在理论上是可以根据需要自由选取的,在图像编码中,D 常用均方差形式表示的,典型的率失真曲线。
R(D)为D的凸减函数。
对于怎么选择哪个函数的率失真效果更好,则是比较哪个函数的率失真函数更为接近典型的率失真函数的曲线。
x264码率控制方法:采用的码率控制算法并没有采用拉格朗日代价函数来控制编码,而是使用一种更简单的方法,即利用半精度帧的SATD(sum of absolute transformed difference)作为模式选择的依据。
SATD 即将残差经哈德曼变换的4×4块的预测残差绝对值总和,可以将其看作简单的时频变换,其值在一定程度上可以反映生成码流的大小。
SATD是将残差经哈达曼变换4*4块的预测残差绝对值总和。
自适应宏块层码率控制策略:X264的宏块没有任何码率控制的机制,其在帧层得到一个QP后,属于该帧的所有宏块都用着统一的QP进行量化。
码率控制性能测度:1、比特率误差|ABR-TBR|/TBR ,越小越好。
[VCB-Studio][教程09]x264参数设置
[VCB-Studio][教程09]x264参数设置VCB-Studio教程09 x264参数设置0. 前言本教程旨在讲述x264参数设置的技巧,并侧重于vcb-s定位的使用:10bit,动漫,高码率,高参数。
对于非这类定位的压制,虽有叙述但不详细。
本教程请搭配MeGUI的参数设置面板一起阅读:本教程会按照标签卡(Main->Frame Type->…->Misc)分别讲解,每个标签卡内,按照从左上到左下,到右上到右下的顺序,讲述每个参数的使用,并给出它们在批处理命令行中的写法。
或者,你完全可以在MeGUI中调好,然后复制下方的命令行(去掉开头的program和结尾的--output "output" "input")到批处理。
后续会有教程讲述低码率下8bit压制的技巧。
不要将本篇中讲述的任何参数和逻辑套用在x265上。
1. Main标签卡,x264基础设置Main标签卡里面都是最主要的参数,新手上路,掌握Main标签卡的内容,就足以去一些普通字幕组担任压制了。
Encoding Mode(rc,ratecontrol,码率控制方法):ABR: Average Bit Rate,指定一个平均码率。
x264会试图让整部视频的平均码率达到你的给定值。
如果视频前后编码复杂度相差很大,那么码率的时间分配效果就很差,尤其是到了结尾,为了达到预定的码率值,x264经常不得不采用过高/过低的码率。
所以一般不推荐这个模式。
命令行: --bitrate 1000,1000是码率,单位Kbps。
Const quantizer:cq模式,固定量化模式。
所有P帧(下文有讲)采用一个固定的Quantizer。
Quantizer, 量化,是一种衡量图像压缩程度的方法,用0-69的浮点数表示,0为无损。
图像被压缩的越多,量化值越大,码率越低,注意量化值不一定代表目视质量,比如说一个纯色的图像可以以很高的量化值被量化,占用的体积很小,而一个很复杂的图像就算量化值不高,但是压缩后观感也可能很差。
x264编码器api调用时参数设置
x264 编码器API调用时的参数设置x264DLL在调用时主要需要调整的参数包括:第一,profile,也就是使用baseline还是main,还是high编码。
可以通过该接口设置x264_param_apply_profile();第二, 编码复杂度param.i_level_idc=30;第三,图像质量控制param.rc.f_rf_constant = 25;param.rc.f_rf_constant_max = 45;rc.f_rf_constant是实际质量,越大图像越花,越小越清晰。
param.rc.f_rf_constant_max ,图像质量的最大值。
第四, 码率控制一开始我使用恒定码流设置,无论我怎么设置,都无法控制实际码流,后来换成平均码流后,就行了。
param.rc.i_rc_method = X264_RC_ABR;//参数i_rc_method表示码率控制,CQP(恒定质量),CRF(恒定码率),ABR(平均码率)param.rc.i_vbv_max_bitrate=(int)((m_bitRate*1.2)/1000) ; // 平均码率模式下,最大瞬时码率,默认0(与-B设置相同)param.rc.i_bitrate = (int)m_bitRate/1000;x264使用的bitrate需要/1000。
第五,使用实时视频传输时,需要实时发送sps,pps数据param.b_repeat_headers = 1; // 重复SPS/PPS 放到关键帧前面该参数设置是让每个I帧都附带sps/pps。
第六. I帧间隔我是将I帧间隔与帧率挂钩的,以控制I帧始终在指定时间内刷新。
以下是2秒刷新一个I帧param.i_fps_num = (int)m_frameRate;param.i_fps_den = 1;param.i_keyint_max = m_frameRate * 2;第七,编码延迟在使用中,开始总是会有编码延迟,导致我本地编码立即解码回放后也存在巨大的视频延迟,后来发现设置x264_param_default_preset(¶m, "fast" , "zerolatency" );后就能即时编码了。
数字音视频技术:码率控制
数字⾳视频技术:码率控制⼀. 概述1.1 来源及其作⽤为什么要使⽤码率控制?这个问题是由现实产⽣的。
在传输压缩编码视频的时候,必须要考虑两个问题:视频质量和传输带宽,如果带宽⼤,肯定要尽可能传输质量更好的视频;如果带宽低,则需要提⾼压缩⽐,减⼩码流;如果带宽动态变化,那么码流也需要动态改变来适应带宽,总之,码流与带宽紧密相关。
与此同时,我们希望尽可能的得到⾼清晰的还原图像,所以在能接受的视频质量范围内对视频尽可能的压缩来提⾼带宽利⽤率是码率控制的根本。
码率控制的来源知道以后,它的作⽤也就很明显,就是提⾼带宽利⽤率,在保持视频还原清晰度的情形下,尽可能的节省带宽。
视频编码(有损)的⽬标是尽可能多的节省⽐特(码率)的同时尽量保持视频质量,码率控制是平衡码率和质量的重要⼯具。
1.2 ⾯临的问题码率控制是个说起来简单做起来的事情。
之前已经总结过,可以从两个⽅⾯来理解码率控制,⼀是从内容的率失真优化⾓度考虑量化与码率关系,⼆是从信道传输和转移概率的⾓度来分析码率和编码模式的关系。
这两个⽅向都有同样的⼀个问题,与“先有鸡还是先有蛋”类似。
以QP和R的关系为例,为了得到可控的码流,我们需要提前控制QP,但是QP⼜依赖码流来计算给出,所以这个先后问题变成⼀个死循环,需要找到⼀个突破点。
1.3 主要发展为了解决先有鸡还是先有蛋的问题,我们找到⼀个突破⼝,既然理论的⽅法被证明是很难⾛通,那么可以选择⾛数值模拟的⽅法,通过⼀系列的实验,得到⼀系列的经验公式,尤其是选取⼀个合适的初始值,进⽽破解鸡还是蛋的问题。
在选择实验模拟这条路之后,突然有了很多的思路可以去做,⾸先是和理论结合最紧密的部分:概率分布。
通过计算不同概率分布下的率失真函数,得到⼀系列经验公式和参考模型,在利⽤DCT变化对亮度和⾊度系数进⾏处理后,最优模拟是拉普拉斯分布以及⼀部分⾼斯分布。
通过计算可以得到常⽤的6中R-D模型,⽽这些基础模型⼜被进⼀步演化成不同的码率控制算法。
x264实时编码的码率控制--一个简单的QP调节方法
x264实时编码的码率控制--一个简单的QP调节方法x264实时编码的码率控制一个简单的QP调节方法在用x264做实时视频,由于用在智能手机上,计算能力有限,网络带宽有限,故设计了一个简单的新的码率控制算法,效果还不错,与大家分享。
一般做实时视频,x264作者推荐用vbv-CBR模式,这样来稳定码流,适应带宽。
但对于嵌入式系统,CBR模式计算量较大。
CBR模式需要进行前期的半精度SATD值计算,以得到图像复杂度,进而得到预计的bits(这一SATD还用在slice type的选择,实际这个计算过程的函数就叫slice_type_decision,在lookaheand_get_frame中);通过预计bits与期望bits的比较得到qscale,进而得到本编码帧的QP。
当然若用上mb_tree,aq_mode 还更复杂。
这一前期的计算过程大致占整个计算量的12%-20%(根据参数的不同),但若略去这步,使用固定QP,码率波动较大。
现设计了一个新的模式,利用帧间的相似性,根据上一帧编码的实际bits与期望bits的差,来调节QP(帧级调整)。
实现上的思路也很简单,利用CQP模式的壳,在每帧编码前再次调节QP。
需要采用参数如下:--bframes 0 不要B帧对于嵌入式,手机等系统,建议采用:--scenecut 0---(不需额外增加i 帧,由于实时不需b帧,故一个GOP组中,只有一个IDR 帧及其余的P帧);--subme 1 1/4精度的SAD值--no-8x8dct (这个是high profile, 不需要,同样可加快编码,节省码流)--partition none 不要划分(可提高编码速度,节省码流,psnr基本不变)其余参数可参见,x264 --preset-veryfast的参数配置;好了接下来是帧级的码流控制,即调节QP;1. 在x264参数中添加新码率控制的参数(get_opt函数),如:--newqp2. 这个newqp与CQP,可以起使用。
视频码率控制类型和内涵(含VBV,HRD)
视频码率控制类型和内涵(含VBV,HRD)在做视频编码时,当我们给编码器设定一个目标码率的时候,编码器内部是怎么达到码率要求的呢?编码器如何合理分配码率,以获得更高的视频质量?这都是码率控制的问题。
x264的码率控制分为帧间级和帧内级,本文介绍帧间级各种码率控制类型,其内涵和使用方法。
1 目的和意义:码率控制有两个目的•兼容传输、播放条件•更高的视频质量1.1 兼容传输、播放条件视频编码中,越高的码率通常可以产生更高的质量。
同时,保持一定质量的情况下,不同复杂度场景需要的码率是不一样的。
如果不进行码率控制,视频的码率会不可控制。
下图是对一段40s 的视频,采用固定量化参数(也就是没有码率控制)编码后的瞬时码率分布。
可以看到,码率的波动很大。
这对于传输是不利的。
码率控制通过调节编码参数,控制单位时间内的编码视频流的数据量,以使产生的比特流符合各种应用的需求。
【图1】固定量化参数,码率分布1.2 更高的视频质量在满足码率要求的前提下,码率控制的另一个目标是更高的视频质量。
如何通过在帧间以及帧内合理分配比特,实现率失真性能优化,是码率控制研究的问题。
2. 分类码率控制可以分为两类:•CBR : constant bit rate, 固定码率•VBR: variable bit rate, 可变码率2.2 恒定码率模式图2是第一节中同样视频用CBR模式编码得到的码率分布图。
可以看到它的码率波动比图1小。
恒定码率不代表每个瞬间的码率都一样,实际上那是不可能的。
恒定码率模式究竟是什么原理,我们在下文会详细展开。
【图2】恒定码率使用固定码率会损害视频质量,但对传输有好处。
2.3 可变码率模式可变码率是一类码率控制算法的统称,它们的特点是局部的码率是可变的。
常用的可变码率子类包括:•abr : average bit rate, 平均码率。
•局部码率是可变的,限制整个文件的的评价码率。
•crf: constant refactor, 恒定质量•把某个恒定的“质量”作为目标,灵活分配码率,最终的码率大小是不确定的。
X264参考手册
X264参考⼿册艺搜简介基本语法:x264 [options]-o outfile infile注意与ffmpeg的输⼊输出⽂件位置恰好相反:ffmpeg[options][[infile options]-i infile]... {[outfile options] outfile}…[]输⼊x264.exe -- NUL C:\input.avs x264 -- /dev/null ~/input.y4m当输⼊视频是原始YUV时,还必须指明分辨率。
你可能也要使⽤--来指定帧率:x264.exe -- NUL -- 25 -- 1280x720 D:\input.yuv x264 -- /dev/null -- 30000/1001 -- 640x480 ~/input.yuv[]预设值Presets为了减少使⽤者花费时间和精⼒在命令⾏上⽽设计的⼀套系统。
[]profile默认值: not setLimit the profile of the output stream. If you specify a profile, it overrides all other settings, so if you use it, you will be guaranteed a compatible stream. If you set this option, you cannot use lossless encoding (-- 0 or -- 0).You should set this if you know your playback device only supports a certain profile. Most decoders support High profile, so there's no need to set this.Values available: baseline, main, high, high10, high422, high444.限制输出流的profile。
x264命令介绍
[X264] [转贴] x264命令介绍——herohero12.21 11:13Q x264命令介绍一语法: x264 [options] -o outfile infile [widthxheight]infile参数是 YUV 4:2:0 格式的,如果编译的时候选择支持AVIS,那么可以是avi格式的。
outfile参数指定输出文件名,格式根据扩展名定义.264 -> H.264码流格式.mp4 -> MP4 ,需要支持GPAC.Options-h, --help 打印帮助。
-I, --keyint <integer> 最大的GOP尺寸是250-i, --min-keyint <integer> 最小的GOP尺寸是25--scenecut <integer> 多少间隔插入I帧(默认40)-b, --bframes <integer> 在I帧和P帧之间B帧的数量(默认0)--no-b-adapt 显示B帧说明--b-bias <integer> 指示B帧如何被使用(默认0)--b-pyramid 保持一些帧的引用--no-cabac 不使用CABAC-r, --ref <integer> 引用帧的数量--nf 不使用loop filter-f, --filter <alpha:beta> Loop filter 的 AlphaC0 和 Beta 参数 [0:0]-q, --qp <integer> 设置QP [26]-B, --bitrate <integer> 设置码率,注意单位是K。
--qpmin <integer> 设置最小QP值 [10]--qpmax <integer> 设置最大QP值 [51]--qpstep <integer> 设置最大QP 步进值 [4]--ratetol <float> 运行变化的码率值 [1.0]--vbv-maxrate <integer> 最大的本地码率 [0]--vbv-bufsize <integer> VBV 缓冲区尺寸 [0]--vbv-init <float> 初始VBV缓冲区占用率 [0.9]--ipratio <float> 在I帧和P帧之间的QP factor [1.4]--pbratio <float> 在P帧和B帧之间的QP factor [1.3]--chroma-qp-offset <integer> 在 chroma和luma之间,QP调整值 [0]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<hero12.21 11:14x264命令介绍二-p, --pass <1|2|3> 激活 multipass ratecontrol:- 1: 创建状态文件- 2: 不重写状态文件- 3: 在文件中显示更多信息--stats <string> 选择2 pass状态是的文件名 [x264_2pass.log]--rceq <string> 码率控制公式 ["blurCplx^(1-qComp)"]--qcomp <float> QP 曲线压缩: 0.0 => CBR, 1.0 => CQP 0.60]--cplxblur <float> 在QP时缩小波动 (从曲线压缩之前) [20.0]--qblur <float> 在QP时缩小波动 (在曲线压缩之后) [0.5]-A, --analyse <string> 分析选项: ["i4x4,p8x8,b8x8"]- i4x4- p8x8, p4x4, b8x8- none, all--direct <string> 指示 MV 预言模式 ["temporal"]- none, spatial, temporal-w, --weightb B帧的预判参数--me <string> 整数象素运动估算模式 ["hex"]- dia: 菱形查找, 半径 1 (fast)- hex: 六边形查找,半径 2- esa: 穷举搜索算法(slow)--merange <integer> 最大的运动向量搜索矩形 [16]-m, --subme <integer> Subpixel运动估算质量: 1=fast, 5=best. [5]--no-chroma-me 在运动估算中忽略色度--level <integer> 指定level(在Annex A定义)--sar width:height 指定宽高的比率--fps <float|rational> 指定帧率--seek <integer> 指定编码的第一帧--frames <integer> 编码的最大帧数量-o, --output 指定输出文件--no-asm 取消所有CPU优化--no-psnr 取消 PSNR 估算--quiet Quiet模式-v, --verbose 打印每一帧的状态--progress 在编码时显示处理指示进度--visualize 在编码视频时显示MB--aud 使用存储分隔符。
x264-高品质H.264编码器
x264-⾼品质H.264编码器H.264 / MPEG-4 AVC 是优秀的视讯编码格式就⽬前已成熟的视讯编码格式⽽⾔,H.264的压缩率是最佳的。
压缩率极⾼,可以只⽤很低 bitrate 提供堪⽤画质。
⽽ x264 为免费开放原始码的 H.264 / MPEG-4 AVC 编码器,是⽬前编码效率最⾼的开放原始码 H.264 编码器。
此⽂只是基础知识,说明只是⼤略⽽已。
H.264:x264: 、索引:#1F: 下载、基本参数设定#2F: GUI - 图形接⼝⼯具接⼝介绍#3F: CLI - 命令列接⼝使⽤教学#4F: CLI - FFmpeg with libx264#5F: 其他 x264 (CLI) 编译版#6F: 常见设备的相容编码参数H.264 ProfilesBaseline Profile (BP)主要⽤于低成本应⽤,对播放设备的性能要求不⾼,此 profile 常见⽤于早期性能较低的⾏动设备 (如 Apple iPod)。
现今⾏动设备性能⽐起以前强⼤许多,此 profile 已经没有什么必要性了。
Main Profile (MP)此 profile 原本是⽤于 SD 分辨率数码电视⼴播,虽然没有实⾏,然⽽被⽤于 HD 分辨率的电视⼴播。
在 2004 年 High Profile 被开发之后,此 profile 已经没有什么必要性了。
早期的⾼性能⾏动播放设备(如 Sony PSP),也是使⽤此 profile。
High Profile (HiP)⽬前使⽤最⼴泛的 profile,由其是 HD 分辨率电视应⽤ (如 Blu-ray / AVCHD 光盘储存、游戏机等电视多媒体播放器、HDTV DVB ⼴播服务)。
现今的⾏动播放设备都可以流畅播放⽤此 profile 的 SD 分辨率影⽚,中阶等级可以上 720p 分辨率,⾼阶甚⾄可上 FullHD (软解可能会有点吃⼒,硬解完全没问题)。
X264编码器设置参数(节选)
X264编码器设置参数(节选)第一个“main”设置编码主要参数:PS:1pass 即仅编码一次,2pass 则为编码两次,3、4…pass 以此类推single pass-Lossless 1pass 无损,生成文件比较大,跟AVI 无损类似。
如非必要,不推荐。
single pass-quantizer-based(CQP) 1pass 恒定量化值,每一类帧采用相同的量化值来量化(停用弹性量化),使得全片的质量大体相近。
速度较CRF 模式更快一点,通常不推荐这个模式。
single pass-ratefactor-based(CRF) 1pass 恒定速率系数,对于体积没有要求的压制,对于相同的视觉品质,CRF 比QP 输出的档案更小,如果只是1pass 的话推荐选用这个模式。
Single pass-bitrate-based(ABR) 1pass 平均比特率,平均码率压制,一次成形。
码率的分配来自即时验算。
通常不推荐这个模式。
Multipass-1st pass 多层渲染?(⊙o⊙)…Multipass-1st pass(fast)多层渲染(快速)Multipass-Nth pass 多层XX?不懂Nth 是啥,反正也用不到。
以上三个貌似是这样选择“Multipass-1st pass ”或“Multipass-1st pass(fast)”执行第一次渲染,之后选择“Multipass-Nth pass”导入“. 264.stats”数据文件,执行第二次渲染,也就是所谓的2pass,话说x264vfw 的2pass 如此弱智?折腾两次···共同期待高手来解疑答惑吧。
选择single pass-ratefactor-based(CRF)与single pass-quantizer-based(CQP)这两种模式下面会有一个调节选项Quantizer/Quality 即为量化值,该数值越小画质越高、码率越高、文件体积越大,默认值为23片源好的话可以把该值加大,但最好不要低于15 或超过28。
x264参数介绍(一、帧类型和码率控制)
/s/blog_4e0869690100xa87.html原文地址:【翻译】x264参数介绍(一、帧类型和码率控制)作者:南无阿弥陀佛【翻译】x264参数介绍(一、帧类型和码率控制)2010年10月2日评论发表评论翻译自:/wiki/X264_Settings,水平有限,勿吝指教。
第二部分:/?p=2206输入用1个绝对路径定义输入文件(或者2个,rawYUV文件)。
如下例:x264.exe -o NUL C:input.avsx264 -o /dev/null ~/input.y4m如果输入文件是rawYUV格式的,还要把分辨率一并输入。
如果开启了比特率控制,还需要输入帧率。
如下例:x264.exe -o NUL –fps 25 D:input.yuv 1280×720x264 -o /dev/null –fps 30000/1001 ~/input.yuv 640×480预设值预设值是x264在r1177版本增加的一个方便的命令行选项。
可以用x264.exe –fullhelp查看所有的命令行帮助。
profile默认:无说明:限制输出文件的profile。
这个参数将覆盖其它所有值,此选项能保证输出profile兼容的视频流。
如果使用了这个选项,将不能进行无损压缩(qp 0 or crf 0)。
可选:baseline,main,high建议:不设置。
除非解码环境只支持main或者baseline profile的解码。
preset默认:medium一些在压缩效率和运算时间中平衡的预设值。
如果指定了一个预设值,它会在其它选项生效前生效。
可选:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo.建议:可接受的最慢的值tune默认:无说明:在上一个选项基础上进一步优化输入。
x264VFW配置详解
x264VFW配置详解上图为x264vfw图形化配置图。
由于没有汉化版本,使得许多使用者受到约束,望而却步。
下面结合配置图做一个能供非专业者参考的详解。
(蓝色字体是专门为非专业视频编辑者建议的推荐设置)注意:当前网络上常见的如A VI;TS;MKV等,这些视频封装格式,它们只是封装容器并视频非编码格式。
采用X246编码时视频分辨率及码率设置:全高清:(1920 x 1080),推荐7,000-8,000 Kbps常用高清:(1280 x 720)推荐5,000-6,000 Kbps普通:(640 x 480)推荐1,000-2,000 Kbps互联网:(320 x 240)推荐300-500 Kbps高清作为一种视频格式,但它却体现了拍摄、编辑、储存、传输、显示、音响效果等许多技术环节。
千万不要简单地认为使用了高清编码格式、使用了高清封装格式、使用了高清推荐的分辨率,渲染出来的视频就一定很清晰!视频是否清晰直接与素材相关,有了高清视频素材,也只能是能渲染出高清视频的第一步!好了,闲话少谈,进入x264vfw正题:H.264又称为MPEG4-A VC,MPEG系列的标准归属于ISO/IEC,但另一方面以制订国际通讯标准为主的机构:ITU-T,在完成H.263(针对视频会议之用的串流视频标准)后展开了更先进的H.264制订,且新制订是与ISO/IEC机构连手合作,由两机构共同成立一个名为JVT(Joint Video Team)的联合工作小组,以MPEG-4技术为基础进行更适于视频会议(Video Conference)运用的衍生发展,也因为是联合制订,因此在ITU-T方面称为H.264,在ISO/IEC的MPEG方面就称为MPEG-4 Part 10(第10部分,也叫ISO/IEC 14496-10),MPEG-4 Part 10的另一个代称是MPEG-4 A VC(Advanced Video Coding,先进视频编码),多个名称其实是一个意思,即H.264=MPEG-4 Part 10=ISO/IEC 14496-10=MPEG-4 A VC。
FFmpeg-X264-编码参数
FFmpeg X264编码参数1.目录1.码率控制 (1)2.X264的preset和tune (2)3.编码延时建议 (2)4.ffmpeg编码参数和x264参数对照 (3)5.x264参数说明 (6)2.码率控制X264提供三种码率控制的方式:bitrate, qp, crf。
这三种方式是互斥的,使用时设置其中之一即可。
(1)bitratex264会尝试把给定的位元率作为整体平均值来编码。
这意味着最终编码文件的大小是已知的,但最终的品质未知。
此选项通常与-pass(两阶段编码)一起使用。
注意,ffmpeg中设置bitrate的具体参数为bit_rate,单位是bits/s(x264里面对应参数i_bitrate 的单位则是kbits/s, 1kbits为1000bits而非1024bits).(2)qp使用qp选项时,表示P帧的量化值为qp。
I帧和B帧的量化值则是从--ipratio和--pbratio中取得。
可使用默认参数,也可自己设定。
使用qp模式,即固定量化值,意味着停用弹性量化(aq_mode)。
当qp为0时,为无损编码。
(3)crf固定位元率系数,C onstant R ate f actor,可用的值从1到51,越小编码质量越好,码率越高。
一般使用16到24,可以为浮点。
(crf 并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量差较大,不同的片子之间就更没有可比性了)此模式把某个“质量”作为编码目标,根据片子质量自动分配码率的vbr(Variable Bit Rate 动态比特率)。
X264中构想是让crf n提供与qp n相当的视觉品质,但编码文件更小一些。
CRF是借由降低“较不重要”帧的品质来达到此目的。
在此情况下,“较不重要”是指在复杂或高动态场景的帧,其品质不是很耗费位元数就是不易察觉,所以会提高它们的量化值。
从这些帧里所节省下来的位元数被重新分配到可以更有效利用的帧。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x264实时编码的码率控制
一个简单的QP调节方法
在用x264做实时视频,由于用在智能手机上,计算能力有限,网络带宽有限,故设计了一个简单的新的码率控制算法,效果还不错,与大家分享。
一般做实时视频,x264作者推荐用vbv-CBR模式,这样来稳定码流,适应带宽。
但对于嵌入式系统,CBR模式计算量较大。
CBR模式需要进行前期的半精度SATD值计算,以得到图像复杂度,进而得到预计的bits(这一SATD还用在slice type的选择,实际这个计算过程的函数就叫slice_type_decision,在lookaheand_get_frame中);通过预计bits与期望bits的比较得到qscale,进而得到本编码帧的QP。
当然若用上mb_tree,aq_mode 还更复杂。
这一前期的计算过程大致占整个计算量的12%-20%(根据参数的不同),但若略去这步,使用固定QP,码率波动较大。
现设计了一个新的模式,利用帧间的相似性,根据上一帧编码的实际bits与期望bits的差,来调节QP(帧级调整)。
实现上的思路也很简单,利用CQP模式的壳,在每帧编码前再次调节QP。
需要采用参数如下:
--bframes 0 不要B帧
对于嵌入式,手机等系统,建议采用:
--scenecut 0---(不需额外增加i 帧,由于实时不需b帧,故一个GOP组中,只有一个IDR 帧及其余的P帧);
--subme 1 1/4精度的SAD值
--no-8x8dct (这个是high profile, 不需要,同样可加快编码,节省码流)
--partition none 不要划分(可提高编码速度,节省码流,psnr基本不变)
其余参数可参见,x264 --preset-veryfast的参数配置;
好了接下来是帧级的码流控制,即调节QP;
1. 在x264参数中添加新码率控制的参数(get_opt函数),如:--newqp <bitrate>
2. 这个newqp与CQP,可以起使用。
可照常使用--qp <integer>的形式给出初始qp,若无,则初始默认为23;
3. 控制流程:
1)在本帧编码前,获取上一编码帧的实际大小,单位最好用bit, 这样便于后面的调节;
2)根据设定的bitrate,得到期望的编码帧实际大小,即bitrate/fps (此处的FPS是输
出,一般是25);
3)拟合qp-bitrate曲线:
比如:现在目标是视频通讯,画面复杂度不高,找到这样的片源,用上述选定参数实验不同固定QP下的qp-bitrates曲线;
4)根据拟合曲线及目标bitrate,选出关键的调节点;
以上是整体流程,目前实验的效果是:比如设定500kbps ,超越上限在1%以内,最低在5%以内;
但如果用片源变了,如换成画面复杂度较高的,则上限在5%,下限15%左右;
这主要是调节点是针对某一类片源设定的;
为此,设计了一个简单的权重数组,根据不同设定的bitrate来改变调节点的值,目前看,控制精度有所提高:上限1%,下限10%。
计算量上:可忽略,只是每帧多了上百次的加减乘除;
码率控制实际上是一种编码的优化算法,它用于实现对视频流码流大小的控制。
那么它控制的目的是什么呢?
我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之亦然。
目前常用的两种码流控制方式是VBR和CBR,VBR是动态比特率,CBR是固定比特率。
那么他们是怎么来实现的呢?
我们首先看视频编码的目的,它是为了在有限的带宽中传输尽可能清晰的视频,我们以每秒25帧的图像举例,25帧图像中定义了GOP组,目前主要是有I,B,P帧三种帧格式,I帧是关键帧,你可以想象它就是一幅JPEG压缩图像,而B,P帧是依靠I帧存在的,如果丢失了I帧,B,P帧是看不到图像的,B,P帧描述的不是实际的图像像素内容,而是每个相关像素的变化量,他们相对于I帧信息量会很小。
GOP组是指一个关键帧I帧所在的组的长度,每个GOP组只有1个I帧。
我们再来看,一组画面的码流大小跟什么有关?
当视频编码的压缩方式都一样,清晰度要求都一样的时候,GOP组的长度格式决定了码流的大小,例如:每秒25帧画面,GOP组长度为5,那么帧格式为IBPBP,那么1秒钟有5个I帧,10个B帧,10个P帧,如果GOP组长度为15,帧格式就是IBBPBBPBBPBBPBB,那么1秒钟内会有2个I帧和16个B帧和7个P帧,那么5个I帧比2个I帧占用的数据信息量大,所以GOP组的长度格式也决定了码流的大小。
最后,我们再来看VBR和CBR,对于VBR来说,它可以通过特殊的算法来控制一个GOP 组的长度,也就是I帧的数量,当图像中运动图像多时,我可以把I帧数量加大,那么图像会很清晰,如果图像内元素基本静止时,它甚至可以把GOP组调到25的长度。
那么根据前面的描述,可以想象这是一种为了确保图像质量的控制手段,它非常灵活,不死板,但是要求控制算法非常的精确,不精确会导致很多问题,例如码流突增后不降低,即使带宽足够,会导致图像出现问题。
CBR相反,它的带宽不变,码流不改变,一直都是一样的大小(会有少许的变化),图像运动量超过码流承受能力时,图像会出现边缘模糊的现象,它的目的是为了稳定带宽,它的实现方式就相对简单,码流不变就需要均衡IBP之间的关系,动态视频大时I帧小,BP大,运动视频小时I帧大,BP小。
总之都是通过编解格式的算法来实现的。
总结一下,VBR码流控制方式可以降低图像动态画面少时候的带宽占用,CBR控制方式码流稳定,图像状态较稳定。
他们为了解决的是不同需求下的不同应用。