簡介

好的影片播放器可以達到更好的畫質、幀率和強大的擴充功能

需求

  • 效能
    • 4K60FPS不會卡
      • 雖然主要和電腦性能有關…
  • 畫質
    • HDR
    • 提高解析度
    • 提高幀率
  • 功能
    • 同時掛載多字幕
      • 雙語字幕或彈幕+字幕
    • 進度條預覽
    • 網路串流
      • Youtube
      • Bilibili
      • 巴哈姆特動畫瘋

播放器比較

在不安裝任何外掛且以預設設定的情況下測試

名稱 開源 免費 多字幕 設定 介面 網路連結 備註
PotPlayer 完整 4K只能53~55FPS,且內顯比GPU快(GPU約35FPS)
MPC-BE 完整 Youtube很卡,應該和預設的下載器有關
MPC-HC 完整 設定比MPC-BE多一些, 播放Youtube需要自行提供下載器(yt-dlp),預設沒字幕
VLC 完整 Youtube會卡,應該和預設下載器有關,只能使用內建解編碼器
SMPlayer 完整 Youtube預設沒字幕
MPV 完整 不用安裝,容量小(80MB),介面精簡,有許多擴充套件,只能修改設定檔案或用command-line引數來調整設定
ACGPlayer 有廣告(NT203移除) UX很好(滑鼠手勢、快速選擇),但不能調整進階設定
  • MPC-BE 和 MPC-HC 都是基於 Media Player Classic 修改,Potplayer似乎也是(參考資料)
  • SMPlayer的核心即為MPV
  • 因為下方會提到其他編碼器,而且沒有比較畫面顯示及調整設定,所以以上只是參考用

在客觀比較下,若沒有特殊需求,MPC-HC的初始設定較好(內建LAV Filter)

基本知識

影片格式

絕大多數影片都是以“YUV模型”的形式儲存的,又稱為“亮度-色度模型(Luma-Chroma)”,即將影片資訊分為“亮度通道(Luma / Y)”與“色度通道(Chroma / UV)”進行儲存。
常用的模型為“YCbCr”,Cb為“藍色色度”,Cr為“紅色色度”。
而我們通常見到的沒有特別標注的影片,包括市面上發行的藍光原盤(Blu-ray Disc)、DVD,以及電視錄制、個人錄影等常見片源,基本都是YUV420模型。
“YUV420”指的是對影片進行色度半取樣(Chroma Sub-Sampling)儲存。比如一個解析度為1920x1080的影片,亮度平面(Y平面)解析度為1920x1080,色度平面(UV平面)解析度僅為960x540。播放影片渲染器時會將色度平面解析度擴充套件到亮度平面解析度(轉換為YUV444),隨後轉換為RGB格式再縮放到目標播放解析度。

之所以這麼做的理由是因為人眼相對於亮度,對色度較不敏感。縮減色度解析度可以在肉眼幾乎不可見的情況下有效減少傳輸頻寬消耗,加大壓縮率。
色深(bit-depth),就是我們通常說的8bit 和10bit,是指每個通道的精度。除4K BD外,如今絕大多數影片影像均為8bit。但即便使用的是8bit螢幕,10bit的影片仍是有必要的。事實上8bit YUV 轉換後,覆蓋的精度大概相當於8bit RGB 的26%,而10bit YUV轉換後的精度大約可以覆蓋97%。

流程

播放器會經歷三個主要流程:分離、解碼、渲染

  1. 分離
  • 將封裝好的影片軌、音訊軌、字幕軌、章節等資訊進行分離,並選擇將要使用的部分傳輸給解碼器(多影片軌、多音訊軌等情況下)
  • 擔當分離工作的濾鏡稱為分離器(splitter / demuxer),這部分幾乎不消耗效能
  1. 解碼
    • 將從分離器得到的各種壓縮格式的資訊,解碼為非壓縮格式。例如影片就是RGB/YUV,音訊就是PCM,隨後傳輸給下游模組
    • 該部分將會消耗相當一部分的CPU效能,不過如今的主流效能CPU對付1080P的影片已沒有壓力,而4K影片仍需要效能較好的CPU。或者可以選擇GPU硬解,只要格式支援、正確解碼,效能消耗極低
  2. 渲染
    • 分為影片渲染與音訊渲染,即將解碼器傳輸過來的資訊渲染為人的所見所聞
    • 例如我們的螢幕顯示的是RGB畫面,那麼影片渲染器通常所做的便是將YUV轉化為RGB

