日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

easyVMAF:在自然环境下运行VMAF

發(fā)布時(shí)間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 easyVMAF:在自然环境下运行VMAF 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正文字?jǐn)?shù):3970? 閱讀時(shí)長(zhǎng):6分鐘

VMAF是最受歡迎的視頻質(zhì)量評(píng)估工具之一,它正在成為視頻行業(yè)的標(biāo)準(zhǔn)參考度量標(biāo)準(zhǔn)。但是,運(yùn)行VMAF在某些情況下可能會(huì)比較棘手,并導(dǎo)致錯(cuò)誤的結(jié)果。在本文中,客座作者Gabriel Davila Revelo向我們介紹了一個(gè)工具(easyVMAF),他開(kāi)發(fā)的這個(gè)工具使得VMAF計(jì)算變得更加簡(jiǎn)單和直觀。


作者 /?Gabriel Dávila Revelo

原文鏈接 / https://ottverse.com/vmaf-easyvmaf/

VMAF是一個(gè)完整的參考指標(biāo),用于比較參考(或源)和失真的視頻序列來(lái)預(yù)測(cè)主觀視頻質(zhì)量。

VMAF的優(yōu)勢(shì)在于它試圖模仿觀看者的感知(或人類視覺(jué)系統(tǒng)),而不是純粹的客觀指標(biāo)(例如PSNR或SSIM)。有關(guān)VMAF的詳細(xì)說(shuō)明,請(qǐng)閱讀Netflix官方博客。

在開(kāi)源社區(qū)的參與下,VMAF上已經(jīng)構(gòu)建了一些第三方工具。因此,可以通過(guò)幾個(gè)開(kāi)源軟件包(例如,VMAF python庫(kù),VMAFossexec(C可執(zhí)行文件),VMAF docker映像,libvmaf(C庫(kù))以及通過(guò)libvmaf編譯的FFmpeg)來(lái)獲得VMAF。

注意:您可以在OTTVerse.com上找到FFmpeg,VMAF的安裝過(guò)程以及用法。

盡管可以使用多種工具來(lái)計(jì)算VMAF,但要遵守VMAF工具所施加的嚴(yán)格要求,通常是具有挑戰(zhàn)性的。其中一些要求如下:

  • 參考視頻和失真視頻需要進(jìn)行幀同步。掃描模式(隔行/逐行)必須匹配;他們必須有相同的持續(xù)時(shí)間;它們必須具有相同的幀速率。

  • 參考視頻和失真視頻的分辨率必須匹配,這通常需要強(qiáng)大的上/下縮放程序。

因此,實(shí)際上,如果參考視頻和失真視頻不滿足上述要求,則必須對(duì)視頻進(jìn)行規(guī)范化/均衡處理。

在本教程中,我們將使用基于FFmpeg的示例介紹一系列建議,以向您展示如何使用VMAF標(biāo)準(zhǔn)化流。

最后,我們介紹了easyVMAF,這是一個(gè)開(kāi)源工具,可以自動(dòng)執(zhí)行您的VMAF計(jì)算。

在接下來(lái)的幾節(jié)中,我們將逐步處理(i)視頻縮放的基礎(chǔ),(ii)幀同步,(iii)最后;我們講談?wù)揺asyVMAF。

為了保持文章的長(zhǎng)度合理,我們只展示一些基本的例子。要獲得完整的用例,請(qǐng)?jiān)L問(wèn):https://github.com/gdavila/easyVMAF

閑話少說(shuō),讓我們開(kāi)始吧!

從縮放視頻的分辨率到右邊的VMAF模型

現(xiàn)如今可用的VMAF實(shí)現(xiàn)支持三種模型:HD,4K和Phone。

每種模型均由Netflix的團(tuán)隊(duì)進(jìn)行了訓(xùn)練,考慮了不同的情況,例如屏幕尺寸大小,分辨率和觀眾與顯示設(shè)備的距離。

因此,VMAF規(guī)范要求視頻分辨率必須與每種模式預(yù)期的視頻分辨率相匹配(請(qǐng)參閱此處的第一個(gè)常見(jiàn)問(wèn)題解答):

  • HD和Phone型號(hào)需要1920x1080視頻作為輸入

  • 4K型號(hào)需要3840x2160作為輸入

在FFmpeg尺度濾波器中,利用雙三次插值可以解決源視頻與目標(biāo)視頻分辨率不匹配的問(wèn)題。

