實時音視頻質量評估方案_u011608531的專欄-CSDN博客_pesq...
原文見:在路上的博客
全文參考:
恭喜自己,因為做該方案,完成了自己的第一次知名開源項目的pull request。
![]()
1、背景
視頻電話功能,涉及實時音視頻的質量評估。
音視頻傳輸流程如下:

如圖所示,影響音視頻質量的因素有:
- 源視頻的采集質量(硬件決定);
- 音視頻SDK的服務質量(SDK服務商決定);
- 網絡情況;
實時傳輸視頻質量專項有(不同網絡環境下):
- 性能、碼率、抗性、時延、音畫同步(由SDK服務保障並提供技術指標)
- 卡頓(流暢度):手機終端測試
- 視頻質量(人工):通過開源算法進行評估

2、音視頻質量評估方案
2.1 視頻評估方案
視頻質量評估致力於評估視頻的人眼感知質量,總的來說有兩種評估方式:
- 主觀質量評估:依賴人眼觀看並打分,這種得到的分數比較精確,但是很耗時間,而且不方便大規模部署。
- 客觀質量評估:主要是計算損傷視頻的質量分數。評價一個算法的好壞就是衡量主觀分數和客觀分數的相關系數,一般來說系數越高越好。
客觀質量評估算法大概分三類,主要取決於是否使用無損的源視頻作為參考。
- 全參考:比如PSNR就是典型的全參考算法,通過與源視頻進行各種層面比對,來衡量損傷視頻的質量。
- 無參考:有的算法不使用源視頻,只使用接收端的視頻,來衡量它自己本身的質量。
- 部分參考: 比如從源視頻中提取一個特征向量,特征向量隨着損傷視頻一塊發送到用戶端用來計算質量。視頻會議這種場景要做全參考本來是不現實的,因為不可能把本地無損的源視頻送到用戶端或者其他地方計算質量,我們這次所做的工作就是把會議這種典型的實時場景轉化成一個可以使用全參考算法離線優化的場景。
不同視頻算法在視頻數據庫上的表現:

通過調研發現,視頻質量評估開源算法,暫時以netflix的VMAF的為准,后期會增加騰訊開源的DVQA評估(DVQA的模型以PGC視頻的,不適用與UGC的用戶場景)。
DVQA開源版當前適用場景:

