您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > FFmpeg-X264-编码参数
FFmpegX264编码参数1.目录1.码率控制...................................................................................................................................12.X264的preset和tune.............................................................................................................23.编码延时建议...........................................................................................................................24.ffmpeg编码参数和x264参数对照........................................................................................35.x264参数说明..........................................................................................................................62.码率控制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固定位元率系数,ConstantRatefactor,可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。(crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量差较大,不同的片子之间就更没有可比性了)此模式把某个“质量”作为编码目标,根据片子质量自动分配码率的vbr(VariableBitRate动态比特率)。X264中构想是让crfn提供与qpn相当的视觉品质,但编码文件更小一些。CRF是借由降低“较不重要”帧的品质来达到此目的。在此情况下,“较不重要”是指在复杂或高动态场景的帧,其品质不是很耗费位元数就是不易察觉,所以会提高它们的量化值。从这些帧里所节省下来的位元数被重新分配到可以更有效利用的帧。当crf为0时,与qp0相同,实现无损编码。3.X264的preset和tune鉴于x264的参数众多,各种参数的配合复杂,为了使用者方便,x264建议如无特别需要可使用preset和tune设置。这套开发者推荐的参数较为合理,可在此基础上在调整一些具体参数以符合自己需要,手动设定的参数会覆盖preset和tune里的参数。--preset的参数主要调节编码速度和质量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo这10个选项,从快到慢。--tune的参数主要配合视频类型和视觉优化的参数,或特别的情况。如果视频的内容符合其中一个可用的调整值又或者有其中需要,则可以使用此选项,否则建议不使用(如tunegrain是为高比特率的编码而设计的)。tune的值有:film:电影、真人类型;animation:动画;grain:需要保留大量的grain时用;stillimage:静态图像编码时使用;psnr:为提高psnr做了优化的参数;ssim:为提高ssim做了优化的参数;fastdecode:可以快速解码的参数;zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。4.一些编码建议编码延时降低x264的延时是可能的,但是会降低质量。若需零延时,设置--tunezerolatency。若你可以接受一点儿小延时(如小于1秒),最好还是允许延时。下列步骤可以降低延迟,当延迟足够小时,就别再进行后续步骤了:1.从初始值开始2.关闭sync-lookahead(设置用于线程预测的帧缓存大小。最大值是250.在第二遍及更多遍编码或基于分片线程时自动关闭)3.降低rc-lookahead,但别小于10(设定mb-tree位元率控制和vbv-lookahead使用的帧数)4.降低threads(比如从12降到6)5.使用切片线程(slicedthreads)6.禁用rc-lookahead7.禁用b-frames8.实在不行,就用--tunezerolatencyparam-rc.i_lookahead=0;param-i_sync_lookahead=0;param-i_bframe=0;param-b_sliced_threads=1;param-b_vfr_input=0;param-rc.b_mb_tree=0;(使用宏块树位元率控制会改善整体压缩率)x264线程x264起多少个线程比较好?建议线程数:1、2、4、8测试结论:1、更多的线程会消耗更多总CPU时间片,因此在长期满载的机器上不宜使用多线程。2、获得的时间收益随线程增多呈递减趋势,8线程以后尤为明显。3、PNSR下降随线程数增加呈抛物递增趋势,16线程增加到24线程PSNR时下降了0.6之巨。4、设置threads=auto时,线程数为逻辑CPU个数的1.5倍。x264各类型帧的大小及编码耗时注:作参考,未必属实。I帧、B帧、P帧都极大地受编码参数的影响。通常情况下:h264编码的帧由大到小依次为:IPB(互相之间约有5倍的差距)x264的编码耗时由长到短依次为:PBI通常而言,较小的帧因为帧内压缩计算量(deblock、cabac等)小,所以耗时相对短。P帧的编码耗时长是因为帧间压缩(宏块寻找、运动补偿等)耗时长所以提高了总体耗时。另外:可以修改x264中的x264_slices_write函数来测量不同类型帧的编码耗时。5.ffmpeg编码参数和x264参数对照下面表中涉及的参数直接在AVCodecContext结构中设置:FFmpegoptionx264optionCodeConsoleConsoleCodegop_size-gframes–keyinti_keyint_maxbit_rate-bbitspersecond–bitraterc.i_bitraterc_buffer_size-bufsizebits–vbv-bufsizerc.i_vbv_buffer_sizerc_max_rate-maxratebits–vbv-maxraterc.i_vbv_max_bitratemax_b_frames-bfint–bframesi_bframekeyint_min-keyint_minint–min-keyinti_keyint_minscenechange_threshold-sc_thresholdint–scenecuti_scenecut_thresholdqmin-qminint–qpminrc.i_qp_minqmax-qmaxint–qpmaxrc.i_qp_maxmax_qdiff-qdiffint–qpsteprc.i_qp_stepqcompress-qcompfloat–qcomprc.f_qcompressqblur-qblurfloat–qblurrc.f_qblurRefs-refsint–refi_frame_referenceme_method-me_methodepzs,hex,umh,full–meanalyse.i_me_methodmerange-me_rangeint–merangeanalyse.i_me_rangeme_subpel_quality-subqint–submeanalyse.i_subpel_refinetrellis-trellis0,1,2–trellisanalyse.i_trellisnoise_reduction-nrint–nranalyse.i_noise_reductionlevel-levelint–leveli_level_idcbit_rate_tolerance-btbits–ratetol=-bt/-brc.f_rate_tolerancerc_initial_buffer_occupancy-rc_init_occupancybits–vbv-init=-rc_init_occupancy/-bufsizerc.f_vbv_buffer_initb_quant_factor-b_qfactorfloat–pbratiorc.f_pb_factorchromaoffset-chromaoffsetint–chroma-qp-offsetanalyse.i_chroma_qp_offsetthread_count-threadsint–threadsi_threadsme_cmp-cmp-chroma/+chromachroma-meanalyse.b_chroma_methread_typethread_typesliced_threadsb_sliced_threadsAVCodecContext结构中priv_data可设置的参数见下表:priv_data(即X264Contextoption)presettuneprofilefastfirstpasslevelstatswpredpx264optscrfcrf_maxcqpaq_modeaq_strengthpsypsy_rdrc_lookaheadweightbweightpssimintra_refreshb_biasb_pyramidmixed_refsdct8x8fast_pskipaudmbtreedeblockcplxblurpartitionsdirect_predslice_max_sizestatsnal_hrdx264_params其余x264参数设置,见下面格式,多个参数用冒号(:)隔开:av_opt_set(AVCodecContext-priv_data,x264opts,sync-lookahead=0:sliced-threads,0);6.x264参数说明注:下面说明不是最新版本,最新版本请参考x264--fullhelp预设为了减少使用者花费时间和精力在命令列上而设计的一套系统。这些设定切换了什么选项可以从x264--fullhelp的说明里得知。profile预设值:无限制输出资料流的profile。如果指定了profile,它会覆写所有其他的设定。所以如果指定了profile,将会保证得到一个相容的资料流。如果设了此选项,将会无法使用无失真(lossless)编码(--qp0或--crf0)。如果播放装置仅支援某个profile,则应该设此选项。大多数解码器都支援Highprofile,所以没有设定的必要。可用的值:baseline
本文标题:FFmpeg-X264-编码参数
链接地址:https://www.777doc.com/doc-2871686 .html