例如,要使用HD模型(VMAF_v0.6.1.pkl),我們需要通過(guò)使用以下FFmpeg命令來(lái)縮放失真的視頻(如果不是1920x1080)。

ffmpeg -i <distorted> -i <reference> -lavfi "[0:v]scale=1920:1080:flags=bicubic[distorted];[distorted][1:v]libvmaf=model_path=/usr/local/share/model/VMAF_v0.6.1.pkl" -f null -

同樣,要使用4K模型,我們需要將失真的視頻縮放到3840x2160。

ffmpeg -i <distorted> -i <reference> -lavfi "[0:v]scale=3840:2160:flags=bicubic[distorted];[distorted][1:v]libvmaf=model_path=/usr/local/share/model/VMAF_4k_v0.6.1.pkl" -f null -

上面的例子考慮到了參考視頻已經(jīng)匹配了VMAF模型所期望的分辨率。

如果不是這樣,你也可以應(yīng)用相同的scalefilter的參考:

ffmpeg -i <distorted> -i <reference> -lavfi "[0:v]scale=3840:2160:flags=bicubic[distorted];[1:v]scale=3840:2160:flags=bicubic[reference];[distorted][reference]libvmaf=model_path=/usr/local/share/model/VMAF_4k_v0.6.1.pkl" -f null -

幀同步

VMAF要求參考和失真視頻之間的幀同步,因此必須保證幀速率、掃描模式和視頻持續(xù)時(shí)間匹配

下面是實(shí)現(xiàn)幀同步的方法。

掃描模式不匹配

傳統(tǒng)上將H.264 / AVC實(shí)時(shí)信號(hào)源設(shè)置為隔行掃描模式,但是一旦它通過(guò)OTT轉(zhuǎn)碼器,則輸出通常為逐行模式。因此,如果我們想要計(jì)算VMAF,我們首先需要規(guī)范化掃描模式。

鑒于VMAF模型是使用逐行掃描模式訓(xùn)練的,建議始終對(duì)隔行掃描輸入進(jìn)行隔行掃描消除。

掃描模式的規(guī)范化可以由FFmpeg通過(guò)使用yadif過(guò)濾器完成:

ffmpeg -i <distorted> -i <reference> -lavfi "[1:v]yadif=0:-1:0[ref];[0:v][ref]libvmaf=model_path=/usr/local/share/model/VMAF_v0.6.1.pkl" -f null -

上面的命令行假設(shè)參考流是隔行掃描的,因此它通過(guò)選項(xiàng)mode:parity:deint = 0:-1:0傳遞給yadif過(guò)濾器。這意味著:

  • 0:輸入中每一幀輸出一幀

  • -1:啟用對(duì)字段奇偶校驗(yàn)的自動(dòng)檢測(cè)

  • 0:對(duì)所有幀進(jìn)行去隔行處理

因此,如果在隔行掃描模式下濾波器輸入的幀率為29.97i,那么yadif濾波器在逐行掃描模式下將輸出29.97p。

這是交錯(cuò)源最典型的轉(zhuǎn)換方法,但您也可以嘗試其他選項(xiàng)。例如,yadif=1:-1:0將為相同的輸入生成59.94p的輸出。

幀速率不匹配

首先,您需要知道VMAF并不是通過(guò)訓(xùn)練來(lái)處理幀率轉(zhuǎn)換問(wèn)題,因此在這里我們將強(qiáng)制輸入以人為地使用VMAF。

因此,應(yīng)謹(jǐn)慎使用scores,而不應(yīng)將其用作完全可靠的數(shù)值。

但是,即使在計(jì)算這個(gè)有偏分?jǐn)?shù)的情況下也可能是有用的,因?yàn)閷?shí)際上在ABR階梯上進(jìn)行幀速率轉(zhuǎn)換是很常見(jiàn)的。

同樣,為了強(qiáng)制進(jìn)行幀速率轉(zhuǎn)換,我們將使用另一個(gè)FFmpeg過(guò)濾器:

ffmpeg -i <distorted> -i <reference> -lavfi "[1:v]fps=fps=30[ref];[0:v][ref]libvmaf=model_path=/usr/local/share/model/VMAF_v0.6.1.pkl" -f null -

fps過(guò)濾器允許您通過(guò)添加新幀(通過(guò)復(fù)制幀)或丟棄它們來(lái)設(shè)置幀速率,直到達(dá)到所需的值。

我們寧愿保留未修改的reference,只對(duì)失真的視頻應(yīng)用filter。

