X264碼率控制流程分析 (轉)

  二、編碼器機能20鐘頭前  碼率節制的意見常識:   碼率節制的目的以及意義:   圖象通訊中碼率節制的目的:路程經過過程調治編碼參量,節制單元時間內的編碼視頻文件流的數值量,以使 ...



  二、編碼器機能20鐘頭前

  碼率節制的意見常識:

  碼率節制的目的以及意義:

  圖象通訊中碼率節制的目的:路程經過過程調治編碼參量,節制單元時間內的編碼視頻文件流的數值量,以使孕育發生的比特流切合各類應用的需求視頻文件壓縮的效率以及視頻文件內部實質意義有很大的瓜葛,對變化多樣的銀幕,視頻文件編碼的輸出的碼流變化較大,在信道環境欠好的時辰就容易引被押送碼端預示的質量的不不變

  率掉真意見:

  因為傳道輸送帶寬厚溫以及儲存空間的限定,視頻文件應用對壓縮比有較高的要求而無損編碼較低的壓縮比沒有辦法饜足視頻文件在現實應用中的需求但若給視頻文件引入一定水平的掉真,凡是可以獲患上較高的壓縮比

  率掉真意見對有損壓縮減編制碼下的掉真以及編碼機能之間的瓜葛的描寫,為碼率節制的研究供給了堅實的意見依據率掉真意見大旨是描寫編碼掉真度以及編碼數值速度的瓜葛該意見成立在圖象是持續的根蒂根基上的,在有限數值速度下,因為存在量化偏差,肯定是存在掉真當施用有損編碼要領時,重修圖象g(x,y)以及原始圖象f(x,y)之間存在差異,掉真度D的函數情勢在乎見上是可以按照需要自由拔取的,在圖象編碼中,D經常使用均方差情勢暗示的,典型的率掉真曲線R(D)為D的凸減函數

  對怎么選擇哪1個函數的率掉真效驗更好,則是比力哪1個函數的率掉真函數更為靠近典型的率掉真函數的曲線

  x264碼率節制要領:接納的碼率節制算法并無接納拉格朗日價錢函數來節制編碼,而是施用一種更簡略的要領,即哄騙半精疏密程度幀的SATD(sum of absolute transformed difference)作為標準樣式選擇的依據SATD行將殘差經哈德曼變換的4×4塊的預先推測殘差絕對值全體,可以將其看作簡略的時頻變換,其值在一定水平上可以反應天生碼流的巨細SATD是將殘差經哈達曼變換4*4塊的預先推測殘差絕對值全體自順應宏塊層碼率節制計謀:X264的宏塊沒有不論什么碼率節制的機制,其在幀層獲患上1個QP后,歸屬該幀的所有宏塊都用著同一的QP舉行量化

  碼率節制機能揣測:

  一、比特率偏差|ABR-TBR|/TBR ,越小越好

  三、緩以及沖突區滿度與TBL的般配水平

  四、跳幀數

  五、PSNR顛簸越小越好

  x264中碼率節制的流程(對重點函數鄙人面有注釋):

  1.在舉行編碼時,Encode--->x264_encoder_open(主如果舉行參量的改訂配置,舉行初始化)---->x264_ratecontrol_new

  2.encode--->Encode_frame--->x264_encoder_encode--->x2 64_ratecontrol_slice_type

  3.encode--->Encode_frame--->x264_encoder_encode--->x2 64_ratecontrol_start**************

  4.encode--->Encode_frame--->x264_encoder_encode--->x2 64_ratecontrol_qp

  5.encode--->Encode_frame--->x264_encoder_encode--->x2 64_slices_write--->x264_slice_write

  --->x264_ratecontrol_mb********************

  6.encode--->Encode_frame--->x264_encoder_encode--->x2 64_ratecontrol_end(在編完一幀事后)

  7.在編完事后,encode--->x264_encoder_關了---->ratecontrol summary/x264_ratecontrol_delete

  函數注釋:

  在編碼中所用的編碼體式格局:

  #define X264_RC_CQP 0

  #define X264_RC_CRF 1

  #define X264_RC_ABR 2

  1.

  x264_ratecontrol_new( x264_t *h )

  { // 獲取RC體式格局,FPS,bitrate,rc->buffer_rate,rc->buffer_size

  // 在碼率節制的時辰會浮現2pass,參量的初始化

  rc = h->rc;

  rc->b_abr = h->param.rc.i_rc_method != X264_RC_CQP && !h->param.rc.b_stat_read;

  rc->b_2pass = h->param.rc.i_rc_method == X264_RC_ABR && h->param.rc.b_stat_read;

  ..........

  if( h->param.rc.b_mb_tree )//這搭配置mb_tree

  {

  h->param.rc.f_pb_factor = 1;

  rc->qcompress = 1;

  }

  else

  rc->qcompress = h->param.rc.f_qcompress;

  ..............

  rc->ip_offset = 6.0 * log(h->param.rc.f_ip_factor) / log(2.0);

  rc->pb_offset = 6.0 * log(h->param.rc.f_pb_factor) / log(2.0);

  rc->qp_constant[SLICE_TYPE_P] = h->param.rc.i_qp_constant;

  rc->qp_constant[SLICE_TYPE_I] = x264_clip3( h->param.rc.i_qp_constant - rc->ip_offset + 0.5, 0, 51 );

  rc->qp_constant[SLICE_TYPE_B] = x264_clip3( h->param.rc.i_qp_constant + rc->pb_offset + 0.5, 0, 51 );

  }

  2.

  int x264_ratecontrol_slice_type( x264_t *h, int frame_num )

  {

  //按照差別類型來獲取差別的qp_constant

  h->param.rc.i_qp_constant = (h->stat.i_frame_count[SLICE_TYPE_P] == 0) ? 24

  : 1 + h->stat.f_frame_qp[SLICE_TYPE_P] / h->stat.i_frame_count[SLICE_TYPE_P];

  rc->qp_constant[SLICE_TYPE_P] = x264_clip3( h->param.rc.i_qp_constant, 0, 51 );

  rc->qp_constant[SLICE_TYPE_I] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) / fabs( h->param.rc.f_ip_factor )) + 0.5 ), 0, 51 );

  rc->qp_constant[SLICE_TYPE_B] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) * fabs( h->param.rc.f_pb_factor )) + 0.5 ), 0, 51 );

  }

  3.

  x264_ratecontrol_start( h, h->fenc->i_qpplus1, overhead*8 );

  這個函數的目的就是在一幀的編碼前就選擇QP

  /* Init the rate control */

  /* FIXME: Include slice header bit cost. */

  x264_ratecontrol_start( h, h->fenc->i_qpplus1, overhead*8 );

  對x264_ratecontrol_start函數的剖析如次:

  x264_zone_t *zone = get_zone( h, h->fenc->i_frame );//找到h->fenc->i_frame地點的zone

  ....................

  //由各類差別的slice類型,vbv等等參量獲取的q值

  if( i_force_qp )

  {

  q = i_force_qp - 1;//

  }

  else if( rc->b_abr )

  {

  q = qscale2qp( rate_estimate_qscale( h ) );//底下有注釋

  }

  else if( rc->b_2pass )

  {

  rce->new_qscale = rate_estimate_qscale( h );

  q = qscale2qp( rce->new_qscale );

  }

  else /* CQP */

  {

  if( h->sh.i_type == SLICE_TYPE_B && h->fdec->b_kept_as_ref )

  q = ( rc->qp_constant[ SLICE_TYPE_B ] + rc->qp_constant[ SLICE_TYPE_P ] ) / 2;

  else

  q = rc->qp_constant[ h->sh.i_type ];

  if( zone )

  {

  if( zone->b_force_qp )

  q += zone->i_qp - rc->qp_constant[SLICE_TYPE_P];

  else

  q -= 6*log(zone->f_bitrate_factor)/log⑵;

  }

  //

  /* Terminology:

  * qp = h.264''s quantizer

  * qscale = linearized quantizer = Lagrange multiplier

  */

  static inline double qp2qscale(double qp)

  {

  return 0.85 * pow(2.0, ( qp - 12.0 ) / 6.0);

  }

  static inline double qscale2qp(double qscale)

  {

  return 12.0 + 6.0 * log(qscale/0.85) / log(2.0);

  }

  // //

  rate_estimate_qscale( h )

  // update qscale for 1 frame based on actual bits used so far(即按照所需BIT來計較qscale)

  static float rate_estimate_qscale( x264_t *h )

  {

  //這搭是別離針對B,P幀別離舉行,因為I幀是已設定

  if( pict_type == SLICE_TYPE_B )

  {

  //這搭B幀的q的巨細是由參考幀求的

  .....................

  .....................

  // 由predict_size獲患上幀的size

  rcc->frame_size_planned = predict_size( rcc->pred_b_from_p, q, h->fref1[h->i_ref1-1]->i_satd );

  x264_ratecontrol_set_estimated_size(h, rcc->frame_size_planned);

  //

  void x264_ratecontrol_set_estimated_size( x264_t *h, int bits )

  {

  x264_pthread_mutex_lock( &h->fenc->mutex );

  h->rc->frame_size_estimated = bits;///***********

  x264_pthread_mutex_unlock( &h->fenc->mutex );

  }

  

  }

  P幀的q值獲取

  else

  {

  //這搭的分有1pass以及2pass的選擇

  ...................

  選擇predicted_bits,求出diff

  diff = predicted_bits - (int64_t)rce.expected_bits;

  q /= x264_clip3f((double)(abr_buffer - diff) / abr_buffer, .5, 2);

  }

  }

  4.

  int x264_ratecontrol_qp( x264_t *h )

  {

  return h->rc->qpm;

  }

  5.

  void x264_ratecontrol_mb( x264_t *h, int bits )

  {

  //這個函數主如果針對一行的bits

  if( h->sh.i_type == SLICE_TYPE_B )

  {

  //由參考的圖象求對應的行的qp,有已編碼的bits獲患上此行的bits以及qp

  int avg_qp = X264_MIN(h->fref0[0]->i_row_qp[y+1], h->fref1[0]->i_row_qp[y+1])

  + rc->pb_offset * ((h->fenc->i_type == X264_TYPE_BREF) ? 0.5 : 1);

  rc->qpm = X264_MIN(X264_MAX( rc->qp, avg_qp), 51); //avg_qp could go hellogher than 51 due to pb_offset

  i_estimated = row_bits_so_far(h, y); //FIXME: compute full estimated size

  if (i_estimated > h->rc->frame_size_planned)

  x264_ratecontrol_set_estimated_size(h, i_estimated);

  }

  //I, p,這搭還要參考緩以及沖突區的狀況

  else

  {

  //對I,P幀在思量VBV的環境下求的bits以及qp

  }

  }

  6.

  /* After encoding one frame, save stats and update ratecontrol state */

  int x264_ratecontrol_end( x264_t *h, int bits )

  {

  ///計數ipb類型的Mb的個數,并計較均等QP

  h->fdec->f_qp_avg_rc = rc->qpa_rc /= h->mb.i_mb_count;

  h->fdec->f_qp_avg_aq = rc->qpa_aq /= h->mb.i_mb_count;

  }

  7.

  void x264_ratecontrol_summary( x264_t *h )

  {

  x264_ratecontrol_t *rc = h->rc;

  //ABR

  if( rc->b_abr && h->param.rc.i_rc_method == X264_RC_ABR && rc->cbr_decay > .9999 )

  {

  double base_cplx = h->mb.i_mb_count * (h->param.i_bframe ? 120 : 80);

  double mbtree_offset = h->param.rc.b_mb_tree ? (1.0-h->param.rc.f_qcompress)*13.5 : 0;

  x264_log( h, X264_LOG_INFO, "final ratefactor: %.2f\n",

  qscale2qp( pow( base_cplx, 1 - rc->qcompress )

  * rc->cplxr_sum / rc->wanted_bits_window ) - mbtree_offset );

  }

  }

  /

  void x264_ratecontrol_delete( x264_t *h )///開釋RC斥地的空間

  路程經過過程以上的流程總結x264碼率節制的歷程基本是有以下三步:

  1.對碼率節制的相干變量舉行初始化,如,I,P,B的初始QP值,RC的體式格局,VBV的初始狀況等等;

  2.獲取編碼幀的龐氣量寬宏,x264用SATD暗示,對接納的差別參量的碼率節制的體式格局,由前邊已編碼的Bits,龐氣量寬宏,方針比特的配置等一些前提來獲取編碼時下幀的qp值

  3.在編碼歷程中,由獲患上qp值獲患上預先推測的bits;

  測試部門:

  1.簡略參量配置:

  參量配置:

  --frames 10 --qp 26 -o test.264 F:\.......\akiyo_qcif.yuv 176x144

  其它的參量接納默許配置(在默許配置時接納的碼率節制模子是X264_RC_CQP),所患上的測試成果:

  x264 [info]: 176x144 @ 25.00 fps

  x264 [info]: using cpu capabilities: MMX2 SSE2 Cache64 Slow_mod4_stack

  x264 [info]: profile High, level 1.1

  x264 [info]: frame I:1 Avg QP:23.00 size: 4189

  x264 [info]: frame P:3 Avg QP:26.00 size: 62

  x264 [info]: frame B:6 Avg QP:28.00 size: 38

  x264 [info]: consecutive B-frames: 11.1% 0.0% 0.0% 88.9%

  x264 [info]: mb I I16..4: 3.0% 41.4% 55.6%

  x264 [info]: mb P I16..4: 0.0% 0.0% 0.0% P16..4: 3.0% 1.3% 1.7% 0.0% 0

  .0% skip:93.9%

  x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 4.4% 0.2% 0.3% direct:

  0.7% skip:94.4% L0:56.0% L1:40.5% BI: 3.4%

  x264 [info]: 8x8 transform intra:41.4% inter:25.9%

  x264 [info]: coded y,uvDC,uvAC intra: 83.6% 81.8% 68.7% inter: 1.1% 0.1% 0.0%

  x264 [info]: i16 v,h,dc,p: 100% 0% 0% 0%

  x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 30% 15% 4% 4% 4% 7% 5% 6%

  x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 18% 8% 5% 5% 10% 5% 8% 6%

  x264 [info]: ref P L0: 88.9% 0.0% 11.1%

  x264 [info]: kb/s:92.08

  encoded 10 frames, 24.33 fps, 92.08 kb/s

  2.轉變碼率節制的模子:

  --frames 10 --qp 26 --crf 2 -o test.264 F:\......\akiyo_qcif.yuv 176x144

  x264 [info]: 176x144 @ 25.00 fps

  x264 [info]: using cpu capabilities: MMX2 SSE2 Cache64 Slow_mod4_stack

  x264 [info]: profile High, level 1.1

  x264 [info]: frame I:1 Avg QP:10.00 size: 10246

  x264 [info]: frame P:3 Avg QP:11.48 size: 847

  x264 [info]: frame B:6 Avg QP:12.10 size: 172

  x264 [info]: consecutive B-frames: 11.1% 0.0% 0.0% 88.9%

  x264 [info]: mb I I16..4: 1.0% 44.4% 54.5%

  x264 [info]: mb P I16..4: 0.0% 0.0% 0.0% P16..4: 30.0% 3.0% 4.7% 0.0% 0

  .0% skip:62.3%

  x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 6.9% 1.0% 1.2% direct:

  4.0% skip:86.9% L0:34.7% L1:55.6% BI: 9.7%

  x264 [info]: 8x8 transform intra:44.4% inter:34.8%

  x264 [info]: coded y,uvDC,uvAC intra: 100.0% 99.0% 94.9% inter: 11.6% 7.6% 4.9%

  x264 [info]: i16 v,h,dc,p: 100% 0% 0% 0%

  x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 33% 16% 3% 2% 3% 4% 4% 5%

  x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 12% 11% 5% 7% 11% 6% 12% 8%

  x264 [info]: ref P L0: 95.8% 1.6% 2.7%

  x264 [info]: ref B L0: 96.3% 3.7%

  x264 [info]: kb/s:276.36

  encoded 10 frames, 14.27 fps, 276.36 kb/s

  針對1,2兩個測試,所接納的RC模子紛歧樣,1:X264_RC_CQP,2:X264_RC_CRF,其它參量的配置同樣,從IPB的均等QP,編碼Bits可以看出以及對現實的應用來講,CRF的效驗不比CQP

  3.

  --frames 10 --qp 26 --pass 1 -o test.264 F:\.....\bin\akiyo_qcif.yuv 176x144

  x264 [info]: 176x144 @ 25.00 fps

  x264 [info]: using cpu capabilities: MMX2 SSE2 Cache64 Slow_mod4_stack

  x264 [info]: profile Main, level 1.1

  x264 [info]: frame I:1 Avg QP:23.00 size: 4068

  x264 [info]: frame P:3 Avg QP:26.00 size: 59

  x264 [info]: frame B:6 Avg QP:28.00 size: 31

  x264 [info]: consecutive B-frames: 11.1% 0.0% 0.0% 88.9%

  x264 [info]: mb I I16..4: 15.2% 0.0% 84.8%

  x264 [info]: mb P I16..4: 0.0% 0.0% 0.0% P16..4: 7.1% 0.0% 0.0% 0.0% 0

  .0% skip:92.9%

  x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 1.2% 0.0% 0.0% direct:

  1.5% skip:97.3% L0:100.0% L1: 0.0% BI: 0.0%

  x264 [info]: coded y,uvDC,uvAC intra: 87.4% 77.8% 68.7% inter: 1.1% 0.1% 0.0%

  x264 [info]: i16 v,h,dc,p: 47% 20% 27% 7%

  x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 27% 10% 5% 4% 8% 5% 6% 5%

  x264 [info]: kb/s:88.58

  encoded 10 frames, 52.63 fps, 88.58 kb/s

  4.

  --frames 10 --qp 26 --pass 2 -o test.264 F:\.....\bin\akiyo_qcif.yuv 176x144

  x264 [info]: 176x144 @ 25.00 fps

  x264 [info]: using cpu capabilities: MMX2 SSE2 Cache64 Slow_mod4_stack

  x264 [info]: profile High, level 1.1

  x264 [info]: frame I:1 Avg QP:23.00 size: 4189

  x264 [info]: frame P:3 Avg QP:26.00 size: 62

  x264 [info]: frame B:6 Avg QP:28.00 size: 38

  x264 [info]: consecutive B-frames: 11.1% 0.0% 0.0% 88.9%

  x264 [info]: mb I I16..4: 3.0% 41.4% 55.6%

  x264 [info]: mb P I16..4: 0.0% 0.0% 0.0% P16..4: 3.0% 1.3% 1.7% 0.0% 0

  .0% skip:93.9%

  x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 4.4% 0.2% 0.3% direct:

  0.7% skip:94.4% L0:56.0% L1:40.5% BI: 3.4%

  x264 [info]: 8x8 transform intra:41.4% inter:25.9%

  x264 [info]: coded y,uvDC,uvAC intra: 83.6% 81.8% 68.7% inter: 1.1% 0.1% 0.0%

  x264 [info]: i16 v,h,dc,p: 100% 0% 0% 0%

  x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 30% 15% 4% 4% 4% 7% 5% 6%

  x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 18% 8% 5% 5% 10% 5% 8% 6%

  x264 [info]: ref P L0: 88.9% 0.0% 11.1%

  x264 [info]: kb/s:92.08

  encoded 10 frames, 27.70 fps, 92.08 kb/s

  5.

  --frames 10 --qp 26 --pass 3 -o test.264 F:\.....\bin\akiyo_qcif.yuv 176x144

  x264 [info]: 176x144 @ 25.00 fps

  x264 [info]: using cpu capabilities: MMX2 SSE2 Cache64 Slow_mod4_stack

  x264 [info]: profile High, level 1.1

  x264 [info]: frame I:1 Avg QP:23.00 size: 4189

  x264 [info]: frame P:3 Avg QP:26.00 size: 62

  x264 [info]: frame B:6 Avg QP:28.00 size: 38

  x264 [info]: consecutive B-frames: 11.1% 0.0% 0.0% 88.9%

  x264 [info]: mb I I16..4: 3.0% 41.4% 55.6%

  x264 [info]: mb P I16..4: 0.0% 0.0% 0.0% P16..4: 3.0% 1.3% 1.7% 0.0% 0

  .0% skip:93.9%

  x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 4.4% 0.2% 0.3% direct:

  0.7% skip:94.4% L0:56.0% L1:40.5% BI: 3.4%

  x264 [info]: 8x8 transform intra:41.4% inter:25.9%

  x264 [info]: coded y,uvDC,uvAC intra: 83.6% 81.8% 68.7% inter: 1.1% 0.1% 0.0%

  x264 [info]: i16 v,h,dc,p: 100% 0% 0% 0%

  x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 30% 15% 4% 4% 4% 7% 5% 6%

  x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 18% 8% 5% 5% 10% 5% 8% 6%

  x264 [info]: ref P L0: 88.9% 0.0% 11.1%

  x264 [info]: kb/s:92.08

  encoded 10 frames, 25.64 fps, 92.08 kb/s

  對3,4,5是涉及Pass的測試比力:

  屢次壓縮碼率節制

  1:熬頭次壓縮,始于計數文件

  2:按成立的計數文件壓縮并輸出,不籠罩計數文件,

  3:按成立的計數文件壓縮,優化計數文件

  在想獲患上建好的效驗的時辰接納pass 2就能夠了

  6.

  --frames 10 --qp 26 --bitrate 64 -o test.264 F:\.....\bin\akiyo_qcif.yuv 176x144

  x264 [info]: 176x144 @ 25.00 fps

  x264 [info]: using cpu capabilities: MMX2 SSE2 Cache64 Slow_mod4_stack

  x264 [info]: profile High, level 1.1

  x264 [info]: frame I:1 Avg QP:38.31 size: 1461

  x264 [info]: frame P:3 Avg QP:42.00 size: 18

  x264 [info]: frame B:6 Avg QP:45.00 size: 14

  x264 [info]: consecutive B-frames: 11.1% 0.0% 0.0% 88.9%

  x264 [info]: mb I I16..4: 15.2% 68.7% 16.2%

  x264 [info]: mb P I16..4: 0.0% 0.0% 0.0% P16..4: 2.0% 0.0% 0.3% 0.0% 0

  .0% skip:97.6%

  x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.2% 0.0% 0.0% direct:

  0.0% skip:99.8% L0: 0.0% L1:100.0% BI: 0.0%

  x264 [info]: final ratefactor: 31.50

  x264 [info]: 8x8 transform intra:68.7%

  x264 [info]: coded y,uvDC,uvAC intra: 48.0% 61.6% 32.3% inter: 0.0% 0.0% 0.0%

  x264 [info]: i16 v,h,dc,p: 33% 47% 7% 13%

  x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 17% 20% 3% 4% 7% 3% 7% 5%

  x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 50% 14% 8% 5% 5% 5% 3% 6% 4%

  x264 [info]: kb/s:31.94

  encoded 10 frames, 31.25 fps, 31.94 kb/s

  7.

  --frames 250 --qp 26 --bitrate 64 -o test.264 F:\.....\bin\akiyo_qcif.yuv 176x144

  x264 [info]: 176x144 @ 25.00 fps

  x264 [info]: using cpu capabilities: MMX2 SSE2 Cache64 Slow_mod4_stack

  x264 [info]: profile High, level 1.1

  x264 [info]: frame I:1 Avg QP:34.62 size: 1779

  x264 [info]: frame P:92 Avg QP:19.81 size: 569

  x264 [info]: frame B:157 Avg QP:26.76 size: 53

  x264 [info]: consecutive B-frames: 15.7% 0.0% 2.4% 81.9%

  x264 [info]: mb I I16..4: 14.1% 61.6% 24.2%

  x264 [info]: mb P I16..4: 0.0% 0.0% 0.0% P16..4: 25.8% 9.4% 9.9% 0.0% 0

  .0% skip:54.8%

  x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 13.9% 0.7% 1.4% direct:

  1.1% skip:83.0% L0:16.6% L1:72.1% BI:11.3%

  x264 [info]: final ratefactor: 18.97

  x264 [info]: 8x8 transform intra:61.5% inter:40.4%

  x264 [info]: coded y,uvDC,uvAC intra: 61.3% 65.4% 34.6% inter: 8.6% 6.8% 2.8%

  x264 [info]: i16 v,h,dc,p: 57% 43% 0% 0%

  x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 22% 18% 4% 2% 7% 3% 7% 4%

  x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 45% 10% 10% 5% 6% 7% 6% 6% 5%

  x264 [info]: ref P L0: 87.6% 7.6% 4.8%

  x264 [info]: ref B L0: 95.0% 5.0%

  x264 [info]: kb/s:49.92

  encoded 250 frames, 16.74 fps, 49.92 kb/s

  6,7是針對差別的編碼幀數來舉行比力的,在編碼幀數越多,帶寬哄騙的效驗就越好

  6,7是在配置了方針碼率64kp/s時,接納的是ABR的RC模子,在配置了方針碼率可以興許按照方針碼率的巨細轉變QP巨細,可以興許節制碼率

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254459.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254459.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254459.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SPSS輸出的結果都要寫到文章中嗎

SPSS輸出的結果都要寫到文章中嗎 經常有人問到,SPSS輸出的結果都要寫到文章中嗎?文章中應該寫什么呢?比如,均值、中位數、眾數、標準差、百分位數、最小值、最大值等等,都要出現在文章中嗎?洋洋灑灑那么多&…

php Closure 類型

2019獨角獸企業重金招聘Python工程師標準>>> <?php /*** Closure 理解* 匿名函數&#xff08;Anonymous functions&#xff09;&#xff0c;* 也叫閉包函數&#xff08;closures&#xff09;* Closure 是匿名函數的php中的稱呼*/// 創建一個Closure$func funct…

ftk學習記(label篇)

【 聲明&#xff1a;版權全部&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】還是接著上面的一篇博文。之前以前答應過大家&#xff0c;讓大家看一下最簡單的ftk程序是怎么執行的。所以&#xff0c;這里我們上傳一下圖片。由于…

扇形特征點提取

處理要求 分別找出扇形左上角&#xff0c;左下角&#xff0c;右上角&#xff0c;右下角&#xff0c;最高點&#xff0c;下面弓形最高點 原圖 halcon 處理程序 read_image (Image14208259e49d7b1cf7c544, 544.bmp) rgb1_to_gray (Image14208259e49d7b1cf7c544, GrayImage) t…

集成顯卡與獨立顯卡的區別

集成的顯卡不帶有顯存&#xff0c;使用系統的一部分主內存作為顯存&#xff0c;顯卡的數量一般是根據需要自然動態調整。顯然&#xff0c;使用集成顯卡運行需要大量占用顯存的程序&#xff0c;對整個系統的影響比較明顯&#xff0c;此外系統內存的頻率通常比獨立的顯存度低很多…

[ CodeVS沖杯之路 ] P3116

不充錢&#xff0c;你怎么AC&#xff1f; 題目&#xff1a;http://codevs.cn/problem/3116/ 基礎的高精度加法&#xff0c;注意一下兩個數長短不一和答案第一位的處理即可&#xff0c;當然也可以用壓位的方法做 1 #include<cstdio>2 #include<cstdlib>3 #include&l…

郵槽

郵槽是基于廣播通信體系設計出來的&#xff0c;采用無連接的不可靠的數據傳輸&#xff1b;郵槽是一種一對一或一對多的單向通信機制&#xff0c;創建郵槽的服務器進程讀取數據&#xff0c;打開郵槽的客戶機進程寫入數據&#xff1b;為保證郵槽在各種Windows平臺下都能正常工作&…

Android Studio maven-metadata.xml 卡著不動原因和解決方法

頭一天好好的&#xff0c;第二天就卡著了。 一直在這個地方不動&#xff0c;如果停止就會報 Error:Could not run build action using Gradle distribution ‘https://services.gradle.org/distributions/gradle-4.1-all.zip‘. 所以直接就去看了下鏈接&#xff1a;https://dl.…

h.264 SODB RBSP EBSP的區別

SODB 數據比特串&#xff0d;&#xff0d;&#xff1e;最原始的編碼數據 RBSP 原始字節序列載荷&#xff0d;&#xff0d;&#xff1e;在SODB的后面填加了結尾比特&#xff08;RBSP trailing bits 一個bit“1”&#xff09;若干比特“0”,以便字節對齊。 EBSP 擴展字節序…

C# 控件置于最頂層、最底層、隱藏、顯示

控件置于最頂層、最底層 pictureBox1.BringToFront();//將控件放置所有控件最前端 pictureBox1.SendToBack();//將控件放置所有控件最底端 控件隱藏、顯示 pictureBox1.Visible true;//顯示 pictureBox1.Visible false;//隱藏

習題8.3.(1)

1 #include <iostream>2 #include <iomanip>3 #include <cstdlib>4 using namespace std;5 6 #define OK 17 #define ERROR 08 #define OVERFLOW -29 typedef int Status; //Status 是函數返回值類型&#xff0c;其值是函數結果狀態代碼。 10 11 typedef in…

python:實例化configparser模塊讀寫配置文件

之前的博客介紹過利用python的configparser模塊讀寫配置文件的基礎用法&#xff0c;這篇博客&#xff0c;介紹下如何實例化&#xff0c;方便作為公共類調用。 實例化的好處有很多&#xff0c;既方便調用&#xff0c;又降低了腳本的維護成本&#xff0c;而且提高了代碼的可讀性。…

halcon 圓環類缺陷檢測的一種方法(極坐標變換法)

目錄簡介極坐標變換定義原理Halcon中的極坐標變換1、polar_trans_image_ext算子用法與參數剖析2、polar_trans_region_inv算子用法與參數剖析圓環類缺陷檢測思路與步驟Halcon實例實例簡介程序解讀思路剖析應用實例1項目介紹處理程序處理效果應用實例2項目介紹處理程序處理效果簡…

linux的mount命令詳解

linux下掛載&#xff08;mount&#xff09;光盤鏡像文件、移動硬盤、U盤、Windows和NFS網絡共享 linux是一個優秀的開放源碼的操作系統&#xff0c;可以運行在大到巨型小到掌上型各類計算機系統上&#xff0c;隨著 linux系統的日漸成熟和穩定以及它開放源代碼特有的優越性&…

cat命令

$ cat file 顯示文件中的內容$ cat -n file 可以顯示文件的內容和行號$ cat -b file -b與-n類似&#xff0c;但只標識非空白行的行號$ cat -e file 在每一行的末尾顯示“$”字符&#xff0c;在需要將多行內容轉換成一行時非常有用。$ cat 只是接收標準輸入的內容并顯示&#xf…

生成驗證碼的流程分析.

瀏覽器解析頁面, 攜帶uuid向服務器發送請求獲取圖片, 服務器生成圖片驗證碼, 返回圖片本身給瀏覽器, 客戶端根據圖片輸入驗證碼內容, 把輸入的內容發送給服務器, 服務器對比輸入的驗證碼是否正確.根據前端傳入的uuid從redis中獲取唯一圖片驗證碼名稱. 服務器: 圖片, 圖片內容…

Halcon圖像增強方法與原理概述

目錄簡介Halcon算子與算法原理1.灰度線性變換a、scale_imageb、scale_image_maxc、invert_image2.灰度非線性變換a、log_imageb、exp_image3.圖像增強對比度與照明度a、emphasizeb、illuminate4.直方圖均衡化a、equ_histo_image5.灰度圖像形態學a、 gray_openingb、gray_closin…

指針類型轉換(轉)

當我們初始化一個指針或給一個指針賦值時&#xff0c;賦值號的左邊是一個指針&#xff0c;賦值號的右邊是一個指針表達式。在我們前面所舉的例子中&#xff0c;絕大多數情況下&#xff0c;指針的類型和指針表達式的類型是一樣的&#xff0c;指針所指向的類型和指針表達式所指向…

143. Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes values. For example,Given {1,2,3,4}, reorder it to {1,4,2,3}. public void ReorderList(ListNode head) {if(h…

Halcon圖像濾波方法與原理概述

目錄簡介Halcon算子與算法原理基礎濾波a、均值濾波b、中值濾波c、高斯濾波d、導向濾波簡介 圖像濾波&#xff0c;即在盡量保留圖像細節特征的條件下對目標圖像的噪聲進行抑制&#xff0c;是圖像預處理中不可缺少的操作&#xff0c;其處理效果的好壞將直接影響到后續圖像處理和…