ETH官方钱包

前往
大廳
主題

【Unixporn】自製bash腳本,桌面>>MV

Nighty9 | 2022-11-12 23:54:39 | 巴幣 0 | 人氣 465

本腳本僅適用於LINUX環(huán)境
並且有一點「Omori」的小小劇透?
此「小粉紅」是遊戲中的隱藏頭目



系統(tǒng):Devuan(支援OpenRC的Debian)
桌面:StumpWM
要是你好奇為什麼我電腦桌面是空的,我現(xiàn)在都用rofi,
圖示跟系統(tǒng)列是多餘的!BLOATTTTTT!

我想挑戰(zhàn)用linux重現(xiàn)一些MV的效果(靜圖但特效多的音樂影片)
撥一首歌,就有特效跟可愛的動漫角色出現(xiàn)那種 <矮油,好噁
成功藉由 chafa, conky, dzen2, feh, glava, moc, 達成目標?

在X11環(huán)境,基本上圖形層級都是:
【桌布】>【特效】>【桌面工具】>【軟體】
我得想辦法分配軟體,把MV要素放在各層級中,重現(xiàn)MV的感覺

【桌布】最容易解決(feh),但【特效】有點棘手?
我的選擇基本上只有 glava (影片裡完美甜心背後的光)
需要去github下載安裝,若編譯失敗,作者在issue裡有提供其他版本
glava提供了許多模式,有興趣的可以自己研究,本文用的是radial,
改預設(shè)模式去 <$HOME/.config/glava> 修改 rc.glsl,
想調(diào)整位置顏色就修改對應模式的 .glsl


我也想用conky告知「音樂專輯」、「歌名」、「剩餘時間」等資訊,
但發(fā)現(xiàn)conky跟glava不能在畫面上接觸,不然會錯誤破圖
而且StumpWM似乎不是很能處理conky?換個視窗就會錯位?

要在【桌面工具】中找替代品嗎?其實不用

有組合技!conky雖然不能上臺表演,但截取資訊的能力還在,
讓conky截取moc(終端音樂撥放軟體)的資訊;
再將「音樂專輯」、「歌名」跟「剩餘時間」導入dzen2(系統(tǒng)列),
MV「特效」跟「音樂資訊」就解決了。(且dzen2跟glava不衝突)
影片範例只有示範一首歌,但下方的資訊是會隨歌曲變動的。

最後是超麻煩的「MV前景」問題?怎麼讓影片主角上臺?

要找到方法讓MV主角跑到最前面(而且最好還會動)不容易!
在【桌布】用動態(tài)桌布?主角會在特效後面;
就算conky能用,在【特效】層置入圖片?會跟glava衝突!
而且用conky來撥放動圖基本上是壞主意,太消耗系統(tǒng)資源

【桌面工具】似乎是最後希望,但這類的東西好像只有KDE有?
但那些工具也不理想,就算支援圖片,周邊也會有框架礙眼!

難道要在【軟體】層中找「完全透明」的圖片瀏覽器嗎??
就算能讓視窗框消失,圖片的透明背景也會是灰白方格?

到此為止嗎???

「!!!」

這時我熊熊想起,許多「終端機」支援透明背景!!
於是乎,目標變成找到最理想的「終端機圖片瀏覽軟體」!
就這樣,chafa(賈方?假髮?)變成了理想首選!
一開始跑出來的圖解析度很低,花了我不少時間挑整設(shè)定,
但後來發(fā)現(xiàn)只要把終端機的字體調(diào)小,圖片解析度直接翻倍!

漫漫長路~我終於抵達了終點
要是貪心一點,可以用複數(shù)的glava+dzen2讓畫面更華麗

可能有人會覺得花那麼多功夫搞那麼一點鳥事?

THIS IS LINUX

就算步驟多,繁雜瑣碎,只要你會寫腳本,都可以一鍵搞定!
影片裡就在透明終端打一行字!結(jié)束了桌布還會換回來!
(但你桌布也必須是用feh設(shè)的就是了)


