自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊一聊視頻清晰度優(yōu)化指南

開發(fā) 架構(gòu)
本文結(jié)合當(dāng)下視頻的痛點(清晰度問題),提出衡量視頻清晰度的標(biāo)準(zhǔn)——主觀標(biāo)準(zhǔn)和客觀標(biāo)準(zhǔn),指明了視頻清晰度的優(yōu)化目標(biāo)和方向,根據(jù)視頻的基本特征(碼率、GOP、編碼模式等)提出基礎(chǔ)優(yōu)化的方法,在基礎(chǔ)優(yōu)化的基礎(chǔ)上提出高級編碼方式(相對H.264編碼方式),再結(jié)合目前主流的視頻色彩濾鏡提出視頻色彩調(diào)優(yōu)方案,讓視頻看上去更清晰。

一、背景介紹

隨著移動互聯(lián)網(wǎng)的深入發(fā)展,視頻消費場景逐漸變成主流,早期由于手機硬件的限制問題,導(dǎo)致生產(chǎn)出來的視頻畫質(zhì)、清晰度存在較大的問題,用戶體驗不太好,當(dāng)時的網(wǎng)絡(luò)也處于4G的發(fā)展階段,網(wǎng)絡(luò)的限制也無法持續(xù)支持高清視頻的消費,但是現(xiàn)在5G發(fā)展地如火如荼,網(wǎng)絡(luò)的高速發(fā)展,手機硬件性能的提升,用戶越來越不滿足于低畫質(zhì)和低清晰度的視頻。提升視頻的畫質(zhì)和清晰度勢在必行,需要一套行之有效提升視頻清晰度的優(yōu)化方案。

二、評價標(biāo)準(zhǔn)

做一件事情之前,首先需要確定一下評價這件事情的標(biāo)準(zhǔn)。所以在提出視頻清晰度優(yōu)化方案之前,必須先確定一下衡量視頻清晰度的評價準(zhǔn)則。評價視頻清晰度有兩種準(zhǔn)則:

2.1 客觀標(biāo)準(zhǔn)

客觀標(biāo)準(zhǔn)就是利用算法計算視頻畫面質(zhì)量分,同等條件下,如果A視頻的質(zhì)量分得到高于B視頻,說明A視頻的保真質(zhì)量做得比B視頻更好。評估視頻質(zhì)量的算法有兩大類:

  • 完全參考:兩個視頻逐幀對比分析,計算對比的質(zhì)量,這種使用的比較多,常見的VMAF、PSNR、SSIM都是完全參考。
  • 部分參考:截圖視頻中的部分幀來對比分析。有些場景例如直播沒法完全對比,截取部分幀來對比是比較科學(xué)的。

目前Netflix推出的VMAF算法是評價視頻質(zhì)量的主流算法,下面我們簡單介紹一下:

  • VMAF 全稱 Video Multi-method Assessment Fusion ,它借助人類視覺模型以及機器學(xué)習(xí)來評估一個視頻的質(zhì)量。
  • VMAF的評價指標(biāo)主要包含:其中VIF和DLM是空間域的,表示一幀畫面之內(nèi)的特征;TI是時間域的,表示多幀畫面之間的相關(guān)性特征。

視頻信息保真度(VIF:Visual Quality Fidelity)

細節(jié)損失指標(biāo)(DLM:Detail Loss Measure)

時域運動指標(biāo)/平均相關(guān)位置像素差(TI:Temporal Information)

  • VMAF基于SVM的nuSvr算法,在運行的過程中,根據(jù)事先訓(xùn)練好的model,賦予每種視頻特征以不同的權(quán)重,對每一種畫面都生成一個評分,最終以均值算法進行歸總,算出該視頻的最終評分。
  • VMAF計算出的分數(shù)范圍是0 ~ 100,其中0表示最低質(zhì)量,100表示最高質(zhì)量,后續(xù)對比的時候只給出分數(shù)。

2.2 主觀標(biāo)準(zhǔn)

客觀標(biāo)準(zhǔn)固然重要,但是視頻是給人看的,最終視頻的質(zhì)量好不好,還需要用戶主觀感受。換言之,兩個視頻的VMAF可能相近,但是用戶觀感可能會不一樣,有些用戶喜歡柔色,有些用戶喜歡暖色。

