如何翻譯 CBZ 或 CBR 漫畫壓縮檔而不打亂頁面順序
在翻譯 CBZ 或 CBR 漫畫之前,先修正頁面順序、封面、垃圾檔案和由右至左的設定。內含免費壓縮檔檢查工具和範例檔案。

CBZ 檔案是頁面圖片的 ZIP 壓縮檔,而 CBR 檔案則是用 RAR 打包的相同概念。壓縮檔內沒有任何東西會標示「這是第 2 頁」。漫畫閱讀器和翻譯工具都是透過排序檔案名稱來判斷頁面順序。因此,翻譯後漫畫的大多數問題在翻譯前就已存在。封面跑到最後面、第 10 頁出現在第 1 頁之後,或是應該由右至左閱讀的漫畫卻變成由左至右開啟。
上傳前請先執行三項檢查。確認頁面名稱能排序成正確順序、移除任何不是頁面的檔案,並保留壓縮檔中的 ComicInfo.xml 檔案(如果有)。然後將壓縮檔以 CBZ 格式上傳。我們寫了一個免費的漫畫壓縮檔檢查工具,能在一秒內執行這三項檢查,並可用安全的頁面名稱重新打包檔案。
快速解答:如何處理你的壓縮檔
| 你現有的檔案 | 上傳前的處理方式 |
|---|---|
頁面命名為 001.jpg、002.jpg……的 .cbz 檔 | 直接上傳即可 |
頁面命名為 1.jpg……10.jpg,或有未編號的 cover.jpg 的 .cbz 檔 | 用補零的檔名重新打包(步驟 2) |
.cbr、.cb7 或 .cbt 檔案 | 解壓縮後,將資料夾重新打包為 .cbz(步驟 3) |
| 頁面儲存為 AVIF、JPEG XL 或 HEIC 格式 | 先將這些頁面轉換為 PNG、JPEG 或 WebP |
| 應該由右至左閱讀的漫畫 | 保留其 ComicInfo.xml,並在翻譯後更新語言欄位 |
| 從商店應用程式購買的漫畫 | 確認你確實擁有允許使用的無 DRM 檔案 |
以下各節將說明每一列。
為什麼頁面順序會亂:閱讀器會排序檔案名稱
檔案名稱有兩種常見的排序方式,一旦頁碼長度不同,兩者就會產生分歧:
- 純字元排序會逐字元比較名稱。
10.jpg以1開頭,因此排在2.jpg之前。你會得到 1、10、11、12、2、3……的順序。 - 自然排序會將連續數字視為一個數值,因此
2會排在10之前。你會得到 1、2、3……10、11、12 的順序。
許多漫畫閱讀器會自然排序,但你不能指望這一點,也無法控制翻譯後的檔案會在哪個閱讀器中開啟。到處都適用的解決方法是將數字補零:001.jpg … 010.jpg 無論用哪種方法排序,結果都相同。
另外兩個命名問題很容易被忽略:
- 未編號的封面會排在最後。 兩種排序方法都會將數字排在字母前面。在包含
cover.jpg和001.jpg…024.jpg的壓縮檔中,封面會變成最後一頁。 - 章節資料夾會作為名稱的一部分參與排序。
Chapter 10/01.jpg和Chapter 2/01.jpg會先比較資料夾名稱,因此資料夾編號也需要和頁碼一樣小心處理。
BookTranslator 會以自然、不區分大小寫的排序方式排列 .cbz 頁面,並跳過 __MACOSX 資料夾、.DS_Store 等點檔案以及 Thumbs.db 之類的垃圾項目。這表示翻譯時第 2 頁會排在第 10 頁前面。不過,翻譯後的頁面會保留原始名稱。如果你上傳 1.jpg … 12.jpg,取回的會是 1.png … 12.png,而使用單純排序的閱讀器仍會把它們弄混。在上傳前重新命名,就能為所有閱讀器修正順序。
步驟 1:檢查壓縮檔
下載 check_comic_archive.py 並在你的漫畫上執行。它需要 Python 3.8 或更新版本,不需要其他東西,而且不會上傳任何內容:
python3 check_comic_archive.py "My Comic.cbz"
為了展示它會發現什麼,我們建立了一個小型範例壓縮檔,其中包含漫畫檔案中常見的問題。它有十二頁未補零的頁碼、一個未編號的 cover.png、一個跨頁、一個 AVIF 檔案、macOS 垃圾項目,以及一個標記為從右至左漫畫的 ComicInfo.xml。README 說明了如何使用 make_test_comic.py 重建它。以下是報告的結尾:
Junk entries (skipped): .DS_Store, __MACOSX/._1.png
Other files (carried over unchanged): ComicInfo.xml
ComicInfo.xml:
Manga (reading direction): YesAndRightToLeft
Right-to-left is stored here, not in the images. Keep this file in the archive so readers that honor it still see it.
LanguageISO: ja. Update it after translation; a copied ComicInfo.xml still names the source language.
Page table: 13 entries for 13 page images.
13 entries record ImageSize/ImageWidth. These describe the original files and no longer match once pages are replaced.
Check before uploading:
- A plain character sort puts '10.png' at position 2, where natural sort has '2.png'. A reader without natural sorting will show pages out of order.
- Pages without a number in the file name: 'cover.png' at 13. Digits sort before letters, so an unnumbered cover usually ends up last.
- Page numbers use [1, 2] digits. Zero-pad them (001, 002, ... 010) so every reader agrees on the order.
- Images in a format that is not treated as a page here: 13.avif. Convert them to PNG, JPEG or WebP, or they stay untranslated.
在上述內容之上,報告會按閱讀順序列出每一頁及其尺寸。它會將寬度大於高度的頁面標記為跨頁,並將高度超過寬度三倍的頁面標記為長條,例如條漫章節。翻譯結果回來時,這些就是應該優先檢查的頁面。
對於純 ASCII 檔案名稱,檢查器的自然排序會遵循與 BookTranslator 處理 .cbz 頁面時相同的比較方式,包括章節資料夾、大小寫混合、空格、連字號和底線。帶有重音字母或日文假名的名稱在不同工具之間可能排序不同,這是將頁面重新命名為純補零數字的另一個理由。
步驟 2:以安全的頁面名稱重新封裝
如果報告列出排序問題,請先查看列印出的順序,然後重新封裝:
python3 check_comic_archive.py "My Comic.cbz" --first cover.png --repack "My Comic fixed.cbz"
--repack 會寫入新的 CBZ。頁面會按照顯示的順序重新命名為 0001、0002 …,垃圾項目會被丟棄,而其他每個檔案(包括 ComicInfo.xml)都會原樣複製。--first 會將某一頁移到最前面,這就是把未編號封面放回正確位置的方法。你可以對第二頁(例如標題頁)重複此操作。重新命名會鎖定順序,所以請在重新封裝之前修正,而不是之後。如果壓縮檔有 ComicInfo.xml 頁面表,移動頁面會改變它們的位置;檢查器會提醒你之後檢查前封面標記之類的項目。
在範例壓縮檔上,重新封裝後的檔案包含頁面 0001.png … 0013.png,封面在最前面,且沒有垃圾項目。剩下的唯一警告是 AVIF 檔案。檢查器無法轉換影像;請在影像編輯器中開啟該頁面,並匯出為 PNG、JPEG 或 WebP。AVIF、JPEG XL 和 HEIC 等格式不會被視為頁面。它們會原樣複製到結果中,不會被翻譯。
步驟 3:將 CBR、CB7 或 CBT 檔案轉換為 CBZ
.cbr 檔案是 RAR 壓縮檔,.cb7 是 7z,.cbt 是 tar。將 .cbr 重新命名為 .cbz 並不會轉換它。檢查器會讀取檔案的前幾個位元組。對於 RAR、7z 或 tar 壓縮檔,它會停止並告訴你擁有的是哪一種。如果它反而列印出正常的頁面報告,則該檔案其實是另一個名稱下的 ZIP 壓縮檔:將其重新命名為 .cbz,然後回到步驟 1。
若要轉換真正的 RAR、7z 或 tar 壓縮檔,請使用 7-Zip 或 The Unarchiver 將其解壓縮到資料夾中。然後將檢查器指向該資料夾:
7z x "My Comic.cbr" -o"My Comic"
python3 check_comic_archive.py "My Comic" --repack "My Comic.cbz"
重新封裝會將頁面和 ComicInfo.xml 放在新壓縮檔的最上層,即使解壓縮後的檔案位於子資料夾中也是如此。
BookTranslator 也接受 CBR、CB7 和 CBT 上傳,但它們會以固定價格走不同的處理流程,而下一節描述的逐頁流程適用於 .cbz 檔案。先轉換只需幾秒鐘的工作,還能讓你獲得步驟 2 中乾淨的頁面名稱。
步驟 4:保留 ComicInfo.xml,然後更新它
許多壓縮檔包含一個 ComicInfo.xml 檔案,其中含有標題、系列、語言和閱讀方向。其格式由 Anansi Project 維護。這裡有兩個欄位很重要:
Manga。 結構定義 允許Unknown、No、Yes和YesAndRightToLeft。最後一個是壓縮檔告訴閱讀器從右至左翻頁的方式。頁面影像無法攜帶該設定,因此如果檔案遺失,使用該設定的閱讀器也會失去閱讀方向。LanguageISO。 此欄位保存漫畫的語言代碼。翻譯後,它仍然標示來源語言,例如ja,直到你變更它。
BookTranslator 會將 ComicInfo.xml 原樣複製到翻譯後的壓縮檔中,因此從右至左的漫畫在支援該旗標的閱讀器中仍會保持從右至左。之後請在文字編輯器中開啟該檔案,並將 LanguageISO 變更為目標語言。如果檔案有 <Pages> 表,其項目會按位置指向頁面,因此只要你沒有重新排序頁面,它們仍然匹配。ImageSize 等尺寸值描述的是原始影像,將不再匹配翻譯後的 PNG 頁面。依賴這些值的媒體庫工具可能需要重新掃描檔案。
BookTranslator 如何處理 CBZ
當你上傳 .cbz 漫畫時,BookTranslator 會:
- 依自然順序列出頁面圖片(PNG、JPEG、WebP、GIF、BMP 或 TIFF),並跳過無用項目;
- 讓每一頁經過與單張圖片相同的處理流程。它會找出文字、移除原始文字,並在原位繪製譯文,一次處理幾頁;
- 建立新的
.cbz,將每個翻譯後的頁面以 PNG 格式儲存在相同位置,並保留原始壓縮檔中的所有其他檔案。
付款前有幾個細節值得了解:
- 價格取決於頁數。 每一頁都是一次完整的圖片翻譯執行,因此 CBZ 是按頁計價,而非按字計價。報價會在 upload 後、結帳前顯示。移除無用項目和零星的非頁面圖片不會改變價格,因為那些不計入頁數。
- 失敗的頁面會保留原始圖片。 如果單一頁面失敗,它會保持原文語言並留在正確位置,因此漫畫仍然完整。如果超過 30% 的頁面失敗,任務會失敗,而不是交付一本大部分未翻譯的書。
- 你只會拿到翻譯後的漫畫。 漫畫壓縮檔沒有雙語對照版本。
- 頁面會以 PNG 格式傳回。 翻譯後的壓縮檔可能明顯大於 JPEG 原始檔。
如果你還需要日文文字本身,例如來自具有直行欄位和振假名的掃描漫畫單行本,我們的日文直排文字 OCR 指南涵蓋了文字頁面的這些閱讀順序問題。
上傳前:檔案存取權限
本指南假設漫畫是你擁有且能自由開啟的檔案,例如無 DRM 的購買內容、你自己的掃描檔或你自己的作品。商店應用程式通常以受保護格式提供漫畫,只能在它們自己的閱讀器內開啟。重新命名或重新封裝這些檔案並不會改變這一點。如果你不確定,請先閱讀如何在翻譯前檢查電子書是否含有 DRM。下載檔案也不代表你有權分享或發布其譯本。
翻譯漫畫
一旦檢查器回報沒有排序問題,且每一頁都是 PNG、JPEG 或 WebP,就將 CBZ 上傳到漫畫翻譯器,並在付款前確認按頁數計價的價格。翻譯完成後,在你打算使用的閱讀器中開啟它。查看封面、第一個跨頁和最後一頁,然後修正 ComicInfo.xml 中的 LanguageISO。對於更長的專案,例如你打算出版的系列,我們的書籍翻譯完整指南涵蓋了審閱、術語和跨卷一致性。





