x264多執行緒編碼

2021-08-30 15:58:36 字數 975 閱讀 9265

**:

x264有兩種並行模式,slice並行和frame並行。slice並行把一幀劃分為多個矩形slice,在這多個slice之間並行處理,是一種非延時性的並行模式,多slice會稍微降低編碼效能。frame並行是同時開啟多幀編碼,x264在n個frame並行的時候需要集齊n幀再開始一起編碼,因此x264 frame並行是一種延時性的並行模式(這是x264流程的問題,其實frame並行機制並不要求集齊n幀以後再啟動編碼)。對於對編碼時間敏感的實時應用,不能採用frame並行,只能採用slice並行或者不做並行編碼。

x264_param_t結構體裡面的i_threads引數定義並行單元數目,根據並行模式的不同有不同的意義。

i_threads有三種設定方式。

1. i_threads = 1;

明確告訴編碼器,不使用並行編碼。zerolatency場景下設定param.rc.i_lookahead=0; 那麼編碼器來一幀編碼一幀,無並行、無延時。如果沒有設定i_lookahead=0,編碼器會延時40幀(程式預設值),再開始編碼,這是為了做位元速率控制而統計幀資訊。

2. i_threads = n;  (n>1)

明確告訴編碼器,使用n個並行單元編碼。如果param.b_sliced_threads=1那麼一幀影象被劃分為n個slice(n的取值也有限制,不能大於影象巨集塊行數),進行slice並行。如果param.b_sliced_threads=0進行frame並行。編碼器會延時max(n, param.rc.i_lookahead)幀。zerolatency場景下場景下,param.b_sliced_threads=1; param.rc.i_lookahead=0; n個slice並行、無延時。注意有些廠家的解碼器不支援多slice碼流,這時不能進行這種設定,而只能採用設定1。

3. i_threads = 0; 或者不設定

不配置並行單元數,由程式根據當前cpu效能決定n值。決定n值後的流程和設定2是一樣的。

一般slice並行n值小於frame並行的n值。

x264多執行緒編碼

x264有兩種並行模式,slice並行和frame並行。slice並行把一幀劃分為多個矩形slice,在這多個slice之間並行處理,是一種非延時性的並行模式,多slice會稍微降低編碼效能。frame並行是同時開啟多幀編碼,x264在n個frame並行的時候需要集齊n幀再開始一起編碼,因此x264...

ffmpeg常用編碼引數含x264

ab 音訊轉換後的bit率 預設64k acodec 制度音訊使用的編碼器 codecs ac 制定轉換後音訊的聲道 ar 音訊轉換後的取樣率 profile v main high baseline level v 3.2 ss 00 00 00 to 00 05 00 t 300 質量引數 pr...

x264大致編碼流程

只寫了主要函式的功能大概是什麼,詳細 還需要自己細看研究。x264中主要的函式呼叫關係如下 main main internal main internal 呼叫parse 函式解析輸入的引數,呼叫encode 函式編碼 parse 函式呼叫以下函式 encode 函式呼叫以下函式 x264 enc...