主觀標(biāo)準(zhǔn)操作起來比較簡單,找?guī)讉€視頻,讓用戶觀看之后主觀給出評價,視頻A和視頻B的質(zhì)量對比如何,這種輸出的結(jié)果比較準(zhǔn)確,但是工作量比較大,不好大范圍推廣。所以根據(jù)項目要求,在特定的時候采用客觀評價標(biāo)準(zhǔn),在某些場景采用主觀評價標(biāo)準(zhǔn)。

例如下面兩張圖片,它們的VMAF值是相近的,但是第二張看上去明顯比第一張畫質(zhì)好多了,而且更加明亮,這并沒有改變圖片的編碼結(jié)構(gòu),只是對畫面本身進行一些調(diào)色處理(這個我們下面會單獨拎出來講),就能明顯提升主觀感受。所以評價視頻質(zhì)量需要綜合主觀標(biāo)準(zhǔn)和客觀標(biāo)準(zhǔn)綜合來判斷。而且我們建議在有條件的情況下,主觀標(biāo)準(zhǔn)更加重要,因為客觀標(biāo)準(zhǔn)只是模擬人眼的視覺系統(tǒng),和真實的場景還是有所差距。

圖片

圖片

三、基礎(chǔ)優(yōu)化

通過上面的描述我們基本了解了視頻質(zhì)量的評價標(biāo)準(zhǔn),但如果要提升視頻質(zhì)量,這些還不夠,我們還需要介紹一下視頻的基本屬性,以及這些屬性可以在多大程度上影響視頻的質(zhì)量。

我們首先使用MediaInfo來查看一下視頻的屬性,由于重點關(guān)注畫質(zhì),所以就自動忽略封裝格式和音頻流信息,只關(guān)注視頻軌道信息:

Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L3.1
Format settings : CABAC / 4 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 4 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 2 min 41 s
Bit rate : 634 kb/s
Bit rate mode : CBR
Width : 960 pixels
Height : 540 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.049
Stream size : 12.2 MiB (94%)
Writing library : x264 core 148
Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=17 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=75 / keyint_min=7 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=26.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=800 / vbv_bufsize=1600 / crf_max=0.0 / nal_hrd=none / filler=0 / ip_ratio=1.40 / aq=1:1.00
Codec configuration box :

其中有幾個非常重要的屬性需要特別關(guān)注一下:下面我們列出的各個屬性都是基于其他條件不變的情況下,只改變當(dāng)前屬性。例如談Profile,就要保證其他的屬性是相同的,只有Profile不同,這樣比較視頻的畫質(zhì)才有意義。

3.1 Profile

Profile對應(yīng)上面的是Encoder Profile Level,正常情況下,Profile Level有三種類型:

  • Baseline Profile
  • Main Profile
  • High Profile

其中Baseline Profile對應(yīng)清晰度最低,Android 3.0之后的版本都支持的,Main Profile清晰度比Baseline Profile清晰度要好,但是從Android 7.0之后才支持,High Profile清晰度最高,也是從Android 7.0之后才支持。我們在設(shè)置Encoder Profile Level之前,需要判斷一下當(dāng)前是否支持。

3.2 Bitrate碼率

視頻碼率是視頻數(shù)據(jù)傳輸時單位時間內(nèi)傳送的數(shù)據(jù)位數(shù)。單位是kbps,望文生義,碼率越大,單位時間填充的數(shù)據(jù)就越多,視頻質(zhì)量就越高。

碼率并不是越大越好,碼率設(shè)置超過一定的大小,對視頻畫質(zhì)的提升已不太明顯,肉眼已經(jīng)看不出區(qū)別,但是視頻大小會增加很多。所以設(shè)置合適的碼率就行。通常建議的碼率計算方式是:

Bitrate = width * height * frameRate * factor
factor = 0.15

按照上面的公式設(shè)置的碼率是比較合適的,當(dāng)然如果想要更加高清的,可以適當(dāng)增加factor大小。

3.3 Bitrate Mode

