沒穿方服

索引

顯示╱隱藏內文
顯示具有 軟體 標籤的文章。 顯示所有文章
顯示具有 軟體 標籤的文章。 顯示所有文章

需求類似內建的「影像」→「剪裁出內容」,但不是移除透明部分,而是針對具有上下黑邊(letterbox)甚至有視窗標題 UI 元素的圖片,偵測黑邊再裁掉。

圖片剪裁前(左圖)後(右圖)

第一次用 GIMP 做自動化,官方文件好像就 Gimp Python Documentation 一篇(25 年前的文章?),四處做功課終於兜起來,但也發現可能已成孤兒。

GIMP 2 外掛的過時風險

目前用的穩定版 GIMP 2.10.38(2024/5/5 釋出),內嵌 python 版本是早就 EOL 的 2.7(新作業系統都升到 3 了,兩版共存時期是一場惡夢); 雖然 GIMP 3 仍會使用 python,但舊的 pygimp API 早已在開發分支刪除,所以現在是很尷尬的狀態,查文件也困難,投身其中要自求多福。


目錄

  1. Python-fu 外掛安裝方式
  2. 指令碼內容與功能
  3. 使用 BIMP 進行批次處理
  4. 參考資料

Python-fu 外掛安裝方式

一開始有點混亂為什麼有 Script-fu 和 Python-fu,又為什麼有「外掛程式」和「命令稿」資料夾。 最後理解 Script-fu 和「命令稿」是比較早發展的功能,用 Scheme 語言寫的東西。 雖然直覺 python 寫的東西也是 script,但裝到錯的目錄就什麼也不會發生,要自己小心避開。

假設已經取得指令碼 xxx.py,具體安裝步驟為:

  1. 找出外掛資料夾。
    選單「編輯」→「偏好設定」→ 左邊樹狀選單「資料夾」→「外掛程式」, Windows 預設在 %USERPROFILE%\AppData\Roaming\GIMP\2.10\plug-ins
    可以按右邊按鈕用檔案瀏覽器打開,預設應該是空資料夾。
    外掛資料夾
  2. 把指令碼放進外掛資料夾。
    指令碼在 Windows 檔案總管中的樣子
  3. 結束 GIMP 再重開。
  4. 成功的話,選單會出現新項目。
    出現在選單哪個位置是程式內容指定的,我這支是寫在「濾鏡」→「Python-fu」→「剪裁外框黑邊」。
    一開始無法點選,要先用 GIMP 開啟圖片,才可以使用。
    選單中的新項目,但在還沒開啟圖片時,是不能點選的
    如果選單沒成功新增,可能載入時有錯誤。 我還未找到好的除錯方法,但 Windows 在 GIMP 啟動捷徑加上 --verbose --console-messages 會多顯示一些訊息。

指令碼內容與功能

程式碼放在 gist → https://gist.github.com/bootleq/88341006e04

運作原理是從畫面頂端開始,往下找出黑色的像素,當連續出現 N 個黑色時,就判斷為黑邊,最後一個黑色像素就是黑邊的終點。

為了減少誤判,找到終點時,會在相同水平位置上再取另一個點,確認它也是黑色,否則就不算,要重找。
實際上重找的寫法沒有很嚴謹,目前只會用水平 25、50、75% 的點做有限度的嘗試。

頂端向下找完,同樣邏輯由底端向上找,就能取得上下邊了。

可以調整的參數有兩個:

選項參數與預設值
  1. 黑邊的最小厚度(像素)

    例如連續偵測到 30 個黑色像素時,才認定為黑邊。

  2. 搜尋不到黑邊時的停損比例(例:50 只會搜尋到圖片高的一半)

    當程式找不到黑邊時,繼續掃描每個像素很浪費時間。
    這個選項假設黑邊不會佔據圖片太大比例,例如設為 5 的話,在由頂端往下的搜尋中,只走圖片高度 %5 的距離就會停止了(放棄,當作找不到),若 5% 以下其實還有黑邊,那部分就不會被裁掉。


使用 BIMP 進行批次處理

