→ idisnothing: 那像deinterlace之類的後處理可以offload給GPU嗎? 03/13 20:03
→ idisnothing: 還是一樣只能由CPU來處理? 03/13 20:05
推 s9209122222: 這我不確定,不曉得怎麼看,但用htop看cpu使用率有增 03/13 21:09
→ s9209122222: 加 03/13 21:09
→ idisnothing: 一開始我也是看cpu跟gpu的使用率 後來發現vlc的 03/13 21:48
→ idisnothing: message把level調到debug後就能看到更多資訊 03/13 21:49
→ idisnothing: gpu是geforce 210, vlc的video ouput跟hardware-acce 03/13 21:55
→ idisnothing: lerated decoding都選vdpau 從message上看來是有把 03/13 21:56
→ idisnothing: deinterlace交由gpu處理 cpu usage也很低 03/13 21:57
→ idisnothing: 但畫面看起來差強人意 還在研究到底怎麼回事 03/13 21:57
推 s9209122222: 不過現在還有很多需要去交錯的影片嗎?我只有網路上 03/13 22:11
→ s9209122222: 找到的某些片片會看到 03/13 22:11
→ idisnothing: 有喔 數位電視的訊號就是1080i跟480i的QQ 03/13 22:14
推 s9209122222: 我發現純vaapi沒辦法deinterlace,只有vaapi-copy可 03/13 22:16
→ s9209122222: 以 03/13 22:16
推 s9209122222: 然後vdpau可以,但畫面很頓 03/13 22:18
→ s9209122222: 看了他的 framing time 明明就很低啊 03/13 22:19
→ idisnothing: 看來兩個api都能將一些後處理都offload給gpu了 感動 03/13 22:35
→ idisnothing: 你是用vlc還是mpv? 如果是vlc然後decoding選vdpau 03/13 22:37
→ idisnothing: 那vo也要選vdpau 畫面才不會頓 03/13 22:38
推 s9209122222: mpv 03/13 22:43
→ idisnothing: mpv我沒用過 有機會再試試 03/13 22:45
推 s9209122222: 試了一下要是vo=vaapi,那麼vaapi也能去交錯,但效果 03/13 22:50
→ s9209122222: 一樣糟糕 03/13 22:50
推 s9209122222: 目前用起來最順的是加上 --vf=lavfi=yadif 這個選項 03/13 22:58
→ s9209122222: 配上 vaapi-copy 03/13 22:59
→ idisnothing: 我之前試也是差不多的結果 要像windows下那樣把所有 03/13 22:59
推 s9209122222: 可惜這好像是用cpu的? 03/13 23:00
→ idisnothing: 工作都丟給gpu去做還是有難度 我試的結果也是decodin 03/13 23:00
→ idisnothing: g選vaapi 然後vo選xv 去交錯交給cpu(yadif)來做 03/13 23:01
→ idisnothing: 這樣的播放效果最好 跟你的結果差不多 03/13 23:02
推 s9209122222: 為什麼cpu反而順,太詭異了 03/13 23:02
推 Bencrie: vdpau 自己有硬體 deinterlace,vaapi 我記得也是有 03/13 23:58
推 Bencrie: 至少 nvidia 跟 intel 在這塊都是 ok 的 03/14 00:00
推 Bencrie: Blu-ray 影片也有 1080i 的 03/14 00:05
→ idisnothing: 那樓上知道怎麼設定才比較好嗎? 03/14 00:40
→ obarisk: 純推intel內顯,wayland現在擋的住嗎?Ubuntu是換定了吧 03/14 13:45
→ OrzOGC: intel安定,wayland現在還是............... 03/14 18:12
推 LiDra129: 回s大 我一直是用專利驅動 因為想要用OpenCL 03/14 18:18
推 Bencrie: intel 的用 hwdec=vaapi vo=opengl 03/14 19:31
推 s9209122222: opengl這選項不是改叫gpu了嗎? 03/14 22:12
→ s9209122222: OpenCL我是用AUR裡那從amdgpu-pro提取出來的那個 03/14 22:15
推 Bencrie: debian stable 收的 mpv 0.23 還是叫 opengl 03/15 01:47
今日有幸以相當划算的價格入手了一張NVIDIA GT610
終於成功將1080i影片之解碼與去交錯通通交由GPU來處理,且畫質相當不錯
以下為系統配置:
CPU: AMD Athlon II X4 640
MB: Gigabyte MA78GM-S2H
OS: Ubuntu 16.04
GPU Driver: NVIDIA Driver 390.48
PLAYER: mpv 0.28.0-437-g9efb027
FFMPEG: ffmpeg N-90705-g18d6ff2
因為先前用的NVIDIA G210賣掉了 所以入手GT610前用的是主機板的內顯HD3200
在Windows下確認過HD3200確實是可硬體去交錯的
但在Linux下卻只能解碼 不能去交錯(用的是系統內建開源驅動"radeon")
重新編譯過mesa-git, libva-1.8.3, ffmpeg-git, mpv-git, 但情況依舊
mpv的參數我是這樣下的
$ mpv --hwdec=vaapi --vo=vaapi --vf=vavpp=deint=motion-adaptive 1080I_FILE
mpv的manpage中有提到多種去交錯演算法,包括bob, weave, motion-adaptive, motion-compensated 等
但沒一個選項能成功開啟硬體去交錯
最後只好如網友s9209122222所建議:解碼交由GPU處理;去交錯交由CPU處理,指令下法如下
$ mpv --hwdec=vaapi-copy --vo=gpu --vf=lavfi=yadif 1080I_FILE
但由於去交錯的部份仍交由CPU處理,所以當CPU負載高時影片播放相當容易受到影響
在換上GT610並安裝官方驅動後,以下列方式下達指令即可成功將解碼與去交錯全部交由GPU處理
$ mpv --hwdec=vdpau --vo=vdpau --vf=vdpaupp=deint=yes:deint-mode=temporal-spatial 1080I_FILE
或是也可以只下達:$mpv --hwdec=vdpau --vo=vdpau 1080I_FILE
然後在mpv視窗下按下"d"鍵 即可開啟去交錯 (但這方式所使用的去交錯演算法為預設的temporal)
困擾已久的問題總算解決 終於可以好好看電視了QQ
Ref:
https://mpv.io/manual/master/
04/21更新:(後來發現這對流暢度幫助不大,請忽略。)
看了幾天電視下來,有時總覺得畫面流暢度好像沒在Windows下來得好
剛在看mpv的manpage時看到了--vo-vdpau-output-surfaces這個選項
就想起了NVIDIA的官方文件有提到提高surface的數量可增進效能
由於手邊這張GT610足足有1GB記憶體可用,於是就直接將surface數量設為最大值15
設定過後畫面流暢度果然看起來又更好了一些,記憶體用量有提高,但總共也才用190MB左右而已
另剛還有看到auto profiles這個好用的功能,在~/.config/mpv/mpv.conf加入以下幾行
即可在看DVB-T數位電視時自動啟用硬解、硬體去交錯並將surface數量設為15
================================================
# ~/.config/mpv/mpv.conf
[protocol.dvb]
vo-vdpau-output-surfaces=15
hwdec=vdpau
vo=vdpau
vf=vdpaupp=deint=yes:deint-mode=temporal-spatial:hqscaling=1
================================================
Ref:
https://tinyurl.com/ydcamorn
5/1更新:
問題算是真正解決了 最後所使用的播放器是vlc-3.0-git
設定方面,Hardware-accelerated decoding 選 VDPAU video decoder
Video output 選 OpenGL video output
硬體去交錯無需設定,vlc在偵測到interlaced影片時會自動啟動硬體去交錯
去交錯演算法可透過以下方式更改,我是選temporal-spatial
Tools -> Preferences -> All -> Videos -> Filters -> VDPAU -> Deinterlace
在這樣設定下 畫面流暢度與穩定度都相當棒 幾乎感受不到延遲與頓點
另外發現軟解+軟體去交錯的畫面其實也可以相當流暢
只要使用Yadif(2x)這個deinterlacer就可以了(Video -> deinterlace mode -> Yadif(2x))
vlc-3.0-git
http://git.videolan.org/?p=vlc/vlc-3.0.git;a=summary
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.185.53
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1524057897.A.2F3.html
推 ddtsatan: 推 04/19 01:16
推 Debian: 推薦文章。 04/24 12:28
→ idisnothing: 試到現在 畫面看起來最流暢的mpv參數下法為 04/25 23:55
→ idisnothing: --hwdec=vdpau --vo=gpu --vf=vdpaupp=deint=yes:dei 04/25 23:56
→ idisnothing: nt-mode=temporal 04/25 23:58
→ idisnothing: GT610可能不太夠力 用temporal-spatial來去交錯畫面 04/25 23:59
→ idisnothing: 總是頓頓的 看歐冠時尤其明顯 04/26 00:00
→ idisnothing: 蠻意外的是把解碼和去交錯都交給GPU來做時 畫面流暢 04/26 00:05
→ idisnothing: 度居然比把兩者交由CPU來做要來得好 一直以為軟解+ 04/26 00:07
→ idisnothing: 軟體去交錯是best solution的說 04/26 00:08
推 Bencrie: 要 CPU 做後製就一定要從 vram 抓東西回 ram 來算 04/26 02:04
→ Bencrie: 有過 bus 會慢是正常的 04/26 02:04
→ idisnothing: 我現在試的都是純CPU解碼+去交錯 或 純GPU解碼+去交 04/26 02:21
→ idisnothing: 錯 所以不會從vram複製解碼過後的資料回system ram 04/26 02:23
→ idisnothing: 做後處理 04/26 02:23
→ idisnothing: 找到畫面更流暢的方案了 那就是vlc-3.0.2+ffmpeg-git 04/28 13:02
→ idisnothing: 而且用的deinterlacer是temporal-spatial 流暢度與 04/28 13:04
→ idisnothing: Windows下的mpc-hc不相上下 但常不明原因crash 真是 04/28 13:04
→ idisnothing: 有一好就沒兩好 都2018了沒想到把deinterlace offload 04/28 13:04
→ idisnothing: 給GPU還是困難重重 04/28 13:04
→ Bencrie: vlc 軟體 deinterlacer 不是通常都用 yadif 嗎 05/08 23:42
→ idisnothing: 以前我也用yadif 最近看運動賽事發現用yadif(2x)比較 05/10 01:09
→ idisnothing: 好 畫面看起來流暢多了 因為輸出的frame數量多了一倍 05/10 01:10
※ 編輯: idisnothing (220.132.185.53), 05/24/2018 00:07:36