星期四, 11月 27, 2025

NOVEL-smart-merge:EPUB 智慧合併腳本

下載連結


此腳本負責將「舊完整 EPUB」與「差分 EPUB」智慧合併,產生結構乾淨、內容統一、CSS 樣式一致的新 EPUB。特別適用於小說長期更新、反覆合併。

設計上特別針對AozoraEpub3 下載後(AozoraEpub3 能夠選擇只下載指定的最新幾個章節),交由 AiNiee 翻譯,並且採用中日對照模式的EPUB檔案。

這個腳本處理上述檔案時作了以下幾件事:

1.將檔案排版做調整,刪除多餘空行,並且加入讓日文變淡的CSS格式,但這些效果只對AiNiee 翻譯的檔案有效。

2.讀取兩個EPUB檔案後合併成一個,目錄也重新製作。

3.如果偵測到AozoraEpub3抓取檔案時會加入的扉頁,也就是小說簡介,會自動刪除重複的檔案,(因為後續產生的差分新連載EPUB每一次都會有這部分,不刪除重複非常煩人),原則上預設保留差分檔案裡的,以確保EPUB裡面小說簡介是作者的最新內容。

4.如果偵測到AozoraEpub3抓取檔案時自動加入的紀錄頁,同樣會刪除舊的,只保留最新那個。



一、環境需求

請先安裝以下 Python 套件:

pip install ebooklib beautifulsoup4 lxml

不需要其他額外套件(例如 chardet,不需要)。

Python 版本建議:3.8 以上。


二、檔案準備方式

將以下檔案放到同一個資料夾(INPUT_DIR 指向的位置):

  1. 舊完整 EPUB
    檔名結尾必須為:

    _old.epub
  2. 差分 EPUB(通常是最新更新章節)
    檔名結尾必須為:

    _translated.epub

例如:

MyNovel_old.epub MyNovel_translated.epub

完成後,腳本會在同資料夾輸出:

MyNovel_merged.epub

三、設定參數(可在腳本前段自行修改)

腳本前方的「配置區」可調整資料夾與行為:

INPUT_DIR = r"G:\WORK\NOVEL" OUTPUT_DIR = r"G:\WORK\NOVEL" OLD_FULL_SUFFIX = "_old.epub" TRANSLATED_DIFF_SUFFIX = "_translated.epub" OUTPUT_SUFFIX = "_merged.epub"

其他常用設定:

  • AUTO_DETECT_FRONT_MATTER = True
    自動偵測扉頁。若有需要用固定檔名判斷,可設 False。

  • REMOVE_EMPTY_LINES = True
    自動清理 <p><br/></p> 空行。

  • LANG_ORDER = 'AUTO'
    雙語內容自動判斷中日順序。

  • TOC_TITLE_MODE = 'JA_ONLY'
    目錄標題預設採用日文。


四、使用流程

  1. 確認 INPUT_DIR、OUTPUT_DIR 設定正確

  2. 確認舊檔與差分檔命名符合規則

  3. 執行腳本:

    python epub-merge.PY
  4. 程式會自動:

    • 載入舊 EPUB、差分 EPUB

    • 分析章節與 TOC

    • 建立統一 CSS

    • 修正圖片路徑並重新命名圖片

    • 清理空行、處理雙語段落

    • 建立新的 spine 與 toc

    • 生成新的 EPUB

  5. 完成後可於 OUTPUT_DIR 找到:

    XXX_merged.epub

五、輸出特性

生成的 EPUB 具備以下特點:

  1. 統一 CSS(清爽、可控、支援滿版圖片)

  2. 章節重新命名與排序

    • front_xx.xhtml

    • chapter_xxxx.xhtml

    • record.xhtml(若存在)

  3. 圖片全部重新整理
    存放於 image/img_0001.jpg 等新路徑

  4. TOC 清理與去重
    保證結構不會越合併越亂

  5. 自動偵測扉頁(可關閉)

  6. 日中對照合併顯示
    依配置放置於 <span lang="zh"><span lang="ja">


六、常見問題

1. 找不到差分檔案

請確認差分 EPUB 名稱符合:

[主檔名]_translated.epub

2. EPUBCheck 錯誤是否會產生?

本工具會:

  • 移除危險或不規範的標記

  • 清理空行

  • 統一 HTML 結構

一般情況下可通過 EPUBCheck。

七、完整自動批次

腳本預設支援批次處理,只要同資料夾內有多組:

A_old.epub / A_translated.epub B_old.epub / B_translated.epub C_old.epub / C_translated.epub

一次執行就會全部合併。


 

沒有留言: