整理漫畫圖檔的小工具: ftcbz

在講 ftcbz 之前,先來聊聊電子化漫畫的收藏問題。

漫畫是由圖片組成的,但與傳統圖片不同,並不是以「單張圖片」作為邏輯單位,而是以卷為單位。在這種狀況下,一本電子化的漫畫資料,本質上其實也就是一堆有序的圖片。

不過,任由一堆圖片赤裸裸地放在資料夾中,很多時候難以管理。舉例來說,您可能會不小心變更了一個檔案,不小心弄亂檔名順序,或是想要透過搜尋查找檔案時,找到一海票單獨存在毫無意義的圖片檔案。此外大量細小圖檔也可能造成一些作業系統的效能問題,比方說,每次瀏覽資料夾時,系統就會試圖建立起一海票縮圖,或是透過 MTP / FTP 協定傳檔時效能超慢等等問題。

而這許多因素,也就引出了「對漫畫檔案進行打包」的需求。理想中,是以漫畫的邏輯單位,也就是每卷或每章節為單獨一包。

常見的漫畫歸檔格式

cbz

「.cbz」正是一種基於 zip 的漫畫打包格式。

不過,說 cbz 「基於 zip」其實多少有點不盡不實啦。cbz 格式說得更直白一點,其實也就只是一包用 zip 格式包起來的壓縮檔,他和 zip 的差別,僅僅在於副檔名不同,真的沒別的了。

相對其他漫畫歸檔格式,cbz 的主要優點在於他很常見,閱讀程式的支援也很廣,我用過的漫畫閱讀器全都支持,一個不差。反過來說,其主要缺點是壓縮檔內不支援檔名編碼,所以如果在不同的作業系統上進行壓縮與解壓縮,檔名可能會變成亂碼。不過這個問題在處理漫畫圖檔時基本可以無視。

cbz 不是唯一的漫畫歸檔格式,其他同類格式還有 cbt, cb7, cbr 等,分別對應到 tar, 7z, rar 等壓縮格式。與 cbz 相同,他們與原始格式的差異也都只是副檔名不同,這方便雙擊時讓作業系統知道用圖片瀏覽器去打開他們,而不是用壓縮程式去打開。

cbt

相比 cbz,基於 tar 的 cbt 格式則是我最看好的格式之一。

cbt 天生經過沒有壓縮,打包解包都很快,幾乎就和直接存取磁碟一樣快,而且隨機讀取內部任一張圖的速度也很優秀。圖片畢竟沒法壓縮,在那邊壓來壓去只是徒然減緩響應速度而已,沒什麼好處。當然,其他格式如 cbz 也能支援無壓縮模式,不過用戶得自己去設定它--非技術用戶鐵定會忘記這一點。

話說回來,舊版的 tar 檔案也不支援檔名編碼,不過在新的 tar pax 版本中,檔名編碼也被實作了。並不是問題。

不過 cbt 目前支援的軟體比較少,想要普及還需要在努力

cbr 與 cb7

基於 rar 的 cbr 也還算流行,軟體支援度還不錯,不過真要我說,其唯一的優勢就是不知道為啥大家都用 rar 來壓檔案,因此各家漫畫瀏覽器都不得不支援。

rar 格式的另一個優點是壓縮率較高,但這在壓圖片的場合沒有意義,而且解壓速度一般來說比 zip 慢。此外 rar 格式是專有軟體格式,開發起來有點麻煩……總之,只要我能選,我就不會選用它來存放漫畫圖片。

另一方面,基於 7z 格式的 cb7,則是解壓速度與隨機存取速度都慢到讓人髮指 (不過這可能與我的壓縮設定有關,待確認),而且 7z 原始函式庫是設計在 Windows 下運行的,雖然是自由軟體,也有 p7zip 專案,但在 Linux 環境下嚕起來還是比較詭異。

7z 的壓縮率比 rar 還要好,不過這在壓圖的場合同樣沒有任何意義。

以上這些格式,原始設計是漫畫歸檔用,但我也把這些格式大量用在圖檔需要成叢打包的場合。之後要瀏覽,就直接拿漫畫瀏覽器來看,非常方便又好處理。我現在直接將漫畫瀏覽器 (mcomix) 設為作業系統的預設圖片瀏覽器來用,用起來快又順手。

關於 ftcbz

前面說了些檔案格式的事情,現在說說 ftcbz。

ftcbz 是咱寫的一支簡單腳本程式,已經發佈了一年左右,其名早期(<=1.1 版)為 Folder to cbz 之意,顧名思義就是把資料夾批次壓成 cbz 用的。

其實一般壓縮軟體也能做這個,只要壓成 zip 後再改個檔名就好,不過這就要一個一個資料夾手工慢慢壓。假設每本漫畫有十來個「卷資料夾」,十套漫畫就可能破百個資料夾,加上壓縮速度不快,電腦 IO 總是卡住,很長時間都只能呆在電腦面前發呆,又不能丟著不管,總之啥也不能做……煩死了!

太有忍耐力的程式設計師鐵定不是個好程式設計師,看在懶惰的名義上。那就寫個程式來批次把圖庫/漫畫壓成 cbz 吧 ♥

好吧,我知道這是典型的不折騰會死行為。程式設計師是一種精神疾病……大家就別糾結這件事了。

改版 2.0

這篇發表的時候,ftcbz 剛好改版到 2.0 版,因應功能增強,重新定名為 Freezing to cbz!。如新名稱暗示的那樣,新版不只能接受「資料夾」作為資料來源,還能接受其他格式 (目前僅支援 rar/cbr) 作為資料來源,而且還支援在轉換過程中拆除討厭的密碼。

除此之外,2.0 也修改了框架,讓程式內部管線化,明確分離出 input phase 與 compress phase 兩部份。換句話說以後可以透過直接撰寫新組件,支援更多的輸入格式與輸出格式。不過具體要支援哪些就等我啥時有需要時再去弄了。

安裝與用法簡介

安裝方式是透過 pypi,如下:

pip3 install ftcbz

程式目前只在 Linux 環境下測試過,不過我沒有寫平台專屬的 code,運氣不差的話在 windows 下也能跑吧?不然就等誰報 bug 時再修。執行條件為 python>=3.3,如果需要用 rar 方面的相關功能請自行另裝 unrar 套件 (沒裝卻想用相應功能時會有提示)。

簡單的指令使用範例:

ftcbz 漫畫資料夾1 漫畫資料夾2

以上每個「漫畫資料夾」下都會有多個「卷資料夾」,程式會自動把「卷資料夾」壓成 cbz 檔案。更進一步的詳細用法與解說請見專案官網與程式內幫助 (ftcbz -h),這邊就不囉唆了。

有需要的人就自行試玩看看吧!