(1)netflix VMAF
- 官方介紹 / 源碼地址
- VMAF官方安裝指南 / mac安裝指南
- 原理:Video Multimethod Assessment Fusion,簡稱 VMAF,通過結合多種基本質量指標來預測主觀質量。其基本原理是,每個基本度量在源內容特征、工件類型和扭曲程度方面都可能有自己的優點和缺點。通過使用機器學習算法將基本度量“融合”成最終的度量標准ーー在我們的例子中是一個支持向量機回歸子ーー它為每個基本度量標准賦予權重,最終的度量標准可以保留每個度量標准的所有優點,並提供一個更准確的最終得分。s
- 開發技術說明:VDK 內核中的特征提取(包括初等度量計算)是計算密集型的,為了提高效率,采用 c 語言編寫。控制代碼是用 Python 編寫的,用於快速原型化。
- 參考的基本指標:
- 視覺信息逼真度(VIF):VIF 是一種被廣泛采用的圖像質量度量方法,它的前提是圖像質量與信息保真度損失的度量相輔相成。在其原始形式,VIF 分數是衡量為一個失去保真度結合四個尺度。在 VMAF 中,我們采用了一個修正版的 VIF,其中每個尺度的保真度損失是作為一個基本的度量。
- 詳細損失度量(DLM):DLM 是一種圖像質量度量方法,它的基本原理是分別測量影響內容可見性的細節損失,以及分散觀眾注意力的冗余損失。最初的度量結合了 DLM 和加性損害測量(AIM) ,以產生最終的得分。在 VMAF 中,我們只采用 DLM 作為一個基本的度量。特別注意特殊情況,如黑框,其中數值計算的原始公式打破。
- Motion:測量相鄰幀之間時間差的簡單方法。這是通過計算亮度分量的平均絕對像素差來實現的。
- 使用:
PYTHONPATH=python ./python/vmaf/script/run_vmaf.py \
yuv420p 576 324 \
python/test/resource/yuv/src01_hrc00_576x324.yuv \
python/test/resource/yuv/src01_hrc01_576x324.yuv \
--out-fmt json
- 結果解析:
"aggregate": {
"VMAF_feature_adm2_score": 0.93458780776205741,
"VMAF_feature_motion2_score": 3.8953518541666665,
"VMAF_feature_vif_scale0_score": 0.36342081156994926,
"VMAF_feature_vif_scale1_score": 0.76664738784617292,
"VMAF_feature_vif_scale2_score": 0.86285338927816291,
"VMAF_feature_vif_scale3_score": 0.91597186913930484,
"VMAF_score": 76.699271371151269,
"method": "mean"
}
- VMAF_score得分是最終得分,得分范圍0(最差) to 1(最好)
- adm2, vif_scalex 得分范圍 0 (最差) to 1 (最好)
- motion2 得分范圍 0 (靜止的) to 20 (高速運動的)
2.2 音頻評估方案
音頻質量評估算法較多,從穩定性和評估緯度考慮,選擇PESQ和STOI進行音頻評估。
音頻質量評估相關介紹及代碼見:https://testerhome.com/topics/25054
(1) PESQ
- git:https://github.com/vBaiCai/python-pesq
- 功能:通過輸入原始文件和待評估文件,輸出PESQ得分,得分范圍在-0.5–4.5之間,得分越高表示語音質量越好。
- 說明:PESQ算法需要帶噪的衰減信號和一個原始的參考信號。開始時將兩個待比較的語音信號經過電平調整、輸入濾波器濾波、時間對准和補償、聽覺變換之后, 分別提取兩路信號的參數, 綜合其時頻特性, 得到PESQ分數, 最終將這個分數映射到主觀平均意見分(MOS)。PESQ得分范圍在-0.5–4.5之間。得分越高表示語音質量越好。
(2) 可短時客觀可懂(STOI)
0-1范圍,值越大,可懂度越高。
STOI:可短時客觀可懂,是用來評估在時域上經過掩蔽或經過短時傅里葉變換且頻域上加權的帶噪語音的可懂性。計算 STOI 時,用時間對其的純凈與混合語音信號來計算每個音頻通道 kk K ( =1, , ) 與 400ms 短時分段 mm M ( =1, , ) 的中間值 d km ( , ) 。首先,對純凈和帶噪語音信號進行短時傅里葉變換,得到第 j個頻段第 n個時間偵的短時能量譜 ( ) 2 X jn, 和 ( ) 2 Y jn, 。 將 j 個跨越 1/3 倍頻帶間隔的 ( ) 2 X jn, 和 ( ) 2 Y jn, 相加得到第 k 個音頻通道的能量譜 ( ) 2 X kn, 和 ( ) 2 Y kn, 。帶噪語音能量譜 ( ) 2 Y kn, 被限制為信號失真比不能低於−15dB。中間值 d km ( , ) 是 ( ) 2 X km, 和 第 k 通道 m 分段的帶噪語音能量譜 ( ) ( ) 2 Y kn n N , 1, , = 的相關指數。STOI 評分 d 是帶噪語音每個頻帶可懂性的平均值,表達式如下: ( ) , 1 , k m d d km KM = ∑ STOI 通過對純凈語音和待評價的語音進行比較從而得到評分,取值范圍為 0-1。取值越高語音質量越好。
STOI 通過對純凈語音和待評價的語音進行比較從而得到評分,取值范圍為 0-1。取值越高語音質量 越好。
git:https://github.com/mpariente/pystoi
2.3 流暢度評估
(1)幀耗時和卡頓率
- (來源:騰訊)流暢度一般以卡頓率來反映,卡頓的信息主要包含卡頓次數與卡頓時間;直播場景業界通常的卡頓定義是幀渲染間隔大於1s則為卡頓發生;但通過主觀實驗,一般這個值達到200ms,觀眾即可感受到卡頓;
- 卡頓率 = sum (>200ms卡頓時間) / 通話時間;
- 流媒體場景下的卡頓定義會采用不同的方法。
- 流暢度評估原理(安卓):通過獲取gfxinfo中的幀信息,統計幀耗時和卡頓率。

