快轉到主要內容
  1. 技術/

FFmpeg H.264 編碼器

·3 分鐘
media - 本文屬於一個選集。
§ : 本文
H264

H.264 / MPEG-4 AVC 是目前最被廣泛被應用的視訊編碼格式,它的壓縮效率比 MPEG-2、MPEG-4、RV40 …等舊視訊編碼格式還要高許多。

如果要輸出 H.264 / AVC 視訊編碼,則需要 libx264 編碼器,FFmpeg 的組態設定之中必須有 --enable-libx264 則才可以使用。

H.264 有多個版本,版本越高壓縮比就越高(對應到 profile)

碼率控制(Rate control)
#

Rate control 是指控制 每個畫格用了多少個位元 的方法,這將影響檔案大小和品質分布。這裡就先不探討 Rate control 的種類有哪些。 通常會用下列兩種模式: Constant Rate Factor (CRF)、Two-Pass ABR,若沒有控制輸出大小的需求則使用 CRF 即可

Constant Rate Factor(CRF)
#

固定品質指標,而不在意大小;CRF 會得到最佳的 bitrate 分配結果,缺點是你不能直接指定一個目標 bitrate 或是檔案大小。
設定值範圍為 0 – 51(可能會依照編譯版本而不同),0 為最高品質,預設值為 23,建議的範圍在 18 - 28,17 或 18 接近視覺無損,但在技術上來說並不是無損。

Two-Pass ABR(Average Bitrate)
#

以平均值來說 ABR 與 CBR 相同,但 ABR 允許在 “適當” 的時候使用更好的 bitrate 以取得更好的畫質,但 ABR 是用動態補償的方式來計算畫面的複雜度,也就是說在影片的起始及開頭,或是當畫面不如預期變化的時候則可能會影響到產出。
所以在 two-pass 的時候,第一次轉檔時會先分析紀錄影片的內容,第二次再依照分析的結果加以轉碼,但相對的就是非常耗時,要是沒有輸出大小的需求,則用 CRF 即可。

Preset
#

為選項集合,用來設定編碼速度,相對的也會影響到壓縮比;編碼越快則壓縮比越低。 一速度遞減排序為:ultrafastsuperfastveryfastfasterfastmedium(預設)、slowslowerveryslowplacebo

Tune 選項
#

也是為一個集合選項,可針對特定的影片類型微調參數設定值,以獲得更好的品質或壓縮率

  • Film:film,用於高解析度電影,降低 deblocking
  • Animation:animation,動畫&卡通,使用 deblocking 和較多的 reference frames
  • Grain:grain,保留舊影片的顆粒感
  • Still Image:stillimage,幻燈片效果的影片
  • Fast Decode:fastdecode,啟用部分禁用的 filter 來加速編碼
  • Zero Latency:zerolatency,快速編碼&低延遲
  • PSNR:psnr,優化 PSNR
  • SSIM:ssim,優化 SSIM

Profile
#

複合選項,Profile 越好壓縮比也越高,但編碼複雜度相對提升;越好的 Profile 相對啟用的功能也越多,所以對播放硬體的需求也較高

Profiles
baselinemainhigh
no-8x8dct11
bframes0
no-cabac1
cqmflatflat
weightp0

Level
#

複合選項,與解碼器的效能及容量對應,Level 越高需求越高

Level
MaxMBPS(MB/s)MaxFS(MBs)MaxDpbMbs(MBs)MaxBR(kbit/s)(Baseline,Main Profiles)Examples for high resolution@ highest frame rate
3.040,5001,6208,100010,000176×144@172 352×240@120 352×480@60 720×480@30 720×576@25
3.1108,0002,60018,00014,000352x288@172 352x576@130 640x480@90 720×576@60 1,280×720@30
4.0245,7608,19232.76820,000720x480@172 720x576@150 1,280×720@60 2,048×1,024@30
4.1245,7608,19232,76850,000720x480@172 720x576@150 1,280×720@60 2,048×1,024@30
4.2522,2408,70434,81650,000720x576@172 1,280×720@140 2,048×1,080@60

Decoded picture buffering
#

capacity = min(floor(MaxDpbMbs / (PicWidthInMbs * FrameHeightInMbs)), 16)
Level3.03.14.04.14.2
MaxDpbMbs8,10018,00032,76832,76834,816

自定義
#

以上說的都是複合指令,若是有需求也可利用 -x264-params 做個別設定

可參考: https://ffmpeg.org/ffmpeg-codecs.html#libx264_002c-libx264rgb

  • -I, keyint
    設定 i-frame 間隔,也就是 GOP size

  • -i, --min-keyint
    最小 GOP size

  • -r, --ref
    控制 DPB(Decoded Picture Buffer) 大小,表示 P-frame 參照多少個 frame。預設值為 3,範圍:0 - 16。

  • --scenecut
    配置動態 i-frame 的參考值;x264 的 frame 中會紀錄與參考 frame 的差異,當判斷差異過大時就是場景變更,此時就會插入一個 i-frame 來做紀錄,差異的依據可由設定 scenecut 來做判別,當設為 0 時等同 no-scenecut。

  • --no-scenecut
    停用 adaptive I-frame decision

參數優先順序
#

preset -> tune -> "custom" -> profile -> level
media - 本文屬於一個選集。
§ : 本文

相關文章

FFmpeg 常用選項

·4 分鐘
接續著上次的簡介及流程介紹,這次就來聊聊常用到的選項(還偷渡了一點我會用到的 XDD) 一開始我們先來確認 FFmpeg 的版本 & 內含 Library,這關係到我們能用的功能,好比說我想轉 H.264 的 Codec,那麼我就要先確認我有沒有 libx264 這個函式庫

FFmpeg 多媒體框架

·3 分鐘
FFmpeg 為開源的影音處理框架,可幫助我們進行影音的格式轉換、分離、混合、過濾等等,支援格式 也非常的廣泛,也可以在多個作業系統及硬體架構上運作。同時也支援多種函式庫,更增加使用上的彈性,依照需求建立出最適合的工具。

OWASP Top 10 2017

·4 分鐘
這禮拜一去參加了 OWASP 2017 的研討會,其中提到了新發佈的 OWASP Top 10 2017版;先回頭來談一下什麼是 OWASP,在開發系統時,除了功能以外,安全也是必須要著重且注意的,在快速開發的過程中,常常會沒有兼顧到安全這塊;對於部分各戶來說,在還未出包之前大概也不會感覺到資安的重要;OWASP 就統整了十大弱點排名(當然啦~不是只有這十個需要重視), 最近的一次正式更新是在 2013 年,在這過程中資訊的進步很快,排名也略有變動。

GPS 資料格式

·3 分鐘
什麼是 NMEA file ? 美國國家海洋電子協會 (National Marine Electronics Association,NMEA) 制定了 GPS 協定標準規格,NMEA 0183 的資料格式中記錄了座標、方位、速度、衛星有效數量等等的資訊。

淺談 SEO

·3 分鐘
SEO 是什麼呢?它的全稱是 Search Engine Optimization(搜尋引擎優化)。 要如何優化呢?其實就是想辦法讓各家的搜尋引擎看懂你的網站;當然內容正確是基本的,搜尋引擎就像一個圖書館一樣,當書目很大量時就得依靠索引、關鍵字等等的輔助去找到書籍,依照大綱、標題等等的去找到正確的內容。再來就是要針對各家的演算法去做強化,但不建議過度針對演算法優化,把內容做好&標籤打對才是基本功。