碼率雖然設(shè)置了,但是碼率是描述一段時間的平均傳輸?shù)臄?shù)據(jù)位數(shù),無法保證每一個時間段內(nèi)傳送的數(shù)據(jù)大小是固定的或者在一個固定的范圍內(nèi)。還有一個Bitrate Mode參數(shù)來表示碼率模式。它也有三種類型:

  • VBR:可變碼率(Variable Bitrate), 此編碼方式會根據(jù)幀間數(shù)據(jù)的變化量大小來動態(tài)調(diào)整碼率,如果幀間的運動變化比較大,調(diào)高碼率,如果幀間的運動變化比較小,調(diào)小碼率。從編碼方式就可以看出來,這樣的編碼方式有兩個缺點:(1)運動預(yù)測計算算法有一定的耗時,編碼時間較長;(2)碼率多變,最終生成的文件大小不可預(yù)測。可能很大也可能很小。
  • CBR:固定碼率或者常數(shù)碼率(Constant Bitrate), 這是默認的編碼方式,使用此編碼方式,文件從始至終的編碼碼率會固定不變或者基本不變。這種方式的好處是文件大小是確定的,不會出現(xiàn)文件大小不可預(yù)測的情況。但是缺點也很明顯,有時候幀間變化比較大,有時候幀間變化比較小,如果都使用同樣的碼率,幀間變化比較大的時間畫質(zhì)會比較一般,幀間變化比較小的時間顯得浪費。無法做到較好的平衡。
  • ABR:平均碼率(Average Bitrate), 平均碼率較好地兼顧了VBR和CBR的,在幀間變化比較大的時間使用較大的碼率,在幀間變化比較小的時間采用較小的碼率,最終保證整體采用的碼率固定就可以了。較好的處理了畫質(zhì)和文件大小之間的矛盾。

但是很可惜的是MediaCodec并不支持ABR,我們?nèi)绻氩捎肁BR模式的話還需要使用軟編碼。MediaCodec也提供了三種模式:

BITRATE_MODE_CQ:這種模式是全面考慮視頻質(zhì)量,盡可能保證視頻質(zhì)量,所以編碼出來的視頻都很大,并不可取。

  • BITRATE_MODE_VBR:同上面的VBR
  • BITRATE_MODE_CBR:同上面的CBR

眾所周知,硬編碼速度要遠遠快于軟編碼,所以編碼都是優(yōu)先采用硬編碼,硬編碼失敗再采用軟編碼兼容。所以硬編碼MediaCodec建議采用BITRATE_MODE_CBR模式,切換到軟編碼采用VBR模式。

3.4 B幀設(shè)置

視頻由I幀、P幀、B幀 三種類型的視頻幀組成的。

I幀是幀內(nèi)圖像幀,就是關(guān)鍵幀,意思是此幀不需要依賴其他的幀就可以進行編碼或者解碼。

P幀是前向預(yù)測圖像幀,此幀需要參考在它之前的I幀或者P幀,采用運動預(yù)測的方式進行幀間編碼或者解碼。P幀大小相當(dāng)于I幀大小的1/10 ~ 1/20。

B幀是雙向預(yù)測圖像幀,此幀需要參考在它之前的I幀或者P幀,也需要參考在它之后的I幀或者P幀,采用運動預(yù)測的方式進行幀間預(yù)測編碼或者解碼。

GOP表示兩個I幀之間的圖像幀序列,GOP=2s,表示兩個I幀之間的間隔是2s。

Android平臺只有高通部分芯片支持B幀編碼,并且Android系統(tǒng)也沒有開發(fā)設(shè)置B幀的接口,所以對使用Android MediaCodec編碼的開發(fā)者而言,無法開啟B幀編碼(iOS是可以的,暗自垂淚)。當(dāng)然軟編碼是可以設(shè)置B幀的。

設(shè)置B幀有什么好處?

B幀大小約是I幀大小的1/50,如果設(shè)置了B幀了,并不會降低清晰度,但是可以大大降低視頻的大小,這樣我們就可以相應(yīng)地調(diào)大碼率,最終實現(xiàn)了提升清晰度的目標(biāo)。

當(dāng)然設(shè)置了B幀之后,增加了編碼和解碼的復(fù)雜度,這點開發(fā)者在設(shè)置的時候必須要有充分的認識。

四、HEVC編碼

目前H.264編碼還是使用最廣泛的編碼方式,主要還是H.264編碼的兼容性比較好,而且免費開源。HEVC自從2013年第一版發(fā)布開源出來,還沒有完全替代H.264(主要原因是收費,而且部分機型可能不支持),不過HEVC憑借其獨特的優(yōu)勢也得到了較多地應(yīng)用。