(2)FPS
對比推流和拉流的FPS,定義拉流的不同FPS階段,來定義流暢程度。
2.4 網絡模擬工具
參考:https://juejin.im/entry/6844903432961146887
可通過模擬不同的網絡環境,一方面驗證SDK承諾的各項性能指標是否合格,另一方面驗證弱網環境下的音視頻質量。
(1)QNET弱網測試工具
只需要在設備上安裝APP,並用QQ登陸即可。弱網模擬環境穩定、安裝簡單。


(2)network emulator
弱網測試工具:network emulator ,微軟開源,可實現帶寬、丟包、延時、抖動、綜合網絡等弱網參數的限制。
弱網測試常用參數:

(3)facebook ATC
安裝及使用參考:https://testerhome.com/topics/15562

2.5 好用的測試框架
- scikit-image 這個主要是對視頻,圖片的一些算法, 比如PSNR, SSIM等
- QoSTestFramework 還有一個測試框架,這個也集成了VMAF.
3、參考資料
UGC質量評估:評估對象為短視頻、直播、實時視頻通話等。
3.1 SDK性能指標
(1)音視頻SDK性能指標
騰訊數據來源:https://cloud.tencent.com/document/product/454/9867
推流狀態數據:

獲取播放的狀態數據:

3.2 視頻質量標准及算法
視頻質量客觀評估就是量化一段視頻通過視頻傳輸/處理系統時畫面質量變化(通常是下降)程度的方法。
(1)視頻評估算法對比