GIMP 好像沒有內建批次功能,所以還要裝 BIMP 這個外掛來處理。

  1. 「檔案」→「Batch Image Manipulation...」→ 操作列表「+ Add」→「其他 GIMP 操作...」。
  2. 在「搜尋」欄中輸入 letter 篩出 python-fu-crop-letterbox-edges,點選後可以在右邊調整參數,調完按 OK 套用。
    在 BIMP 對話框中調整 python-fu-crop-letterbox-edges 選項
  3. 選好輸入和輸出檔案後,按「Apply」就會開始跑了。

參考資料

一路從官方文件、ChatGPT 甚至到 GIMP 原始碼,覺得很不親切,最後還是只留兩篇人類寫的文章吧。

foobar2000 配合 freedb 找曲目資訊很方便,就算找不到或資料有誤,手動改 tag 功能也很強;
只有一件事我搞不定,就是把編好的資訊上傳回去。

方便的 iTunes + Gracenote

好奇試了一下 iTunes 10,只要選「進階 → 送出光碟軌道名稱」就完成了。

Gracenote 是比較不自由的產品

iTunes 龐大的音樂資料庫是 Gracenote 所提供,使用者只要有 CD 就能回饋資料,參考 FAQ - Content Creators & Owners
這次我拿到才發行的專輯,真的只有 Gracenote 找得到資料;實際修正一些錯字,第二天就更新了,實在厲害。

不過查到 Gracenote 的來歷, 原來 freedb 就是無法接受 CDDB(後來的 Gracenote)授權從 GPL 變成商用而建立的,詳情參考 Gracenote licensing controversy 一文。

用 iTunes 送出 CD 資訊,其實是送資料給 Gracenote; 其他未得到 Gracenote 授權的播放軟體,就不能用這些資料了。

在這音樂授權不知是敵是友的時代,封閉資料庫我選擇先不理他。

板凳播放軟體 WMP 的表現

再試試 Windows Media Player 12,有個「更新專輯資訊」不過點了沒用,大概用途不是這個?網路查到也是說沒有上傳功能。

WMP 資料庫在 fai.music.metaservices.microsoft.com,資料量無法和 iTunes 比,不過有發行的 CD 資料似乎比 freedb 多,缺點是標法比較「本地化」不通用,譬如音樂類型會標成「臺灣流行音樂」或「DOMESTIC(J-POPS)」,感覺像當地唱片公司在維護的。

看不出這個資料庫的定位,有沒有認真經營,很像只是 WMP 的附屬服務。

找不到可靠的 freedb 提交方式

這次特別又查了一下,foobar2000 應該是確定做不到。
以前用過 Mp3Tag 也不行。 再安裝號稱可以的 CDex (v1.7 beta4) 測試,送出時還是失敗 —— 十年來想上傳 freedb 沒成功過,只好放棄。

投靠 MusicBrainz 資料庫

最後找到的是 MusicBrainz - The Open Music Encyclopedia。 資料少得可憐,但至少可以 web 線上編輯,也有專用的 foobar2000 元件 MusicBrainz Tagger

實際使用仍然諸多不便,不過當做 freedb 缺資料的替代方案,暫且試用,慢慢觀察吧。


查詢 MusicBrainz 上的資料

選取 CD 中所有曲目,右鍵選單「Tagging → Tagging Get tags from MusicBrainz (by TOC)」就能查詢。
安裝後,右鍵選單 Tagging 會多出一些項目

最佳狀況是 MusicBrainz 已經有資料。
例如這個是才建好的 Release “Into the Romaunt” by Nocturne Moonrise
查到符合資料

套用以後,卻多出一堆 MusicBrainz 專用 tag,其實很礙眼。
套用後會多出一些 tag

大部分場合是查不到資料的,那就選「Tagging → Add TOC to MusicBrainz」來新增吧。
結果是開啟網頁填資料……

雖然有幫你識別 CD 了,但是在 foobar2000 編好的 tag 並不會帶進網頁,這裡還是得花不少時間重寫。
MusicBrainz 的網頁編輯介面

這個 component 有 open source 在 Dremora/foo_musicbrainz - GitHub
如果能改到在 foobar2000 編完,直接推到 MusicBrainz 便完成編輯就好了。

這軟體應該沒人聽過吧…… Dataton(讀作 Data 燙)WATCHOUT 是一套多螢幕投射系統,用在高解析、大畫面的節目有其優勢。很不幸地我對這方面完全沒興趣,也從一開始就認定這是「錯誤」的工作(對我而言),所以每次做心情都很糟,連行走速度都會變慢。