再重申一個觀念,視訊檔案的播放,解碼吃的是CPU效能(硬解例外,硬解是使用顯示卡上的解碼模組,既不吃CPU也不吃GPU效能),而渲染才是吃顯示卡GPU效能,使用madVR時,GPU的效能很重要。

渲染器工作流程

渲染器從解碼器接收到資料後,播放器與GPU驅動會首先嘗試介入處理;隨後擴充套件色度平面解析度,即將影片轉換為YUV444(chroma upscaling);將YUV444資料轉換為RGB,通常用到浮點運算;播放器或渲染器將畫面縮放到目標播放解析度(播放視窗大小),運用 image upscaling / downscaling 演算法;其上均為浮點數運算,最後將運算結果轉換為RGB 8bit整數輸出,這一步通常為高精度轉低精度,需要用到抖動演算法(dithering algorithm)。

顯而易見,其中使用的演算法與運算精度決定了最終的結果。

播放器設定

前置設定

下方會使用各個外掛套件,將播放影片的過程分開設定,較容易管理,而且可以將設定套用在不同的播放器

外掛解碼方案: LAV Filters

Lav Filters為高效的解編碼器,包含分離器、音訊解編碼、視訊解編碼。讓各編碼的影片可以播放
初次設定可開啟Enable System Tray Icon,以確認是否有正常運作

使用版本: 0.76.0

參考資料

分離器(Splitter)

建議設定

  • Preferred Language:設定音軌和字幕的偏好語言
    • 也可在播放器中設定
  • Subtitle Selection Mode:字幕選擇模式
    1. No Subtitles:不載入任何字幕
    2. Only Forced Subtitles:只選擇有強制軌(forced track)的字幕
    3. Default:選擇有強制軌(forced track)或預設軌(default track)的字幕
    4. Advanced:選擇在Subtitles的欄位中填入選擇邏輯
  • Blu-ray Subtitles(PGS):藍光字幕設定
  • Demuxer Settings:分路器設定
    • Prefer Audio Decoder on Audio Stream Switch:選擇最高品質的音訊流
  • Queue Settings:緩衝設定
  • Network Settings
    • Stream Analysis Duration:分析網路串流設定的時間

音訊解碼器(Audio Decoder)

建議設定
建議設定2

Audio Settings

  • Dynamic Range Compression:動態範圍壓縮
    • 動態調整音訊輸出幅值,在音量大時壓制音量在某一範圍內,在音量小時適當提升音量
  • Bitstreaming:不解碼聲音串流,直接傳送給播放器
  • Auto A/V Sync correction:音訊與視訊輸出同步
  • Convert Output to Standard Channel Layouts:若聲道數未達標準則會自動新增靜音聲道補足

Mixing

  • Mixer:將多聲音音軌輸出為較少聲道
    • Output Speaker Configuration:指定轉換聲道數
    • Center Mix Level(中央聲道混音補償)、Surround Mix Level(環繞聲道混音補償)
      • 依照ITU(國際電信聯盟)所發表的BS.775建議書,5.1聲道 向下混音至 立體聲/雙聲道 推薦設定,將中央聲道及環繞聲道降3dB後混音至左右聲道,降 3dB 約為 電壓增益 0.71,故將Center Mix LevelSurround Mix Level設成 0.71
    • LEF Mix Level:重低音聲道混音補償
      • 在BS.775建議書中則是建議棄用LEF聲道,而且部分雙聲道系統中並不能良好的表現極低頻,會產生失真,因此LAV預設值為關閉LFE混音(0.00),LFE聲道通常表現於炸彈爆炸丶火山爆發等低頻音效,使其具有更加震撼的效果,如果揚聲器低頻響應表現良好,可以將LFE聲道增加4dB後混音至左右聲道,因為LFE聲道在播放中需要增益10dB,而混音至雙聲道則需要降6dB(電壓增益 0.5),+10dB - 6dB = +4dB。增益 4dB 約為 電壓增益 1.58,故LEF Mix Level設定成 1.58。如果揚聲器不能良好表現極低頻,LFE還是設 0.00 較妥當,若還是想要將LFE聲道混音 或 嫌混音後低頻太多,可以將LEF Mix Level設定成 介於 0.00 ~ 1.58 之間
  • Settings
    • Don't mix Stereo sources:不會把雙聲道的來源混音
    • Normalize Matrix:把不同聲道混音時使用常見的音量分佈
    • Clipping Protection:音量保護,可以使揚聲器在大動態音訊輸出時,降低破音機率。
      • 如果對於揚聲器有信心,不建議勾選 此項,因為有動態壓縮的疑慮
  • Matrix Encoding
    • 喇叭/耳機有支援就可選

