自從 Kindle 更新到 5.14.2 版本固件開始,亞馬遜為 Kindle 添加了一個給小夥伴們添堵的功能,將一些通過 USB 拷貝到 Kindle 的電子書封面/縮略圖顯示成了帶有「暫無圖片」字樣的圖片占位符。
以往僅顯示電子書標題的圖片占位符,雖然沒有真正的封面那樣美觀,但至少能讓人分辨是哪一本書,而新圖片占位符的意圖簡直是反人類,很難讓人不懷疑這是不是亞馬遜故意為之的。
▲左側為剛放入電子書時的封面效果,右側為聯網後被自動替換的封面效果
本文嘗試從根源上對傳輸到 Kindle 的電子書封面被替換成「暫無圖片」的問題進行分析,並給出了兩種解決方案。你可以根據問題的分析手動進行修復,也可以通過書伴提供軟件自動修復。
一、問題分析
Kindle 電子書有多種類型,它們被標記在電子書文件的 EXTH 信息頭中,即類型為 501 名為 CDE Type 的記錄。該記錄常見的值有 PDOC(代表個人文檔)、EBOK(代表電子書)及 EBSP(代表電子書樣章)。你可以使用工具(如 Mobi Metadata Editor)查看電子書文件 EXTH 信息頭,通過這個記錄來確認某本電子書是屬於哪種類型。
通常,我們通過 KindleGen 轉換成 MOBI 格式的電子書文件,以及郵箱推送到 Kindle 個人文檔服務的文件會被標記為 PDOC,從 Kindle 電子書商店購買的電子書、或通過 Calibre 轉換的 AZW3 電子書格式會被標記為 EBOK,而向 Kindle 發送的電子書樣章會被標記為 EBSP。
對於不同的電子書類型,Kindle 可能會採用不同的處理機制,比如本文討論的封面被替換成「暫無圖片」圖片占位符的問題,就是針對標記為 EBOK 的電子書文件的。當這種類型的電子書放入 Kindle 設備中,一旦聯網,Kindle 在確認是 EBOK 類型的電子書文件後,就會嘗試讀取另一個類型為 113(或 504)名為 ASIN[2] 的記錄,一旦發該記錄的值與亞馬遜商品的唯一識別碼不匹配,該電子書的封面就會被替換成帶有「暫無圖片」字樣的圖片占位符。
原因找到了,解決方案出來了。一種是被動修復,先讓亞馬遜替換封面,然後再修復這些被替換的封面。還有一種是主動防禦,可以直接刪掉電子書的 EBOK 記錄,讓 Kindle 忽略封面檢查,使其顯示帶電子書標題的圖片占位符,也可以將 ASIN 更改成任一真實存在於 Kindle 商店的 ASIN,以達到欺騙 Kindle 使其抓取與該 ASIN 相對應電子書的封面圖片的目的。
二、被動修復
這種解決方式是等待 Kindle 將拷貝進去的電子書封面全部替換成「暫無圖片」後,再通過找到這些圖片所存放的位置,將其還原成電子書原有的封面圖片。
1、手動修復被替換的封面圖片
當 Kindle 成功為電子書從亞馬遜服務器抓取封面圖片後,會存放到 Kindle 根目錄下的 system/thumbnails 文件夾中,封面圖片有着類似下面這樣的文件名:
thumbnail_B00A72WGE4_EBOK_portrait.jpg
從中可以看出,該文件名除了 .jpg 擴展名外,是由三個下劃線 _ 連起來的四個部分,分別是 thumbnail、B00A72WGE4、EBOK 以及 portrait,這四部分除了 ASIN 外都是相同的,Kindle 也是通過這個 ASIN 為相應的電子書顯示該封面的。如果 Kindle 沒有在亞馬遜服務器找到這個 ASIN,就會將此封面圖片文件替換成如下所示的封面圖片:
由於 Kindle 只會為新拷貝的電子書從亞馬遜服務器拉取一次封面圖片,因此你可以在電子書的封面全都變成「暫無圖片」後,再重新恢復與該電子書的 ASIN 相對應的封面圖片。
具體方法為,先用 Mobi Metadata Editor 通過檢查 113(或 504)記錄類型,得到電子書的 ASIN,然後在 Kindle 根目錄的 system/thumbnails 文件夾中找到含有此 ASIN 的圖片文件,接着用 Calibre 等工具將電子書的封面提取出來,最後將提取出來的封面圖片文件重命名成那個帶 ASIN 圖片的文件名,並對其進行替換,就可以恢復此電子書的封面了。
2、自動修復被替換的封面圖片
書伴為小夥伴們編寫了一個小軟件,將上面提到的封面還原過程自動化。該軟件會在封面圖片存放路徑檢查小於 2KB 的封面圖片,然後從與其對應的電子書中提取封面圖片進行還原。運行此軟件需要為你的操作系統安裝版本大於等於 3.5 的 Python,已安裝的可以直接使用。
Fix Kindle Ebook Cover 下載鏈接:https://fere.link/pevg9q
Python 下載鏈接:https://fere.link/hbqqpi
此軟件的提供了界面版和命令行版。界面版使用方法很簡單,將 Kindle 設備通過 USB 數據線連到電腦,直至出現 Kindle 磁盤,雙擊 fix_kindle_ebook_cover_gui.pyw 打開軟件,點擊【Choose the Kindle root directory】按鈕選擇 Kindle 根目錄(如果在出現磁盤後啟動軟件,會自動檢測 Kindle 根目錄),然後點擊【Fix Cover】按鈕就可以開始自動修復了。
使用命令行版本,將 Kindle 設備通過 USB 數據線連到電腦,直至出現 Kindle 磁盤,在「命令提示符」(或「終端」)上通過運行如下所示的三個命令之一即可。該腳本可指定零到多個 Kindle 根目錄,未指定根目錄會自動檢測。
除非受損封面圖片沒有對應的電子書,或者電子書自身不含封面圖片,一般都能成功修復。
▲ 右側為聯網後被自動替換的封面效果,左側為使用 Fix Kindle Ebook Cover 修復後的封面效果
三、主動防禦
如果你感覺上面那種封面修複方式過於被動,也可以採用下面介紹的兩種主動修複方式。主要是通過修改電子書文件 EXTH 信息頭中 501、113、504 這三個記錄類型來實現。
這裡要用到名為 Mobi Metadata Editor 的小工具,其具體用法可參考《如何用 Mobi Metadata Editor 修改 Kindle 電子書元數據》(鏈接:https://fere.link/q3cwf1)這篇文章。注意,該工具無法選擇擴展名為 .azw3 的電子書文件,你可以先將其擴展名更改成 .mobi,修改後再改回 .azw3 即可。
1、為電子書文件指定真實 ASIN
如果你想要讓 Kindle 為電子書獲取正確的封面圖片,需要保持 501 類型記錄的值為 EBOK 不變,僅更改電子書文件的 ASIN 記錄,將其值更改成真實存在任意區域亞馬遜 Kindle 電子書商店的電子書的 ASIN,這樣 Kindle 就會將商店中電子書的封面拉取下來給本地的電子書使用。
中亞 Kindle 電子書商店:https://www.amazon.cn/kindlestore
美亞 Kindle 電子書商店:https://www.amazon.com/kindlestore
注意,電子書文件的 ASIN 記錄可能同時存在於 113和504 這兩個記錄類型中,兩者至少保留一個才能生效,如果對兩者同時存在,Kindle 會優先使用 504 的值。
2、禁止 Kindle 檢查電子書封面
如果你不在意電子書是否顯示封面圖片,可以接受僅帶圖書標題的圖片占位符,則可以直接刪掉 501 記錄類型,或其值從 EBOK 改為 PDOC,這樣 Kindle 就不會為該電子書檢查封面圖片了。
--------- · END · ---------
【推廣】書摘服務:memo.bookfere.com