指標解析:
- PLCC:Pearson線性相關系數,代表模型的線性相關性。
- SROCC:Spearman秩序相關系數,用來衡量秩序的相關性的,代表模型的非線性相關性。
假設有兩組序列X和Y,其秩序為R(X)和R(Y),則SROCC(X, Y) = PLCC(R(X), R(Y))。
(2)騰訊會議開源的DVQA
針對騰訊會議場景所開發的基於深度學習的實時視頻全參考質量評估算法。
騰訊會議使用深度學習設計了一個新的網格,來自動學習視頻質量的相關特征,然后在PGC數據集上訓練得到一個通用的網格。
- 特點:
- 足夠的准確度和區分度來衡量編解碼器性能;
- PSNR、SSIM、MS-SSIM、VMAF,基於圖像質量評估;
- 使用深度學習來自動學習質量相關特征;
- 使用遷移學習來拓展已有模型到新的場景;
- git地址:https://github.com/Tencent/DVQA
- 騰訊會議 在線視頻質量打分平台:來收集視頻的主觀數據: mos.medialab.qq.com
騰訊視頻也開發了端到端自動的質量評測系統,這是整體的框架圖。其實它的策略相對來說沒那么復雜,就是在發送端播放源視頻,經過可控的損傷網絡之后,另一邊是接收端,在接收端捕獲會議呈現的畫面,把這個畫面拿出來再結合發送端的源視頻去計算它的質量分數。前面提到的性能、碼率這些絕對的指標都可以得到,抗性更多取決於什么樣的網絡情況下體驗特別糟糕,時延、卡頓、音畫同步、包括幀率都可以通過比對這兩個視頻得到結果。
(3)netflix VMAF
- 官方介紹
- git:https://github.com/Netflix/vmaf
- VMAF安裝指南 、mac安裝指南
- 原理:Video Multimethod Assessment Fusion,簡稱 VMAF,通過結合多種基本質量指標來預測主觀質量。其基本原理是,每個基本度量在源內容特征、工件類型和扭曲程度方面都可能有自己的優點和缺點。通過使用機器學習算法將基本度量“融合”成最終的度量標准ーー在我們的例子中是一個支持向量機回歸子ーー它為每個基本度量標准賦予權重,最終的度量標准可以保留每個度量標准的所有優點,並提供一個更准確的最終得分。
- 開發技術說明:VDK 內核中的特征提取(包括初等度量計算)是計算密集型的,為了提高效率,采用 c 語言編寫。控制代碼是用 Python 編寫的,用於快速原型化。
-
參考的基本指標:
- 視覺信息逼真度(VIF):VIF 是一種被廣泛采用的圖像質量度量方法,它的前提是圖像質量與信息保真度損失的度量相輔相成。在其原始形式,VIF 分數是衡量為一個失去保真度結合四個尺度。在 VMAF 中,我們采用了一個修正版的 VIF,其中每個尺度的保真度損失是作為一個基本的度量。
- 詳細損失度量(DLM):DLM 是一種圖像質量度量方法,它的基本原理是分別測量影響內容可見性的細節損失,以及分散觀眾注意力的冗余損失。最初的度量結合了 DLM 和加性損害測量(AIM) ,以產生最終的得分。在 VMAF 中,我們只采用 DLM 作為一個基本的度量。特別注意特殊情況,如黑框,其中數值計算的原始公式打破。
- Motion:測量相鄰幀之間時間差的簡單方法。這是通過計算亮度分量的平均絕對像素差來實現的。
-
vmaf基本用法
- 單模式運行:run_vmaf.py
- 命令格式
PYTHONPATH=python ./python/vmaf/script/run_vmaf.py format width height reference_path distorted_path [--out-fmt output_format]
- 命令解析:
format可以是:
(1)uv420p, yuv422p, yuv444p (8-Bit YUV)
(2)yuv420p10le, yuv422p10le, yuv444p10le (10-Bit little-endian YUV)
width height是視頻的寬高度,以像素為單位。
output_format可以是:text/xml/json
- 舉例:
# 舉例
PYTHONPATH=python ./python/vmaf/script/run_vmaf.py \
yuv420p 576 324 \
python/test/resource/yuv/src01_hrc00_576x324.yuv \
python/test/resource/yuv/src01_hrc01_576x324.yuv \
--out-fmt json
- 結果解析
# 這將生成如下 JSON 輸出:
"aggregate": {
"VMAF_feature_adm2_score": 0.93458780776205741,
"VMAF_feature_motion2_score": 3.8953518541666665,
"VMAF_feature_vif_scale0_score": 0.36342081156994926,
"VMAF_feature_vif_scale1_score": 0.76664738784617292,
"VMAF_feature_vif_scale2_score": 0.86285338927816291,
"VMAF_feature_vif_scale3_score": 0.91597186913930484,
"VMAF_score": 76.699271371151269,
"method": "mean"
}
-
其中VMAF_score得分是最終得分,其他是VMAF的基本指標得分。
- adm2, vif_scalex 得分范圍 0 (最差) to 1 (最好)
- motion2 得分范圍 0 (靜止的) to 20 (高速運動的)
-
批處理模式運行: run_vmaf_in_batch.py
- 命令行工具:ffmpeg2vmaf,提供了將壓縮視頻流作為輸入的能力。
3.3 音頻質量標准
PESQ和PQLQA都是業界公認的語音音質評估算法;
(1)音頻評估緯度
A. 絕對等級評分(MOS)