起始幀不匹配

有時(shí),參考視頻可能會(huì)從與失真序列不同的幀開(kāi)始。

“起始幀”中的這種不匹配將導(dǎo)致兩個(gè)序列之間的偏移,并導(dǎo)致錯(cuò)誤的VMAF scores。

為了正確計(jì)算VMAF分?jǐn)?shù),我們需要同步對(duì)齊參考視頻和失真視頻的前幾幀。一種方法是修剪未對(duì)齊的視頻序列,直到實(shí)現(xiàn)幀同步為止。

我們可以使用FFmpeg的修剪過(guò)濾器(filter)對(duì)視頻進(jìn)行修剪,并確保輸出將包含輸入的連續(xù)子集。

但是首先,我們需要確定在參考視頻序列和失真視頻序列中都匹配的幀子集的起點(diǎn)和持續(xù)時(shí)間。這里的挑戰(zhàn)是找到我們應(yīng)該傳遞給微調(diào)濾波器的正確起點(diǎn)。

為了解決這個(gè)問(wèn)題,我們提出了一種基于PSNR的方法,該方法迭代計(jì)算失真視頻和參考視頻之間的PSNR,直到找到匹配項(xiàng)為止。

詳細(xì)信息

1. 首先,我們提取兩個(gè)視頻樣本,由失真視頻序列和參考視頻序列的前m幀組成,并計(jì)算它們之間的峰值信噪比PSNR。這是第一次迭代的后果。我們建議您僅使用少量幀(即m)以降低計(jì)算成本。

2. 在第二次迭代中,我們重新計(jì)算了PSNR,但將失真的子樣本向前滑動(dòng)了1幀,然后再次計(jì)算了PSNR。

3. 這個(gè)重復(fù)“滑動(dòng)和計(jì)算PSNR”的過(guò)程將重復(fù)n次,其中n是SyncWindow中適合的視頻幀數(shù)。SyncWindow是一個(gè)持續(xù)時(shí)間,我們希望在這個(gè)持續(xù)時(shí)間內(nèi)找到正確的同步值。

4. 如果幸運(yùn)的話(如果正確選擇了SyncWindow),我們將在過(guò)程結(jié)束時(shí)看到最佳PSNR在第i個(gè)幀上。這意味著扭曲序列的第i幀與參考的第1幀匹配。

在此過(guò)程結(jié)束時(shí),我們有足夠的信息來(lái)應(yīng)用修剪濾鏡。

下圖顯示了先前描述的迭代。在每次迭代(i)時(shí),都會(huì)在reference_subsample和distorted_subsample_i之間計(jì)算PSNR。

實(shí)際上,每一次迭代的PSNR計(jì)算可以如下進(jìn)行-

while <distorted_subsample_i.1st_frame> IN <SYNC_WINDOW>: getPSNR(reference_subsample, distorted_subsample_i) <distorted_subsample_i>.next_frame()

可以使用FFmpeg實(shí)現(xiàn)getPSNR()函數(shù),如下所示。

ffmpeg -i <distorted> -i <reference> \ -lavfi "[0:v]trim=start=<OFFSET>:duration=<M>,setpts=PTS-STARTPTS[distorted_subsample];\ [1:v]trim=start=0:duration=<M,setpts=PTS-STARTPTS[reference_subsample];\ [distorted_subsample][reference_subsample]psnr=stats_file=psnr.log" -f null -

where

<OFFSET>: (i-1)*1/fps, and fps is the framerate per second. <M>: Size in seconds of the subsample sequence. This is a fixed value for all the iterations. <SYNC_WINDOW>: window time (seconds) in which we want to find the right sync value

舉個(gè)例子,如果我們?yōu)閒ps = 30的視頻序列選擇<SYNC_WINDOW> value = 0.3秒,我們會(huì)得到如下結(jié)果:

iteration offset(s) psnr[dB] 1 0.0 21.098356 2 0.03333333333333333 21.132783 3 0.06666666666666667 21.167991 4 0.1 21.204151 5 0.13333333333333333 21.248292 6 0.16666666666666666 21.29118 *7 0.2 33.675342 8 0.23333333333333334 21.363845 9 0.26666666666666666 21.409776 10 0.3 21.451546

根據(jù)這些值,在第7次迭代時(shí)得到最佳的PSNR。

因此,畸變序列的第7幀(距其開(kāi)始0.2秒)與參考序列的第1幀匹配。

