基本概念
為了便于您更好的理解和使用媒體處理產(chǎn)品,您可以在使用前了解媒體處理中管道、工作流、轉(zhuǎn)碼模板、轉(zhuǎn)封裝等基本概念。
媒體處理產(chǎn)品級別概念
作業(yè)/任務(wù)(Job)
作業(yè)/任務(wù)(Job)是MPS中的一個抽象概念。
常見類型:提交媒體信息作業(yè)、提交轉(zhuǎn)碼作業(yè)、查詢轉(zhuǎn)碼作業(yè)、提交截圖作業(yè)、提交智能生產(chǎn)作業(yè)、提交智能標(biāo)簽作業(yè)、提交媒體審核作業(yè)、提交視頻DNA作業(yè)、提交視頻版權(quán)水印作業(yè)等。
提交任務(wù):
提交方式:支持使用MPS控制臺、調(diào)用各類提交作業(yè)的SDK/API、配置工作流后通過觸發(fā)工作流提交。
每次執(zhí)行的作業(yè)/任務(wù)包含3個關(guān)鍵信息:輸入、輸出和處理參數(shù)。以提交轉(zhuǎn)碼作業(yè)為例,提交時需要指定的核心參數(shù)有:輸入文件、輸出路徑、轉(zhuǎn)碼模板(或轉(zhuǎn)碼參數(shù))、管道、優(yōu)先級等。
調(diào)用模式和獲取結(jié)果:任務(wù)類型不同,執(zhí)行所需的時間也不同。部分任務(wù)很快完成,但是多數(shù)任務(wù)都需要下載文件,并經(jīng)過一段時間進行處理、分析,無法實時完成 。因此將任務(wù)分為同步、異步兩種調(diào)用模式。
調(diào)用模式
適用的任務(wù)
提交方式
獲取任務(wù)結(jié)果
流程圖
同步
單張截圖、獲取媒體信息作業(yè)。
調(diào)用各類提交作業(yè)的SDK/API
提交后,接口會立即返回任務(wù)結(jié)果,如截圖文件地址、媒體信息詳情。
您還可以通過輪詢查詢?nèi)蝿?wù)接口獲取任務(wù)結(jié)果,但不支持通過配置MNS消息接收任務(wù)結(jié)果。
說明若輸入文件較大可能會超時失敗,請酌情增加重試機制。
異步
MPS的所有任務(wù)類型,包括:
媒體轉(zhuǎn)碼(普通轉(zhuǎn)碼、窄帶高清1.0、窄帶高清2.0、音視頻增強等)、截圖、獲取媒體信息、視頻AI(視頻生產(chǎn)、智能標(biāo)簽、智能審核、視頻DNA、數(shù)字水印)等。
MPS控制臺(部分類型)
調(diào)用各類提交作業(yè)的SDK/API
配置工作流后通過觸發(fā)工作流提交(部分類型)
提交后,接口僅立即返回是否提交成功,而任務(wù)結(jié)果需要定時輪詢或配置MNS獲取。
定時輪詢:每個任務(wù)都有一個唯一JobId標(biāo)識,在提交任務(wù)時會同步返回給調(diào)用方,或在控制臺任務(wù)列表中查看。您可以記錄該JobId,定時輪詢查詢?nèi)蝿?wù)接口獲取任務(wù)結(jié)果。
配置MNS:為管道/工作流配置MNS消息,可以及時獲得任務(wù)結(jié)果。消息通知包含任務(wù)ID(JobId)、用戶數(shù)據(jù)(UserData)和具體結(jié)果。
管道(Pipeline)
管道(Pipeline)是異步任務(wù)的隊列。當(dāng)您提交異步任務(wù)后,任務(wù)會進入管道中進行排隊,在并發(fā)內(nèi)根據(jù)優(yōu)先級和提交順序依次被調(diào)度執(zhí)行。不同類型管道的創(chuàng)建數(shù)量、適用功能、并發(fā)能力不同。詳見管道概述。
工作流(Workflow)
工作流(Workflow)是預(yù)先編排好的一系列任務(wù)流程,可以實現(xiàn)在指定OSS Bucket上傳一個文件后,自動按照預(yù)先編排好的環(huán)節(jié)和條件依次執(zhí)行作業(yè)。
轉(zhuǎn)碼模板(Template)
轉(zhuǎn)碼模板是一系列處理參數(shù)的集合。在創(chuàng)建轉(zhuǎn)碼任務(wù)或使用工作流時,可以使用轉(zhuǎn)碼模板簡化操作。每個轉(zhuǎn)碼模板都有一個唯一ID標(biāo)識。按創(chuàng)建來源分為自定義模板、定制模板和系統(tǒng)預(yù)置模板。詳細信息請參見轉(zhuǎn)碼模板概述。
自定義模板:用戶通過MPS控制臺或接口創(chuàng)建的轉(zhuǎn)碼模板,無后臺定制參數(shù)。
定制模板:MPS根據(jù)用戶的個性化需求,在后臺配置了定制參數(shù)的轉(zhuǎn)碼模板,處理效果以定制參數(shù)為準(zhǔn),用戶自定義參數(shù)不會生效。定制參數(shù)對用戶不可見,用戶側(cè)不支持修改。
系統(tǒng)預(yù)置模板:MPS會根據(jù)不同分辨率,為適配一定網(wǎng)絡(luò)帶寬范圍提供的預(yù)置模板。包含預(yù)置靜態(tài)模板和預(yù)置智能模板,預(yù)置靜態(tài)模板支持普通轉(zhuǎn)碼、音頻轉(zhuǎn)碼、轉(zhuǎn)封裝、窄帶高清?1.0、窄帶高清?2.0。詳細信息請參見MPS控制臺或預(yù)置模板詳情。
水印模板(Watermark template)
水印模板是一系列為視頻添加水印的參數(shù)集合(水印位置、偏移量、大小等)。每個水印模板都有一個唯一ID標(biāo)識。為輸出視頻添加水印時,可指定水印模板或直接傳入相關(guān)參數(shù)。
模板分析作業(yè)(Analysic task)
由于輸入文件本身有誤差(分辨率、碼率等),不一定所有的預(yù)置模板都適用于該輸入文件。因此使用預(yù)置模板前,需要調(diào)用提交模板分析作業(yè)接口,模板分析作業(yè)的結(jié)果為該輸入文件可用的預(yù)置模板列表,結(jié)果可以通過查詢模板分析作業(yè)接口獲取。
音視頻基本概念
轉(zhuǎn)碼(Transcoding)
轉(zhuǎn)碼(Transcoding)是指將已經(jīng)壓縮編碼的音視頻碼流轉(zhuǎn)換成另一個音視頻碼流,以適應(yīng)不同的網(wǎng)絡(luò)帶寬、不同的終端處理能力和不同的用戶需求。轉(zhuǎn)碼本質(zhì)上是一個先解碼、再編碼的過程,因此轉(zhuǎn)換前后的碼流可能遵循相同的視頻編碼格式,也可能不遵循相同的視頻編碼格式。常見的編碼格式有H.264、H.265、AV1等。
轉(zhuǎn)封裝(Packaging)
轉(zhuǎn)封裝指的是將視頻或音頻的封裝格式進行轉(zhuǎn)換,如將AVI的視頻轉(zhuǎn)換為MP4,期間并不會進行音視頻的編碼和解碼工作,而是直接將視頻和音頻壓縮碼流從一種封裝格式文件中獲取出來然后打包成另一種封裝格式的文件。相比轉(zhuǎn)碼,轉(zhuǎn)封裝有兩大特點:
處理速度極快。音視頻編解碼過程十分復(fù)雜,占據(jù)了轉(zhuǎn)碼的絕大部分時間。轉(zhuǎn)封裝不需要進行編碼和解碼,節(jié)約了大量的處理時間。
音視頻質(zhì)量無損。沒有解碼(解壓縮)和編碼(壓縮)過程,所以不會有音視頻的壓縮損傷。轉(zhuǎn)封裝后的文件與原始文件的分辨率、碼率等幾乎一致,在MP4轉(zhuǎn)M3U8+TS場景下因協(xié)議規(guī)范會導(dǎo)致封包大小增加。
分辨率(Resolution)
分辨率(Resolution)用來描述視頻對細節(jié)的分辨能力,通常表示為每一個方向上的像素數(shù)量,比如1280x720等。分辨率決定了視頻畫面細節(jié)的精細程度。通常情況下,視頻的分辨率越高,所包含的像素就越多,畫面就越清晰。
分辨率是決定碼率的主要因素,不同的分辨率要采用不同的碼率。總體而言,視頻的分辨率越高,所要求的碼率也越大,但并不總是如此,不同分辨率都有合理的碼率選擇范圍。所謂“合理的范圍”指的是,如果低于這個范圍,視頻畫面質(zhì)量會很差;如果高于這個范圍,畫面提升有限甚至幾乎無提升,且浪費網(wǎng)絡(luò)流量和存儲空間。
碼率(Bitrate)
碼率(Bitrate)是指視頻文件在單位時間內(nèi)使用的數(shù)據(jù)流量,也叫碼流或碼流率,是視頻編碼中畫面質(zhì)量控制最重要的部分。量度單位為“比特每秒”(bit/s或bps),常使用Kbps(每秒多少千個比特)或Mbps。一般來說同樣分辨率下,視頻文件的碼率越大,壓縮比就越小,畫面質(zhì)量就越高。碼率越大,說明單位時間內(nèi)取樣率越大,數(shù)據(jù)流精度就越高,處理出來的文件就越接近原始文件,圖像質(zhì)量越好,畫質(zhì)越清晰,要求播放設(shè)備的解碼能力也越高。
當(dāng)然,碼率越大,文件體積也越大,其計算公式是文件體積=時間×碼率/8。例如,網(wǎng)絡(luò)上常見的一部60分鐘的碼率為1Mbps的720P的視頻文件,其體積就大概為3600秒×1Mb/8=450MB。
幀率(Frame Rate)
幀率(Frame Rate)是單位時間內(nèi)視頻顯示幀數(shù)的量度單位,也就是每秒鐘刷新的圖片的幀數(shù),量度單位為“每秒顯示幀數(shù)”(Frame Per Second,F(xiàn)PS)或“赫茲”。
高的幀率可以得到更流暢、更逼真的畫面效果。一般來說25~30fps就可接受,提升至60fps則可以明顯提升交互感和逼真感,但一般來說超過75fps就不容易察覺到有明顯的流暢度提升了。如果幀率超過屏幕刷新率只會浪費圖形處理的能力,因為顯示設(shè)備不能以這么快的速度更新,這樣超過刷新率的幀率就浪費掉了。在分辨率不變的情況下,幀率越高,則對顯卡的處理能力要求越高。
關(guān)鍵幀間隔(GOP)
GOP(Group of Pictures)是一組以MPEG編碼的影片或視訊串流內(nèi)部的連續(xù)圖像,以I幀開頭,到下一個I幀結(jié)束。一個GOP包含如下圖像類型:
I幀(Intra Coded Picture):又稱幀內(nèi)編碼幀,為關(guān)鍵幀,是一種自帶全部信息的獨立幀,無需參考其他圖像便可獨立進行解碼,可以簡單理解為一張靜態(tài)畫面。視頻序列中的第一個幀始終都是I幀,每個GOP由I幀開始。
P幀(Predictive Coded Picture):又稱幀間預(yù)測編碼幀,需要參考前面的I幀才能進行編碼。表示的是當(dāng)前幀畫面與前一幀(前一幀可能是I幀也可能是P幀)的差別。解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。與I幀相比,P幀通常占用更少的數(shù)據(jù)位,但不足是,由于P幀對前面的P和I參考幀有著復(fù)雜的依賴性,因此對傳輸錯誤非常敏感。
B幀(Bidirectionally Predictive Coded Pictures):又稱雙向預(yù)測編碼幀,也就是B幀記錄的是本幀與前后幀的差別。要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,但是對解碼性能要求較高。
GOP值表示關(guān)鍵幀的間隔(即兩個關(guān)鍵幀之間的幀數(shù)),也就是兩個IDR幀之間的距離,一個幀組的最大幀數(shù)。一般而言,每一秒視頻至少需要使用1個關(guān)鍵幀。增加關(guān)鍵幀個數(shù)可改善視頻質(zhì)量,但會同時增加帶寬和網(wǎng)絡(luò)負載。GOP值(幀數(shù))除以幀率即為時間間隔,如阿里云視頻點播默認的GOP值為250幀,幀率為25fps,則時間間隔為10秒。
GOP值需要控制在合理范圍,以平衡視頻質(zhì)量、文件大小(網(wǎng)絡(luò)帶寬)和seek效果(拖動、快進的響應(yīng)速度)等:
加大GOP值有利于減小視頻文件大小,但也不宜設(shè)置過大,太大則會導(dǎo)致GOP后部幀的畫面失真,影響視頻質(zhì)量。
GOP值也是影響視頻seek響應(yīng)速度的關(guān)鍵因素,seek時播放器需要定位到離指定位置最近的前一個關(guān)鍵幀,如果GOP太大意味著距離指定位置可能越遠(需要解碼的預(yù)測幀就越多)、seek響應(yīng)的時間(緩沖時間)也越長。
由于P、B幀的復(fù)雜度大于I幀,GOP值過大,過多的P、B幀會影響編碼效率,使編碼效率降低。
但如果設(shè)置過小的GOP值,則需要提高視頻的輸出碼率,以確保畫面質(zhì)量不會降低,故會增加網(wǎng)絡(luò)帶寬。
編碼級別(Profile)
編碼級別(Profile)是針對特定應(yīng)用場景的特定編碼功能的集合。
H.264 規(guī)定了三種主要級別:
Baseline:基本畫質(zhì),適合移動端設(shè)備。支持I/P 幀,只支持無交錯(Progressive)和CAVLC。
Main:主流畫質(zhì),適合標(biāo)準(zhǔn)分辨率設(shè)備,如低解碼(相對而言)的 MP4、便攜的視頻播放器、PSP 和 iPod 等。支持I/P/B 幀,支持無交錯(Progressive)和交錯(Interlaced),也支持CAVLC和CABAC。
High:高級畫質(zhì),適合高分辨率、大屏設(shè)備,比如廣播及視頻碟片存儲(藍光影片),高清電視。在Main的基礎(chǔ)上增加了8x8內(nèi)部預(yù)測、自定義量化、無損視頻編碼和更多的YUV格式。
AAC的主要級別:
aac_low:Low Complexity AAC (LC)
aac_he:High Efficiency AAC (HE-AAC)
aac_he_v2:High Efficiency AAC version 2 (HE-AACv2)
aac_ld:Low Delay AAC (LD)
aac_eld:Enhanced Low Delay AAC (ELD)
碼率控制方法
碼率控制是指視頻編碼中決定輸出碼率的過程,常用的碼率控制方法有:
CBR(Constant Bitrate):固定碼率模式,指文件從頭到尾都是一種碼率。相對于VBR和ABR來講,它壓縮出來的文件體積較大,而且視頻質(zhì)量相對于VBR和ABR不會有明顯的提高。
VBR(Variable Bitrate):動態(tài)碼率模式,也就是非固定碼率。音視頻編碼時,根據(jù)輸入文件的復(fù)雜程度即時確定使用什么碼率,對于復(fù)雜內(nèi)容分配更高碼率,對于簡單內(nèi)容分配較少碼率。VBR一般需與Two-Pass編碼模式使用。VBR適用于存儲場景,可以更合理利用有限的存儲空間,但無法預(yù)知輸出文件的大小和碼率波動情況。
ABR(Average Bitrate):平均碼率模式,是VBR的一種插值參數(shù)。LAME針對CBR不佳的文件體積比和VBR生成文件大小不定的特點創(chuàng)造了這種編碼模式。ABR在指定的文件大小內(nèi),以每50幀(30幀約1秒)為一段,低頻和不敏感頻率使用相對低的流量,高頻和大動態(tài)表現(xiàn)時使用高流量,可以做為VBR和CBR的一種折衷選擇。ABR在一定的時間范圍內(nèi)達到設(shè)定的碼率,但是局部碼率峰值可以超過設(shè)定的碼率,平均碼率恒定。ABR是VBR的改良版,能確保輸出平均碼率在合理范圍,且在這個范圍內(nèi),還是動態(tài)根據(jù)復(fù)雜度編碼,也是阿里云默認的編碼控制方式。
VBV(Video Buffering Verifier):視頻緩沖區(qū)校驗器提供了一種確保碼率被限制在某個最大值的方法,通過設(shè)置輸出碼率峰值maxrate和緩沖區(qū)大小bufsize來使用該方法。VBV可以與Two-Pass或CRF編碼一起使用,后一種模式也被稱為“Capped CRF”。
Bufsize:視頻緩沖區(qū)大小。設(shè)置取決于你期望碼率的波動情況。通常將bufsize設(shè)為maxrate的兩倍;如果客戶端緩存比較小,可設(shè)置bufsize等于maxrate;如果想限制碼率,可設(shè)置bufsize為maxrate的一半或更小。
CRF(Constant Rate Factor):質(zhì)量控制因子模式。將視頻質(zhì)量量化為不同等級,0為無損,51為最差。通過設(shè)置CRF實現(xiàn)整體視頻的主觀質(zhì)量恒定,所以碼率也會隨場景復(fù)雜度而波動。如果您不清楚使用什么CRF,建議取值[23,29]。您可根據(jù)畫面復(fù)雜度進行調(diào)節(jié),每增或減6,碼率會減少一半或增加一倍,通常同等清晰度下動畫片可以比實拍設(shè)置得更高。CRF可以獲得更好的視頻質(zhì)量,但無法預(yù)知輸出文件的大小和碼率波動情況。
Capped CRF:CRF輸出的碼率不固定,可以結(jié)合VBV一起使用來限制碼率波動范圍,避免出現(xiàn)碼率尖峰。
One-Pass:相比Two-Pass的編碼速度更快。是阿里云默認的編碼方式。
Two-Pass:編碼器執(zhí)行兩次來精準(zhǔn)分配碼率,以獲取體積更小質(zhì)量更高的編碼結(jié)果。first pass用于分析視頻并生成log文件,second pass會根據(jù)分析結(jié)果執(zhí)行編碼以獲得最佳編碼質(zhì)量。Two-Pass相比One-Pass模式需要花費更多時間,所以無法使用在直播、實時通信等對轉(zhuǎn)碼時效性要求高的場景。以及若輸入視頻的壓縮率已經(jīng)很高,也不適合使用Two-Pass,會出現(xiàn)塊效應(yīng)。
通用概念
地域(Region)
地域(Region)指阿里云的服務(wù)節(jié)點。用戶通過選擇不同阿里云Region的服務(wù),可就近使用阿里云的服務(wù),獲得更低的訪問延時和更好的用戶體驗。
對象存儲(OSS)
指阿里云對象存儲服務(wù)(OSS)。媒體處理服務(wù)對用戶存儲于OSS的媒體文件進行轉(zhuǎn)碼,轉(zhuǎn)碼輸出文件也保存在OSS中。更多OSS相關(guān)概念,請參見OSS基本概念。
存儲空間(Bucket)
存儲空間是用戶用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個存儲空間。存儲空間具有各種配置屬性,包括地域、訪問權(quán)限、存儲類型等,用戶可以根據(jù)實際需求,創(chuàng)建不同類型的存儲空間用來存儲不同的數(shù)據(jù)。更多說明,請參見存儲空間(Bucket)。
對象(Object)
對象是OSS存儲數(shù)據(jù)的基本單元,也被稱為OSS的文件。和傳統(tǒng)的文件系統(tǒng)不同,對象沒有文件目錄層級結(jié)構(gòu)的關(guān)系。對象由元信息(Object Meta),用戶數(shù)據(jù)(Data)和文件名(Key)組成,并且由存儲空間內(nèi)部唯一的Key來標(biāo)識。對象元信息是一組鍵值對,表示了對象的一些屬性,比如最后修改時間、大小等信息,同時用戶也可以在元信息中存儲一些自定義的信息。更多說明,請參見對象(Object)。
AccessKey(訪問密鑰)
AccessKey簡稱AK,指的是訪問身份驗證中用到的AccessKey ID和AccessKey Secret。OSS通過使用AccessKey ID和AccessKey Secret對稱加密的方法來驗證某個請求的發(fā)送者身份。AccessKey ID用于標(biāo)識用戶,AccessKey Secret是用戶用于加密簽名字符串和OSS用來驗證簽名字符串的密鑰,必須保密。
AccessKey包含以下三種:
Bucket的擁有者申請的AccessKey。
被Bucket的擁有者通過RAM授權(quán)給第三方請求者的AccessKey。
被Bucket的擁有者通過STS授權(quán)給第三方請求者的AccessKey。
更多信息,請參見創(chuàng)建AccessKey。