一般MOS應為4或者更高,這可以被認為是比較好的語音質量,若MOS低於3.6,則表示大部分被測不太滿意這個語音質量。
MOS測試一般要求:
- 足夠多樣化的樣本(即試聽者和句子數量)以確保結果在統計上的顯著;
- 控制每個試聽者的實驗環境和設備保持一致;
- 每個試聽者遵循同樣的評估標准。
B. 失真等級評分(Degradation Category Rating, DCR)
C. 相對等級評分(Comparative Category Rating, CCR)
(2)音頻評估算法
A. python-pesq(PESQ)
- git:https://github.com/vBaiCai/python-pesq
- 功能:通過輸入原始文件和待評估文件,輸出PESQ得分,得分范圍在-0.5–4.5之間,得分越高表示語音質量越好。
- 說明:PESQ算法需要帶噪的衰減信號和一個原始的參考信號。開始時將兩個待比較的語音信號經過電平調整、輸入濾波器濾波、時間對准和補償、聽覺變換之后, 分別提取兩路信號的參數, 綜合其時頻特性, 得到PESQ分數, 最終將這個分數映射到主觀平均意見分(MOS)。PESQ得分范圍在-0.5–4.5之間。得分越高表示語音質量越好。
B. 分段信噪比(SegSNR)
由於語音信號是一種緩慢變化的短時平穩信號,因而在不同時間段上的信噪比也應不一樣。為了改善信噪比的問題,可以采用分段信噪比。
C. 對數似然比測度(LLR)
坂倉距離測度是通過語音信號的線性預測分析來實現的。ISD基於兩組線性預測參數(分別從原純凈語音和處理過的語音的同步幀得到)之間的差異。LLR可以看成一種坂倉距離(Itakura Distance,IS),但IS距離需要考慮模型增益。而LLR不考慮模型增益引起的幅度位移,更重視整體譜包絡的相似度。
D. 對數譜距離(LSD)
E. 可短時客觀可懂(STOI)
0-1范圍,值越大,可懂度越高。
F. 加權譜傾斜測度(WSS)
WSS值越小說明扭曲越少,越小越好,范圍
G. 感知客觀語音質量評估(POLQA)
POLQA,是一種全參考(FR)算法,可對與原始信號相關的降級或處理過的語音信號進行評級。它將參考信號(講話者側)的每個樣本與劣化信號(收聽者側)的每個相應樣本進行比較。兩個信號之間的感知差異被評為差異。
PQLQA的音質評估涵蓋了可懂度、卡頓等聽感信息;因為是有參算法,所以不適合用於變聲一類的場景評估;除關心音質的評價值外,音質平穩性也會對聽感有較大影響。
3.4 音視頻處理工具FFmpeg
(1)統計碼率
ffmpeg -i /Users/lizhen/Downloads/mask.mp4 -hide_banner
輸出:
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.62)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/lizhen/Downloads/mask.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.41.100
Duration: 00:06:19.39, start: 0.000000, bitrate: 142 kb/s(碼率)
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 113 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 24 kb/s (default)
Metadata:
handler_name : SoundHandler
ffprobe -print_format json -show_streams https://madialab-storage-1256380422.cos.ap-guangzhou.myqcloud.com/test/SHARPROUND1ST/SRC0002_720x1280_30_0.mp4
輸出:
1. ffprobe version 4.3.1 Copyright (c) 2007-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.62)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
{
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/lizhen/Downloads/mask.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.41.100
Duration: 00:06:19.39, start: 0.000000, bitrate: 142 kb/s(碼率)
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 113 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 24 kb/s (default)
Metadata:
handler_name : SoundHandler
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"profile": "High",
"codec_type": "video",
"codec_time_base": "1/50",
"codec_tag_string": "avc1",
"codec_tag": "0x31637661",
"width": 640,
"height": 360,
"coded_width": 640,
"coded_height": 368,
"closed_captions": 0,
"has_b_frames": 2,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "16:9",
"pix_fmt": "yuv420p",
"level": 30,
"chroma_location": "left",
"refs": 1,
"is_avc": "true",
"nal_length_size": "4",
"r_frame_rate": "25/1",
"avg_frame_rate": "25/1",
"time_base": "1/12800",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 4855808,
"duration": "379.360000",
"bit_rate": "113664",
"bits_per_raw_sample": "8",
"nb_frames": "9484",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0
},
"tags": {
"language": "und",
"handler_name": "VideoHandler"
}
},
{
"index": 1,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "HE-AAC",
"codec_type": "audio",
"codec_time_base": "1/44100",
"codec_tag_string": "mp4a",
"codec_tag": "0x6134706d",
"sample_fmt": "fltp",
"sample_rate": "44100",
"channels": 2,
"channel_layout": "stereo",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/44100",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 16726028,
"duration": "379.275011",
"bit_rate": "24001",
"max_bit_rate": "24001",
"nb_frames": "8170",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0
},
"tags": {
"language": "und",
"handler_name": "SoundHandler"
}
}
]
}
4、名詞解釋
(1)視頻
- 幀率:幀率對視頻質量的影響遠遠大於分辨率和QP。
- 分辨率:就是幀大小每一幀就是一副圖像。640*480分辨率的視頻,建議視頻的碼率設置在700以上,音頻采樣率44100就行了。一個音頻編碼率為128Kbps,視頻編碼率為800Kbps的文件,其總編碼率為928Kbps,意思是經過編碼后的數據每秒鍾需要用928K比特來表示。
-
QP:量化參數,反映了空間細節壓縮情況。值越小,量化越精細,圖像質量越高,產生的碼流也越長。
-
性能:
- 碼率:數據傳輸時單位時間傳送的數據位數,一般我們用的單位是kbps即千位每秒。 通俗一點的理解就是取樣率,單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件。
- 抗性:
- 時延:是網絡傳輸中的一個重要指標,測量了數據從一個端點到另外一個端點所需的時間。一般我們用毫秒作為其單位。通常我們也把延遲叫做延時,但是延時有時還會表示數據包發送端到接受端的往返時間。這個往返時間我們可以通過網絡監控工具測量,測量數據包的發送時間點和接受到確認的時間點,兩者之差就是延時。單向時間就是延遲。
- 抖動:由於數據包的大小,網絡路由的路徑選擇等眾多因素,我們無法保證數據包的延遲時間是一致的,數據包和數據包延遲的差異我們稱為抖動。也就是說因為數據包的延時值忽大忽小的現象我們稱為是抖動。
- 卡頓:
- 音畫同步:
- YUV視頻格式(Android中常用的YUV420格式):一般的視頻采集芯片輸出的碼流一般都是 YUV 格式數據流,后續視頻處理也是對 YUV 數據流進行編碼和解析。
- YUV444:4個像素里的數據有4個Y、4個U、4個V,未丟棄任何數據。
- YUV422:4個像素里的數據有4個Y、2個U、2個V。采集方式為 奇數像素丟棄V,偶數像素丟棄U。
- YUV420:為橫向、縱向同時丟棄數據的采樣方式。
- 采樣方式:偶數像素丟棄UV,在此基礎上,奇數行進一步丟棄V,偶數行進一步丟棄U。
- 播放YUV:ffplay -video_size 1080x2220 mini_yuvj420p_1080_2220.yuv
- mp4轉YUV:ffmpeg -i mp4_file yuv_file
- mp4修改分辨率:ffmpeg -i clean_mp4 -vf scale=1080:1024 denoised_mp4 -hide_banner
- VMAF比較兩個視頻: python run_vmaf.py yuv420p 1080 2220 demo.yuv demo.yuv –out-fmt json
(2)音頻參數(參考資料 )
-
采樣頻率(Sample Rate):也稱采樣率, 是指錄音設備在單位時間內對聲音信號的采樣數或樣本數, 單位為Hz(赫茲), 采樣頻率越高能表現的頻率范圍就越大。
一些常用音頻采樣率如下: 8kHz - 電話所用采樣率 22.05kHz - 無線電廣播所用采樣率 44.1kHz - 音頻CD, 也常用於 MPEG-1 音頻(VCD, SVCD, MP3)所用采樣率 48kHz - miniDV、數字電視、DVD、DAT、電影和專業音頻所用的數字聲音所用采樣率
-
采樣位數(Bit Depth, Sample Format, Sample Size, Sample Width), 也稱位深度, 是指采集卡在采集和播放聲音文件時所使用數字聲音信號的二進制位數, 或者說是每個采樣樣本所包含的位數, 通常有8 bit、16 bit。
- 聲道數(Channel), 是指采集卡在采集時使用聲道數, 分為單聲道(Mono)和雙聲道/立體聲(Stereo)
- 比特率(Bit Rate), 也稱位率, 指每秒傳送的比特(bit)數, 單位為bps(Bit Per Second), 比特率越高, 傳送數據速度越快. 聲音中的比特率是指將模擬聲音信號轉換成數字聲音信號后, 單位時間內的二進制數據量。
其計算公式為: 比特率 = 采樣頻率 * 采樣位數 * 聲道數
來源: 在路上
文章作者: 在路上
文章鏈接: https://www.ontheway.cool/posts/6086.html#rewardModal
本文章著作權歸作者所有,任何形式的轉載都請注明出處。