HEVC相對H.264的優(yōu)勢:

  • HEVC標(biāo)準(zhǔn)視頻的幀內(nèi)預(yù)測模式支持33種方向,并且提供了更好的運動補償處理和矢量預(yù)測方法。而H.264只支持8種。
  • HEVC采用了塊的四叉樹劃分結(jié)構(gòu),采用了8x8 ~ 64 x 64 像素的自適應(yīng)塊劃分,而H.264每個宏塊的大小都是固定的16 x 16像素,HEVC的這樣設(shè)計可以保證在不同的幀間和幀內(nèi)復(fù)雜程度中可以動態(tài)調(diào)整宏塊的大小,經(jīng)過測試發(fā)現(xiàn),在相同的圖像質(zhì)量下,HEVC編碼的視頻比H.264編碼的視頻約減少40%,換言之,如果HEVC和H.264碼率相同,那么HEVC編碼的視頻比H.264編碼的視頻要清晰地多。

圖片

上圖可以看出同樣的視頻幀,HEVC使用的宏塊比H.264要少很多,體現(xiàn)了HEVC的優(yōu)勢。

分辨率

H.264/AVC

H.265/HEVC

480p

1.5 Mbps

0.75 Mbps

720p

3 Mbps

1.5 Mbps

1080p

6 Mbps

3 Mbps

4k

32 Mbps

15 Mbps

我們在使用MediaCodec HEVC硬編碼時,需要判斷一下當(dāng)前是否支持HEVC編碼,Android 5.0已經(jīng)支持了HEVC,不過一些低端芯片可能還是沒有支持HEVC,我們在編碼之前需要判斷一下是否支持。

使用HEVC編碼,可以保證在不增加文件大小的情況下,大大提升視頻的清晰度。

上圖是H.264編碼,下圖是HEVC編碼。

圖片

圖片

五、色彩調(diào)優(yōu)

上面的幾種優(yōu)化方式都是在編碼層面調(diào)整參數(shù)或者直接改變編碼方式來提升視頻的畫質(zhì),但有一種方式通過調(diào)整視頻畫面的色值——綜合調(diào)整亮度、對比度、色溫、飽和度、銳度等顏色參數(shù),進而優(yōu)化整體的視頻畫面,讓視頻畫面看上去“更清晰”。

圖片

我們經(jīng)常用到的顏色空間有RGB顏色空間、HSV顏色空間、YUV顏色空間還有CIELab顏色空間,其中RGB顏色空間使用的比較廣泛。如上圖,圖像分為三個通道量:R分量、G分量、B分量,每個分量的值是0 ~ 255,三個分量共同組成一個顏色的RGB值。RGB分量的值分布構(gòu)成了顏色色值的直方圖,我們通過調(diào)節(jié)RGB值來調(diào)節(jié)圖像的顏色。

圖片

有幾種對顏色色值的調(diào)節(jié)方式,對我們理解顏色調(diào)節(jié)有很大的幫助:

  • 亮度:亮度表示人眼對發(fā)光體或被照射物體表面的發(fā)光或反射光強度實際感受的物理量,簡而言之,RGB分量越大,圖像就越亮;反之,圖像越暗。
  • 對比度:圖像對比度是指圖像中從黑色到白色漸變的層次反差或比值。反差越大,比值越大,從視覺上感知,圖像就越清晰醒目,對比度越大;反差越小,比值越小,從視覺上感知,圖像越不清晰醒目,蒙塵感越強,對比度越小。
  • 色溫:色溫和溫度還真有一定的關(guān)系,表示絕對黑體從絕對零度開始加熱之后呈現(xiàn)的顏色。從我們生活中來看,暖色調(diào)看上去比較溫馨,冷色調(diào)感受上有點清涼。
  • 飽和度:飽和度是指色彩的鮮艷程度或者純度。飽和度越高,圖像色彩越鮮艷,色彩純度越高;反之則越低,直至灰度圖。
  • 銳度:銳度主要用來表示圖像邊緣的對比度,由于人類感官,高銳度的圖像看起來更加清晰,圖像上的細節(jié)對比非常明顯。

我們可以將上面五種調(diào)節(jié)方式綜合起來調(diào)節(jié)圖片色彩。

  • 亮度增加10個點(-100 ~ 100)
  • 色溫增加5個點(-100 ~ 100)
  • 飽和度增加20個點(0 ~ 100)
  • 銳度增加15個點(0 ~ 100)

第一張是原圖,第二張是經(jīng)過顏色調(diào)節(jié)之后輸出的圖片。

圖片

圖片

六、超分算法

上面提到的優(yōu)化方式無論從編碼層面,還是從顏色調(diào)節(jié)層面,都算是基本的優(yōu)化方式,近年來,隨著機器學(xué)習(xí)的火熱,超分算法越來越廣泛地應(yīng)用到圖像和視頻處理上來。超分辨率就是指通過機器學(xué)習(xí)地方式重建圖像,達成提升圖像分辨率的效果。