有了這些信息,我們就可以通過(guò)調(diào)整序列來(lái)使用FFmpeg計(jì)算VMAF。

ffmpeg -i <distorted> -i <reference> -lavfi "[0:v]trim=start=<OFFSET>,setpts=PTS-STARTPTS[distorted];[distorted][reference]libvmaf=model_path=/usr/local/share/model/VMAF_v0.6.1.pkl" -f null -

在實(shí)踐中,有時(shí)我們還需要將持續(xù)時(shí)間參數(shù)傳遞給trim (trim=start=;duration=),以確保畸變序列和參考序列在秒內(nèi)具有相同的長(zhǎng)度。


VMAF使用easyVMAF將它們組合在一起

到目前為止,我們使用一些簡(jiǎn)單的示例討論了在計(jì)算VMAF之前對(duì)視頻進(jìn)行預(yù)處理的過(guò)程。

但是,在實(shí)踐中,很常見(jiàn)的是,您需要同時(shí)應(yīng)用先前描述的所有或大部分歸一化,即,放大,去隔行,更改幀速率(例如,從29.97到30fps)并同步 時(shí)間維度中的扭曲和參考幀。

整個(gè)過(guò)程無(wú)需手動(dòng)執(zhí)行,而是在easyVMAF中自動(dòng)完成,easyVMAF是一個(gè)Python腳本,可以完成VMAF所需的規(guī)范化過(guò)程。

easyVMAF使用FFmpeg和FFprobe進(jìn)行所有必要的視頻編輯和信息收集。它允許我們執(zhí)行去隔行掃描(Deinterlacing),上/下縮放,幀同步,幀速率適配。

下圖顯示了easyVMAF的高級(jí)概述。

如果您對(duì)easyVMAF感興趣,請(qǐng)?jiān)L問(wèn)GitHub repo,在那里您可以查看Docker圖像或?yàn)g覽源代碼。

請(qǐng)嘗試著在今天的視頻中嘗試一下!

如果您有任何建議,改進(jìn),或您想貢獻(xiàn),請(qǐng)隨時(shí)提交PRs。

在結(jié)束本文之前,下面是運(yùn)行Docker映像的過(guò)程以及命令行參數(shù)的說(shuō)明。謝謝!

docker run --rm gfdavila/easyVMAF -h usage: easyVMAF [-h] -d D -r R [-sw SW] [-ss SS] [-subsample N] [-reverse] [-model MODEL] [-phone] [-verbose] [-output_fmt OUTPUT_FMT] Script to easily compute VMAF using FFmpeg. It allows to deinterlace, scale, and sync Ref and Distorted video samples automatically: Autodeinterlace: If the Reference or Distorted samples are interlaced, deinterlacing is applied Autoscale: Reference and Distorted samples are scaled automatically to 1920x1080 or 3840x2160 depending on the VMAF model to use Autosync: The first frames of the distorted video are used as a reference to do sync lookup with the Reference video. The sync is doing by a frame-by-frame lookup of the best PSNR See [-reverse] for more options for syncing As output, a json file with the VMAF score is created Optional arguments: -h, --help show this help message and exit -sw SW Sync Window: window size in seconds of a subsample of the Reference video. The sync lookup will be done between the first frames of the Distorted input and this Subsample of the Reference. (default=0. No sync). -ss SS Sync Start Time. Time in seconds from the beginning of the Reference video to which the Sync Window will be applied from. (default=0). -subsample N Specifies the subsampling of frames to speed up calculation. (default=1, None). -reverse If enabled, it Changes the default Autosync behaviour: The first frames of the Reference video are used as reference to sync with the Distorted one. (Default = Disable). -model MODEL VMAF Model. Options: HD, HDneg*, 4K. (Default: HD). -phone It enables VMAF phone models (HD only). (Default=disable). -verbose Activate verbose loglevel. (Default: info). -output_fmt OUTPUT_FMT Output VMAF file format. Options: json or xml (Default: json) required arguments: -d D Distorted video -r R Reference video * NOTE: HDneg is a VMAF experimental feature not supported yet by FFmpeg.

LiveVideoStackCon 2020 SFO(線上峰會(huì))倒計(jì)時(shí)?1?天!

LiveVideoStackCon 2020?美國(guó)舊金山站

北京時(shí)間:2020年12月11日-12月13日

點(diǎn)擊【閱讀原文】訪問(wèn)直播頁(yè)面

總結(jié)

以上是生活随笔為你收集整理的easyVMAF:在自然环境下运行VMAF的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。