視訊解碼器(Video Decoder)

建議設定

  • Settings
    • Use Stream Aspect Ratio:保持視訊串流比例
    • Setting for Interlaced Video Streams設定隔行掃描影片
      • Field Order:場序規則
      • Deinterlacing Mode:去交錯模式
        • Auto:自動
        • Agressive:當影片中發現有格行掃描的畫面時,則全部進行去交錯處理
        • Force:強制進行去交錯處理
        • Disabled:關閉去交錯處理
  • Hardware Acceleration:硬體加速
    • Hardware Decoder to use
      • NVIDIA CUVID:使用N卡的CUDA視訊解碼API,可以開啟硬體去交錯處理
      • Intel QuickSync:Intel內顯專用硬體解碼介面,CPU使用率比其餘硬解模式稍高5~10%左右,可以開啟硬體去交錯處理
      • DXVA2 (copy-back):為微軟開發的硬體加速介面,ANI顯示卡均可使用,會將解碼完成的資訊回傳給記憶體,由於多個回傳動作,故效能會比native略差,不過優勢為可以在解碼器與渲染器中間新增濾鏡
      • DXVA2 (native):為微軟開發的硬體加速介面,ANI顯示卡均可使用,會將解碼完成的資訊將不會傳給記憶體,直接渲染,故效能比copy-back佳,缺點為限制較多
      • D3D11:可以確保得到跟軟解完全相同的畫質,不會有上面DXVA2(native)提到的一些畫質損失狀況。並且也支援AMD 10bit HEVC 解碼
      • 目前會建議新顯示卡使用D3D11模式(N家900系列之後的),舊顯示卡使用DXVA2(copy-back),若有去交錯需求再選擇 NVIDIA CUVID 或 Intel QuickSync
      • 效率比較:D3D11 native >= DXVA2(native) > D3D11 copy-back >= DXVA2(copy-back)
  • Output Formats
    • 如果使用madVR,保持預設即可
    • 如果使用EVR渲染器,只允許LAV輸出RGB 8bit
    • RGB Output levels
      • 當顯示器過渡到全數字階段時,電影攝影師和導演等內容創作者註意到預設的全 RGB 範圍會導致電影和電視節目出現問題。全 RGB 具有更寬的暗度範圍,因此暗部的細節顯示更清晰。對於內容製作者來說,這是一個問題,因為它使“隱藏”內容變得更加困難。例如,恐怖電影喜歡將事物隱藏在黑暗的視覺效果中。動作片使用電線讓人飛,但在後期製作中需要隱藏這些電線。科幻電影和系列有很多效果和 CGI​​。在一個完整而生動的動態範圍內,許多這些元素看起來不那麼逼真並且過度暴露。經過大量實驗,幾乎所有電影和創意藝術應用程式都採用了 16-235 範圍
    • Dithering Mode
      • 抖動是在數位訊號處理領域的中一項用於降低量化誤差的技術。透過在較低位元中加入雜訊,藉此破壞諧波的排序,使諧波的影響受到壓制,並減少量化誤差在低頻的影響。抖動常用於音影片處理,且是CD壓制過程的最後一步。經過抖動處理過的音樂,將聽起來更柔順、背景更黑;而經過抖動處理過的影像,也會更加地柔順耐看。抖動最重要的用途之一是將灰階影象轉為黑白。透過使用抖動演算法,可以令黑白圖案的黑點密度接近原圖案的大致灰度。
      • https://stackoverflow.com/questions/6126118/dithering-vs-ordered-dithering
  • Hardware/GPU Deinterlacing(CUVID/QS only):硬體去交錯處理設定,限定在NVIDIA CUVID或Intel QuickSync硬解模式下啟用。
  • Software Deinterlacing軟體去交錯
    • 此處的去交錯與madVR內的去交錯,則一使用即可
    • YADIF
    • Weston Three Field(Simple)
    • Weston Three Field(Complex)
    • BobWeaver(bwdif)
    • 說明