目前比較成熟的超分技術(shù)是Real-ESRGAN,基于BasicSR,采用ESRGAN算法,利用機器學(xué)習(xí)的優(yōu)勢對圖片和視頻進行去模糊、Resize、降噪、銳化等處理,重建圖片,實現(xiàn)對圖片的超分辨率處理。

E-SR-GAN算法的三個步驟:

  • 特征提?。河嬎阍朦c
  • 非線性映射:放大,模糊化噪點
  • 圖像重建:差分,平滑過度,去噪

圖片

相對之前的SRCNN等超分算法,改進了如下幾點:

  • 改進感知損失,提高輸出圖像的邊緣清晰度和紋理真實性。
  • 利用對抗網(wǎng)絡(luò)的優(yōu)勢不斷反饋改進GAN判別器,預(yù)測高分辨率圖像和原始圖像之前的相對真實性而不是絕對真實性??梢曰謴?fù)原始圖像的真實的紋理細節(jié)。
  • 優(yōu)化了模型的穩(wěn)定性,每次生成的圖片都和原圖片殘差對比,進行矯正訓(xùn)練,最終得到的結(jié)果非常穩(wěn)定。

圖片

下面是超分前后的對比結(jié)果:大家可以點擊大圖對比一下細節(jié),可以看出超分之后的圖片精細化很多,去掉模糊的地方、降低圖片的噪點。

圖片

圖片

圖片

圖片

七、總結(jié)

本文結(jié)合當(dāng)下視頻的痛點(清晰度問題),提出衡量視頻清晰度的標(biāo)準(zhǔn)——主觀標(biāo)準(zhǔn)和客觀標(biāo)準(zhǔn),指明了視頻清晰度的優(yōu)化目標(biāo)和方向,根據(jù)視頻的基本特征(碼率、GOP、編碼模式等)提出基礎(chǔ)優(yōu)化的方法,在基礎(chǔ)優(yōu)化的基礎(chǔ)上提出高級編碼方式(相對H.264編碼方式),再結(jié)合目前主流的視頻色彩濾鏡提出視頻色彩調(diào)優(yōu)方案,讓視頻看上去更清晰。最終的大殺器——超分算法采用E-SR-GAN方式進行放大、降噪、重建幀來提升視頻清晰度。希望上面這些方法可以給大家?guī)硪恍椭瑢μ嵘曨l清晰度有更進一步的思考。

圖片

參考文章:

VMAF開源項目 https://github.com/Netflix/vmaf

揭秘 VMAF 視頻質(zhì)量評測標(biāo)準(zhǔn)https://xie.infoq.cn/article/26aaf2ab83f56192a65ba22ea

Netflix VMAF 視頻質(zhì)量評估工具概述https://zhuanlan.zhihu.com/p/94223056

B幀對視頻清晰度/碼率的影響https://blog.csdn.net/matrix_laboratory/article/details/82726897

H264 vs H265https://www.cnblogs.com/wujianming-110117/p/12640533.html

超分開源項目https://github.com/xinntao/Real-ESRGAN

責(zé)任編輯:武曉燕 來源: 得物技術(shù)
相關(guān)推薦

2020-08-24 07:12:17

前端CRP性能優(yōu)化

2021-11-24 22:47:07

Docker開發(fā)容器

2023-02-07 06:42:24

Pulsar負載均衡

2021-01-28 22:31:33

分組密碼算法

2023-09-22 17:36:37

2020-05-22 08:16:07

PONGPONXG-PON

2018-06-07 13:17:12

契約測試單元測試API測試

2021-08-04 09:32:05

Typescript 技巧Partial

2022-08-08 08:25:21

Javajar 文件

2022-11-01 08:46:20

責(zé)任鏈模式對象

2018-11-29 09:13:47

CPU中斷控制器

2019-02-13 14:15:59

Linux版本Fedora

2021-01-29 08:32:21

數(shù)據(jù)結(jié)構(gòu)數(shù)組

2021-02-06 08:34:49

函數(shù)memoize文檔

2023-05-15 08:38:58

模板方法模式

2020-10-15 06:56:51

MySQL排序

2023-07-06 13:56:14

微軟Skype

2020-09-08 06:54:29

Java Gradle語言

2022-03-08 16:10:38

Redis事務(wù)機制

2022-03-29 09:56:21

游戲版本運營
點贊
收藏

51CTO技術(shù)棧公眾號