不知道是否有人能幫忙接這種案子,我做的是 WATCHOUT Production 節目編排的部分,就是簡單的剪輯,比較特別的是:

  1. 編修方便,所以會很頻繁地修改、修改、重做。
  2. 軟體功能毫無掩飾地陽春,這方面「編修方便」盡是鬼扯。

如果你在意有效率地工作,你就是被這軟體氣死的高危險群。

我從 WATCHOUT 2.3 開始用到現在 4.0(試用但沒做案子),一直都是用它獨有的特殊方式來增加效率——如果把它 Snap (Ctrl + N)、Click Jumps To Time (Ctrl + T) 的功能包裝一下,光是時間軸上的複製/貼上就能成為一個小遊戲——有趣嗎?每次新版本推出方便功能,我的感覺除了如釋重負,還有很大部分是「果然沒錯,原本的做法果然很爛」,好比做相同步調的淡入淡出,我會複製其他做好的 Tween 點來貼上,雖然掌握要訣之後動作可以變得很快,但我強烈認為這種作法是錯的!即使不以惡小而不為,一個節目做上幾百次也不小了,這不是開玩笑,是確實會發生的人格殘害。

很想請它還我青春 的軟體

廢話了一堆,其實我是從不相關領域跑來代打的,所以有什麼怨言也可視為外行人的可笑話。倒是有興趣做這個的大俠,不妨瞭解一下 WATCHOUT,編輯部分沒有什麼進入成本(實際播放的硬體授權才要錢),去官網抓一下就可以裝在 Windows 用了。

這裡有一份空白專案檔案(wo_empty_public.7z - DivShare),不過因為版權問題,裡面的多媒體素材(真正有用的東西)都拿掉了;因為沒素材,我預先編好的特效(還算實用)便無法重現,所以也拿掉了……真慷慨,那還剩啥?裡面有業界最前線的 WATCHOUT Media 資料夾結構(沒意義,但可以看看我們的整理方式)供您參考,還有用 Photoshop 批次產生字幕圖用的檔案(比一張一張做快太多啦)在 WIP 資料夾內。

這工作應該有自由工作者能做吧,我真的不想再做了,誰要願意救我,我可以把從地獄帶回來的 know-how 統統送你,全力護送您去受苦。

Mp3tag 是個優秀的 MP3 tag 軟體(雖然 foobar2000 也很夠用了),它的匯出 (export) 功能可以把資料輸出為文字檔、網頁等各種格式。我也照著說明寫了個網頁格式的轉換設定:

說明:

  • 按照資料夾(folderpath)分類、排序。這點在匯出時已固定,無法更改。 
  • 若音軌有註解(comment)標籤,會在標題右邊劃線,且滑鼠移上去會顯示小提示。
  • 表格內容、表格標頭(th)可以隱藏/顯示。
  • 沒有標題(title)的音軌,會以斜體字顯示檔名代替。
  • 若把匯出的網頁跟 sorttable.js 放在同一資料夾,就可以點選表格標頭(th)排序。
  • 資料稍多(大約幾 GB 音樂)時,匯出網頁可能會龐大到把瀏覽器凍住……
  • 如果音樂 tag 不是 utf-8 編碼,就顯示亂碼給妳看。
  • html_leq_folder_index 在 ie6 上不好看。

擷圖:(已為完整尺寸)

html_leq_folder 擷圖 html_leq_folder_index 擷圖

※設定檔(.mte)使用方式可參考官方論壇,專收匯出設定檔的討論串 Export Configuration Archive - Mp3tag Forums

有一份腳本,裡面全部字幕要個別做成 PNG 圖檔。於是美工一句一句改字、裁切、存檔……倒還能準時下班就是…… 我該不該告訴他,這種事可以用 Photoshop 的自動化作業 / 建立資料導向圖像批次處理呢?

其實多講也沒人聽啦,所以我做了一套示範檔案,有需要再看說明修改即可。檔案在這裡 (DivShare),功能如下:依照文字檔的內容,把多張圖片套上框、加上文字、指定檔名存成 PNG

套框,加上文字