渲染器:madVR

版本:0.92.17

萬年冷凍庫已經寫得很詳細了,就不多作說明

  • http://lysandria1985.blogspot.com/2014/01/2madvr-profile.html
  • http://lysandria1985.blogspot.com/2013/01/3-madvr.html

懶得設定的話可直接找現成的設定

devices

  • 選擇正確的device type
  • properties
    • output level: 一般而言電腦螢幕選0-255,電視的話選16-235
    • calibration: 如果該螢幕經過校色器校色過或是螢幕有色域選項而且其出廠標準可以信任的話,可以選第二項"this display is already calibrated"

processing

  • zoom control
    • automatically detect hard coded black bars
  • artifact removal
    • reduce banding artifact

scaling algorighms

  • 最重要的部份
  • 通常一個影像檔播放,到渲染器這步驟時,渲染器會先對其做色度升頻,然後再將其原始解析度依需要做影像升降頻到目標解析度,也就是說,一個1080p YCbCr 4:2:0的檔案,就算在解析度1920*1080的螢幕播放,它不需要做任何影像升降頻演算,但還是需要做色度升頻的演算。chroma upscaling裡面指定的的演算法,在完成原始解析度YCbCr 4:2:0→RGB 4:4:4的升頻後即完成任務,之後影像要放大縮小都跟其無關。後續的resize需要的亮度和色度升降頻由image upscaling或是image downscaling所指定的演算法來負責。在對視覺感受的影響上,影像升降頻演算法的影響比色度升頻演算的影響要大得多。換句話說,改變影像升降頻的演算法,你比較容易感覺的到差別,改變色度升頻的演算法比較難感受到差別。
  • 右上角有個表格,每種演算法有不同的數值,通常綠色是優點(sharpness = 銳利度),越高越好,紅色部分是失真,缺陷(aliasing = 鋸齒、ringing = 振鈴效應),越低越好
  • chroma upscaling:色度升頻
    • 播放一個YCbCr 4:2:0的影像檔時,首先要將其色度資訊升頻到原始解析度,也就是YCbCr 4:4:4,這時就會用到色度升頻的演算法
  • image downscaling:影像降頻
  • image upscaling:影像升頻
  • upscaling refinement:銳化演算法,跟前面的iamge enhancements不同,其目的在於改善放大演算後造成的模糊,作用在放大演算之後,屬於post-processing
  • rendering
  • smooth motion frame rate conversion
    • 使用SVP或AMD的Fluid Motion或其他補幀軟體的話,這個功能就取消勾選不要啟用

熱鍵

  • debanding - toggle (切換off-low-med-high)
  • deringing - toggle (開關deringing)
  • deblocking strength - increase (RCA強度增加)
  • deblocking strength - decrease (RCA強度降低)

參考資料

字幕濾鏡:xySubFilter

xy-VSFilter 為NMM-HD論壇的 x小魚y 由VSFilter 2.39修改而成,大幅提高效率,降低CPU使用率,也改善字幕渲染效果。
而 XySubFilter則是2013年與madshi(madVR的開發人員)合作,在保持xy-VSFilter的高效率以外,也修正了一些舊有錯誤,並提供更優異的字幕渲染品質。

電腦效能不足而僅能選擇 EVR渲染(非EVR-CP)時,還是只能使用 xy-VSFilter 來渲染。(XySubFilter 及內建字幕繪製器無法在 EVR渲染模式工作)

特效:XySubFilter > xy-VSFilter > 內建字幕繪製器(MPC-BE)
效率:xy-VSFilter > 內建字幕繪製器(MPC-BE)> XySubFilter

設定

  • 只需要改Always Load即可,其它有問題再改

參考資料

Reclock

