H264 Profile對比分析

Baseline
支持I/P 幀,只支持無交錯(Progressive)和CAVLC
一般用於低階或需要額外容錯的應用,比如視頻通話、手機視頻等;
  

Main
支持I/P/B 幀,無交錯(Progressive)和交錯(Interlaced),CAVLC 和CABAC
用於主流消費類電子產品規格如低解碼(相對而言)的mp4、便攜的視頻播放器、PSP和Ipod等;
  

High
在Main的基礎上增加了8x8 內部預測、自定義量化、無損視頻編碼和更多的YUV 格式(如4:4:4)
用於廣播及視頻碟片存儲(藍光影片),高清電視的應用。

0. 前言
本文首先會談談profile和level是幹什麼的,然後聊聊用ffmpeg和x264命令行怎麼指定對應參數,最後聊聊在代碼中怎麼使用設置profile和level。

1. H264 Profile
簡單理解就是H264有多個版本,版本越高編碼效率和壓縮率就越高,對應的版本是Profile。
從低到高分別爲:Baseline、Main、High
在相同配置情況下,High profile(HP)可以比Main profile(MP)節省10%的碼流量,比MPEG-2 MP節省60%的碼流量,具有更好的編碼性能。(這是個普遍認可的一組數據)

 
【整理者】61ic.com
【提供者】QuestionMark


2. H264 Level
每個level都規定了一組對標準中語法成員(syntax element)所採用的各種參數值的限制。
在給定的profile下,level通常與解碼器的處理能力和內存容量相對應。每一個檔次設置不同的參數(如取樣速率、圖像尺寸、編碼比特率等),得到對應的編解碼器性能的不同level。


3. FFmpeg x264命令行編碼
詳細信息參考x264 –fullhelp

3.1 常用參數
crf
用於控制視頻畫質,取值爲[0-51],數值越低畫質越好
0:無損
51:最次
默認值23, 通常取值範圍:[18-28]

crf每+6,比特率減半
crf每-6,比特率翻倍

profile:
baseline, main, high, high10, high422, high444

preset:
ultrafast,superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo

tune:
和使用場景,視頻源有關
film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency

Tune the settings for a particular type of sourceor situation

此外x264編碼還支持多線程,可用threads參數控制開啓的線程個數,當threads爲0時自動選擇開啓多少個線程。

3.2 實例
首先需要FFmpeg在編譯的時候開啓了支持x264。
下面是幾個用ffmpeg進行轉碼的命令,video codec設置爲libx264, audio codec爲copy。

輸入視頻是用Android Nexus 5X拍攝,視頻時長約8s,720P,編碼採用h264(baseline),比特率11848kb/s,詳細信息如下:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2017-03-08T06:38:22.000000Z
    com.android.version: 7.1.1
    com.android.capture.fps: 30.000000
  Duration: 00:00:07.87, start: 0.000000, bitrate: 12344 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt470bg/smpte170m), 1280x720, 11848 kb/s, SAR 1:1 DAR 16:9, 28.99 fps, 120 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 270
      creation_time   : 2017-03-08T06:38:22.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of 90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2017-03-08T06:38:22.000000Z
      handler_name    : SoundHandle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CRF
ffmpeg -i VID.mp4 -c:v libx264 -profile high -crf xx -c:a copy -y vid_x264.mp4
1
CRF    編碼速度(dutation/t)    比特率(kb/s)
org    1.0    11848
23    0.4    3552
22    0.37    4018
18    0.308    6661
Profile
ffmpeg -i VID.mp4 -c:v libx264 -profile high -c:a copy -y vid_x264.mp4
1
Profile    編碼速度(dutation/t)    比特率(kb/s)
org    1.0    11848
high422    0.494    3552
high    0.496    3552
main    0.511    3542
baseline    0.736    5331
Preset
 ffmpeg -i VID.mp4 -c:v libx264 -profile high -crf 23 -preset ultrafast -c:a copy -y vid_x264.mp4
1
Profile    編碼速度(dutation/t)    比特率(kb/s)
org    1.0    11848
ultrafast    2.81    16585
faster    0.645    3596
medium    0.495    3552
veryslow    0.068    3242
tune
和使用場景和視頻源有關

ffmpeg -i VID.mp4 -c:v libx264 -profile high -crf 23 -tune zerolatency -c:a copy -y vid_x264.mp4
1
比特率
線程
4. FFmpeg編碼設置
5. 參考文獻
[1] https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles
[2] H264視頻編碼級別說明profile level Encoder
[3] x264 FFmpeg Options Guide
[4] FFmpeg and H.264 Encoding Guide
————————————————
版權聲明:本文爲CSDN博主「微巖」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/matrix_laboratory/article/details/72764621

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章