直接使用步驟 :

  1. 開啟「資料導向圖像.psd」
  2. 選擇「檔案」-「讀入」-「變數資料集…」- 讀入「範例資料集.txt」 讀入範例資料集.txt
    • 編碼:Unicode (UTF-8)
    • 勾選「使用第一欄作為資料集的名稱」
    • 勾選「取代現有的資料集」
  3. 選擇「檔案」-「轉存」-「資料集作為檔案…」 將資料集轉存成檔案
    就會自動產生一堆 psd 檔了。
    • 資料集:全部資料集
    • 檔案命名:資料集名稱
  4. 選擇「檔案」-「自動」-「批次處理…」  
    修剪剛剛產生的 psd 檔,然後存成 PNG
    • 組合、動作:先在「動作」面板(Alt+F9)的「載入動作…」把 bootleq.atn 載入,然後選擇「修剪 -PNG」
    • 來源、目的地:選擇「資料夾」
    • 勾選「忽略動作的〝另存新檔〞指令」
    • 檔案命名:只要「文件名稱」+「副檔名」 即可

 

要改內容的話怎麼辦?

修改「範例資料集.txt」或「資料導向圖像.psd」。看懂下圖各變數在 psd 和 txt 之間的關係,再打開 Photoshop 的「影像」-「變數」看看怎麼設,應該就知道怎麼改了。變數跟圖層有對應關係

參考:Adobe 的說明 自動化作業 / 建立資料導向圖像,中文版 PDF 手冊在 http://help.adobe.com/zh_TW/Photoshop/10.0/photoshop_cs3_help.pdf

foobar2000 發佈了新版本 0.9.5,不過常被質疑的 Shuffle 行為還是沒變,狀況如下:

選擇 Shuffle (tracks) 播了幾首歌之後,回某一首重聽(一般是點滑鼠兩下),就會發現接下來播放的順序是固定的,跟剛剛聽過的一樣。理由可參考官網 FAQ,簡單講就是 Shuffle 只對播放清單做一次洗牌,所以如果要重聽某一首,然後再次打亂順序的話,有以下選擇:

  1. 重開 foobar2000
  2. 切換 Shuffle 選項(albums / folders / tracks)
  3. 一開始就不用 Shuffle,心存感激地改用 Random(0.9.5 把這選項加回來了)

以下作法沒用:

  1. 選擇 Playback 中的 Random,隨機跳下一首,再改回 Shuffle
  2. 選擇 Playback → Order 中的 Random,下一首後再改回 Shuffle

 

不過我 Order 改 Random 後卻發現 Previous(上一首)功能會失效變成停止,這樣太吃虧了(如果其他人都正常的話),所以最後還是放棄 Random,改用以下折衷法:

設定兩組快捷鍵做 Shuffle (folders) → Next 和 Shuffle (tracks) → Next

Shortcut 設定

從此還是用 Shuffle (tracks) 播放,順序重複的時候再打開 foobar2000 按下兩組熱鍵。缺點是:

  1. Preference 裡會有圖中的 conflict(衝突)警告,詳見 Hydrogenaudio 知識庫 文件 Avoiding_conflicts
  2. 必須叫出 foobar2000 視窗(熱鍵設 Global 好像會把第二個動作蓋掉)。
  3. 得分成兩組熱鍵(併為一個鍵 經測試沒效)。
  4. 最致命的是把 Shuffle 搞得跟 Random 一樣,會播到重複的曲子,這有道理嗎?

兩個 FirefoxSearch Plugin,用來把 0rz.tw 產生的字串(例如 ed0cT )變回原本的網址。

使用後
※圖示是自己做的,可以帶走任意使用。


  1. 低調的 0rz.tw 低調的 0rz.tw 圖示

    還原 0rz.tw 的短網址,檔案下載:re0rzTW.xml

  2. 台泥看盤工具 台泥看盤工具 圖示

    還原 TinyURL.com 的短網址,檔案下載:reTinyURL.xml


做這個其實很簡單,用下面的原型,改第 6 行圖示和第 9 行網址即可。細節可參考 MDC 的文件 製作 OpenSearch 搜尋模組

<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>低調的 0rz.TW</ShortName>
<Description>在關鍵字前附上 http://0rz.tw/ </Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">
data:image/png;base64,iVBORw0KGgo(……後面太長省略)
</Image>
<Url type="text/html" method="get" template="http://0rz.tw/{searchTerms}"></Url>
</SearchPlugin>

※這裡公佈的圖示是 PNG 格式,若要用在 Open PCMan 2007,請參考 Open Search 內嵌圖示轉換器 for PCMan 2007