ReClock Directshow Filter的用途是在於排除不流暢的影像播放效果
Reclock能幫助影片正確的呈現出它原本該有的效果,而且這軟體並不消耗資源,就算不使用madVR或只使用MPC-BE內建的解碼器解碼,也可以搭配Reclock使用。
如果您眼睛夠利,也許會發現畫面的呈現有一點點的"奇怪",而這個"奇怪",在於畫面的移動,似乎不是那麼的平滑,有點抖動的感覺,不是那麼的"順",亦或是畫面的變換或拉動忽快忽慢,不是用一種平穩的速度呈現,或是偶爾給你跳個一下......我舉的這些例子,其實我敢說大部分的人平常在電腦上看影片都不會注意到,但是當你看過"正確呈現",真正平滑順暢的影像,再回過頭來檢視這些以前這些沒有正確呈現的影片,你或許會驚覺自己以前竟然能容忍那麼多糟糕的播放效果而不自知!
Reclock也可以提高音質

尚未使用,設定待補完

參考資料
萬年冷凍庫:系列之5─能讓你流暢播放影像的音效濾鏡-Reclock
睇片研究所:Reclock將畫面400%同步個螢幕

補幀軟體:SVP

SmoothVideo Project
用於提升影片幀率

需要先做Filter設定

使用簡易設定即可

  • 設定調高會嚴重影響效能
  • 幀率:愈高愈好,一般60FPS就足夠
  • 最佳化:真人/動畫
  • 偽影去除:愈高愈好

因為補幀大多是用內插,常會猜錯,就會有偽影產生
若有嵌於影片中的字幕,就可能會抖動

參考資料

應用

皆使用MPC-HC + LAV Filter + madVR 測試
為何沒用SVP?因為用了偽影太多,正在調整設定中…

效能測試

播放器中Ctrl+j開啟詳細資訊

  • 幀率: movie xxx fps
  • 解析度: scale [原解析度] -> [新解析度]
  • 效能
    • 1 frame drop/repeat every xxx seconds/minutes: 檢查掉幀/重複幀
    • xxx queue: 察看是否是滿的
    • dropped frames, delayed frames: 檢查掉幀情形
    • average stats, max stats: 平均/最大渲染時間

比較方法

不知道該如何公平的比較,用肉眼感覺不準,用錄影的也很奇怪(用影片比較影片?),截圖很麻煩。
gif應該是沒有壓縮的圖片的組合(不確定),所以暫時用gif

❗以下的預覽gif已被壓縮,有興趣的人可下載原檔比較

上傳gif到線上會被壓縮,所以以下的gif預覽其實沒有意義,有興趣可下載原始檔
下方有比較圖,是用原檔截圖,可供參考

網路串流

  • Youtube
    • MPC-HC可用下載器如youtube-dlyt-dlp來開啟網址
    • 平穩世代的韋馱天OP 為例
      • 畫面非常花
      • MPC-HC預設設定
      • 我的設定
      • 比較圖
      • 結論:看不太出差別
  • Bilibili
    • 雖然yt-dlp支援Bilibili,但不支援直接串流,所以需要先下載影片、彈幕、字幕
    • 彈幕+字幕Demo
  • 巴哈姆特動畫瘋
    • 同上,需要先下載影片和彈幕

舊動畫

很久以前下載的,480P/720P的動畫,包含.rmvb, .mp4格式

  • MPC-HC預設設定
  • 我的設定
  • 比較圖

用480P的影片比較,差距就很明顯了。
如果你看不出哪邊比較好,可以不用繼續看了。

總結

  • 以上設定對低畫質影片有非常明顯的改進
    • 老動畫
    • 巴哈動畫瘋免費版(720P)
  • 補幀軟體對大多數影片(<60FPS)有明顯改進
    • 但是內嵌字幕可能會抖動
  • 可以改善線上串流影片(主要為Youtube)的畫質

MPC-HC 缺點

  • 介面有點醜
  • 不能調整 OSD 顯示時間
  • 不能同時顯示多字幕
    • 可以先合併字幕

未來改進

補幀軟體研究

  • SVP
  • FM
  • DmitriRender

流暢的彈幕

  • 用播放器內建播放彈幕,感覺會卡,這可能是字幕的格式問題(彈幕即字幕加上平移操作),也有可能是播放器的問題

參考資料

推薦需要更詳細設定的人閱讀

軟體官網