前置作業(yè):
1)支援背景透明的終端,設(shè)定背景透明,字體調(diào)最小

2)系統(tǒng)有chafa, conky, dzen2, feh, glava, moc;
我編譯最新版chafa時,需要跑 ldconfig搞定檔案聯(lián)結(jié)
系統(tǒng)找不到,結(jié)果竟然要打 /sbin/ldconfig 才可以


3)chafa會隨終端視窗大小顯示圖片?無法更改預覽大小
影片中的完美甜心動圖修改過,有在上方預留空間

4?)可調(diào)整compositor,個人要支援透明但不要陰影
xcompmgr -cC -o00

下方為bash腳本,切莫全抄!需要自己手動修改檔案位置!
以後有空做一個更完整的腳本好了?設(shè)定檔通通放一起的那種



#!/bin/bash

#FILE PATH
conky_conf_path=conky設(shè)定檔路徑
fehbg_path=桌布路徑
img_path=前景「主角」圖片路徑

#MAIN CODE SECTION
#先在moc挑一首歌,選好後按q離開,主角登場!
mocp -T nightly_theme
#silence glava output
glava > /dev/null 2>&1 &

conky -c "$conky_conf_path" | dzen2 -e 'onstart=lower' -ta l -w '1920' -h '60'  -y '925' -fn 'Atari:size=18' -bg 'floral white' -fg 'lightskyblue' &
feh --bg-scale --no-fehbg "$fehbg_path" &
chafa -C on --clear "$img_path"

#ctrl+c 結(jié)束派對
#set wallpaper back. feh have to be your wallpaper setter.
$HOME/.fehbg &
clear &
pkill mocp
exec bash


conky設(shè)定檔:


conky.config = {
    out_to_x = false,
    out_to_console = true,
    short_units = true,
    update_interval = 1,  
}

conky.text = [[
${if_running mocp} ^fg(pink)^r(10x10)^fg() NOW PLAYING^fg(mediumpurple) ^r(10x10) ^fg(palevioletred2)${moc_album}^fg(mediumpurple) ^r(10x10) ^fg(palevioletred2)${moc_song} ^fg(pink) ^r(10x10) ^fg()${moc_timeleft}${endif}
]]


glava (radial.glsl)設(shè)定檔:


/* center radius (pixels) */
#define C_RADIUS 164
/* center line thickness (pixels) */
#define C_LINE 0
/* outline color */
#define OUTLINE @bg:#333333
/* number of bars (use even values for best results) */
#define NBARS 80
/* width (in pixels) of each bar*/
#define BAR_WIDTH 20
/* Amplify magnitude of the results each bar displays */
#define AMPLIFY 800
/* How quickly the gradient transitions, in pixels */
#define GRADIENT 200
/* Bar color. This is a gradient by default. */
#define COLOR @fg:mix(#ffffff, #ffff00, clamp(d / GRADIENT, 0, 0.6))
/* Angle (in radians) for how much to rotate the visualizer */
#define ROTATE (PI / 2)
/* Whether to swap left/right audio buffers, set to 1 to enable */
#define INVERT 1
/* Aliasing factors. Higher values mean more defined and jagged lines.
   Note: aliasing does not have a notable impact on performance, but requires
   `xroot` transparency to be enabled since it relies on alpha blending with
   the background. */
#define BAR_ALIAS_FACTOR 1.2
#define C_ALIAS_FACTOR 1.8
/* Offset (Y) of the visualization */
#define CENTER_OFFSET_Y -210
/* Offset (X) of the visualization */
#define CENTER_OFFSET_X 0

/* (DEPRECATED) outline color */
#define BAR_OUTLINE OUTLINE
/* (DEPRECATED) outline width (in pixels, set to 0 to disable outline drawing) */
#define BAR_OUTLINE_WIDTH 0


送禮物贊助創(chuàng)作者 !
0
留言

創(chuàng)作回應

更多創(chuàng)作