i3wm 下使用視頻動壁紙(帶硬件加速)

Posted on Feb 1, 2022

嘛,不知道怎麼開頭,因爲只是沒事幹去搞了一下,只是怕忘記了就先寫下來了,說不上那天就用上了呢(x
日常使用的話,我是不會去碰動態壁紙之類的東西,因爲這些東西很影響我的注意力,而且這也沒多大的必要。但你十分喜歡這種十分炫酷的視頻動態壁紙的話,希望這篇東西可能可以幫到你吧。

0x00 怎麼整?

i3wm 只是個 WM (窗管)他是沒有壁紙之類的亂七八糟的東西的,他只負責管理窗口。既然沒有東西專門負責壁紙,那麼我們的視頻壁紙要怎麼搞呢?
看起來很麻煩,仔細想一下那不就是個視頻播放器在放無聲視頻。視頻播放的話,那就要考慮要支持硬解了,讓 CPU 來解碼的話那會佔用不少的資源,在一些配置比較垃圾的電腦上,可能會造成新的卡頓,因此我們需要使用顯卡來加速解碼,減少不必要的卡頓,你也不想開個壁紙就大幅度影響你的桌面使用體驗吧。要用可以硬解又不這麼折騰而且還支持 nvdec 的視頻播放器,那直接用 mpv 好了。接下來就好辦了,開個視頻播放器然後讓它把視頻塞到根窗口,這就完事了。那確實簡單,但現實往往沒有這麼簡單,你會發現啥事都沒發生。出於各種目的,解決撕裂,窗口透明,美觀,炫酷動畫等等,你可能會使用 compositor ,例如 picom。這時候你會發現讓視頻播放器塞到根窗口根本不管用。因此我們還需要一個東西xwinwrap[1],它可以讓你在啓用 compositor 的情況下,可以實現視頻壁紙的願望。

0x01 開整!

其實上面就已經把要做的事情說完了,那麼現在剩下的只是敲敲鍵盤的事情了。
舉個例子:
我的屏幕大小是 3440 x 1440 ,使用 這個視頻 作爲動態壁紙
命令如下:(參數就看你需求改就是了這裏只是演示一下)

xwinwrap -g 3440x1440 -ni -s -nf -b -un -ov -fdt -argb -- mpv -wid WID --ao=null --loop=inf --stop-screensaver=no --script-opts=ytdl_hook-ytdl_path=yt-dlp "https://www.youtube.com/watch?v=n9w_hZkbfoo"

(注:因爲 youtube-dl 下載太慢這裏使用 youtube-dl 的一個 fork yt-dlp[2])
如果你是要播放本地視頻,那麼改爲:

xwinwrap -g 3440x1440 -ni -s -nf -b -un -ov -fdt -argb -- mpv -wid WID --ao=null --loop=inf --stop-screensaver=no $VIDEO_PATH

在終端中跑完,看見沒問題就可以把這命令扔到 i3wm 的 config 下隨 i3 啓動了。
在我的機器( i7-7700HQ + GTX 1050 Ti Mobile )上,這樣配置使用 mpv 做動態桌面 cpu 佔用率基本上沒變化。
效果圖我就不放了,效果也沒法截圖放出來,你可以自己去折騰看看,效果確實挺好的。

0x02 結束語

前面說了我只是怕忘記寫而把這記下來,我很多東西具體沒有去深究,只是知道這樣他工作。因此這篇文章可能會有什麼錯漏,歡迎指出,我會去修改完善的。


參考資料以及鏈接

[1] https://github.com/ujjwal96/xwinwrap
[2] https://github.com/yt-dlp/yt-dlp

comments powered by Disqus