Kindle 书搬家到 EPUB:MOBI6 和 KF8 是两种东西、DRM 为什么解不了、目录插图怎么才不掉

· 约 7 分钟 📕 MOBI/AZW3 转 EPUB

亚马逊中国电子书店关停之后,很多人硬盘里躺着一堆 .azw3.mobi,换了阅读器才发现打不开。这些文件不是坏了——它们是亚马逊的私有格式,除了 Kindle 生态之外几乎没人认。

搬到 EPUB 是唯一的出路。但”转格式”这件事说起来一句话,实际做起来会遇到三类问题:有的书根本转不了(DRM)、有的书转完丢东西(目录、插图、跳转)、有的书转完不对劲(体积暴涨、阅读器不显示书名)。这篇把这三类问题各自的成因讲清楚。

三种扩展名,其实是三种东西

.mobi.azw3.azw.prc 长得像一家人,外层确实也是同一种 PDB 容器(Palm Database,掌上电脑时代留下的遗产)。但容器里装的东西可以完全不同:

扩展名内部格式正文组织方式排版能力
.prcMOBI6一整块 HTML极简,<font> 级别
.mobiMOBI6 或合体包一整块 HTML(+ 可能另有一份 KF8)取决于内部是哪份
.azw3KF8骨架表 + 碎片表,需重新拼装真正的 CSS + 内嵌字体
.azwMOBI6 或 KF8不定商店下载扩展名,多数带 DRM

MOBI6 是十几年前的格式:正文是一整块 HTML,章节跳转靠 filepos= 这种字节偏移——“跳到第 128394 个字节处”。这套设计在纯文本时代够用,但它意味着任何插入或删除都会让所有偏移失效,也没法表达嵌套的样式。

KF8(Kindle Format 8,即 .azw3)是完全重做的:正文被切成**骨架(skeleton)碎片(fragment)**两张表,骨架是文档外壳,碎片按记录的插入位置填进去,拼装完才是完整的 XHTML。代价是解析复杂,收益是真正支持 CSS 排版、内嵌字体、图文混排。

合体包是过渡期的产物:一个 .mobi 文件里前半段是 MOBI6、后半段是 KF8,老设备读前半段,新设备读后半段。文件头里有一条 KF8 boundary 记录指明分界点。这类文件转换时应该取 KF8 那一份——排版信息完整得多。

DRM:为什么浏览器端一定解不了

这是转换失败最常见的原因,也是最容易被误解的一条。

带 DRM 的文件在 EXTH 头里有加密标记(encryption type 为 1 或 2)。关键在于解密密钥根本不在文件里——它绑定在你的亚马逊账号和具体设备的序列号上,由 Kindle 客户端在本地保管。浏览器拿不到这个密钥,任何声称能在网页里解 DRM 的工具,本质上是在破解版权保护。

判断手里的书带不带 DRM,看来源比看文件更快:

来源DRM 情况
Kindle 商店购买 → App / 设备下载✅ 基本都有
Kindle 商店购买 → 网页版”下载并通过 USB 传输”✅ 有(绑定设备序列号)
自己用 calibre 从 EPUB 转出的 MOBI❌ 无
Project Gutenberg 等公版书站❌ 无
别人用 kindlegen / KindlePreviewer 打包的❌ 无
通过 Send to Kindle 发给自己的个人文档❌ 无

工具在你拖入文件的瞬间就读头判断,有 DRM 立刻告诉你,不会转到一半吐出一本乱码书。

转换过程实际做了什么

理解这六步,出问题时就知道该怀疑哪一环:

1. 体检     读 PDB 头 + EXTH → 判断格式 / 压缩方式 / DRM / 文件完整性
2. 解压正文  无压缩 / PalmDOC(LZ77 变体) / HUFF-CDIC 三选一
3. 拆文档    MOBI6 按分页标记切段;KF8 按骨架表 + 碎片表重新拼装
4. 提资源    图片、封面、CSS、内嵌字体逐个提取成独立文件
5. 重建链接  filepos 字节偏移 / kindle:pos: → EPUB 的 文件名#锚点
6. 打包      清洗 XHTML → 生成 opf / ncx / nav → ZIP 成 EPUB 3

第 5 步是最容易被低估的一环。MOBI 的目录跳转和脚注回跳都是字节偏移,而 EPUB 里正文被切成了多个 XHTML 文件——必须建立一张**“原字节位置 → 哪个文件的哪个锚点”**的映射表,把所有 filepos 翻译过去。这张表没建对,转出来的书目录能显示但点了不跳,或者脚注点进去跳到隔壁章节。

第 6 步的”清洗”是为了合规:MOBI 里满是 <font>filepos=recindex= 这类在 EPUB 里非法的东西。留着它们,宽松的阅读器能读,但 EPUBCheck 会报一堆错,苹果 Books 这类严格的实现可能直接拒绝导入。

什么会保留,什么必然丢

内容转换结果说明
正文文字✅ 完整三种压缩方式都能解
章节目录✅ 保留优先用 NCX 重建,无 NCX 时按标题生成
插图 / 封面✅ 保留按原样提取,不二次压缩
CSS 排版✅ KF8 保留MOBI6 本来就几乎没有
内嵌字体✅ 可选保留建议中文书丢弃,见下节
内部跳转 / 脚注✅ 重建filepos → 锚点映射
书名 / 作者⚠️ 取决于原文件EXTH 里没写就是没有
生词提示(Vocabulary Builder)❌ 丢失Kindle 私有,EPUB 无对应物
X-Ray❌ 丢失同上
阅读位置 / 笔记同步❌ 丢失存在亚马逊账号里,不在文件中
页码(Real Page Numbers)❌ 丢失依赖亚马逊的印刷版对照数据

结论:内容层面的东西基本都能带走,丢的全是依附于亚马逊服务的功能性数据——这部分不是转换工具的能力问题,是它们本来就不在文件里。

内嵌字体:中文书的体积大头

一本 300 KB 正文的中文小说,转出来 18 MB,多半就是内嵌字体干的。

中文字体一套动辄十几到几十 MB(常用字就有三千多个,加上标点和异体字,字形数据量远超拉丁字体)。制作电子书的人为了保证在任何设备上字形一致,习惯把整套字体塞进去。

绝大多数情况下应该丢掉

  • 手机、平板、电纸书都自带中文字体,且多数阅读器允许用户自选字体,内嵌字体经常被直接忽略
  • 丢掉之后体积能砍掉一多半,同步到设备、备份到网盘都更省事

只有这几种情况值得保留:古籍中的异体字、需要注音排版的教材、字形本身是内容一部分的书法类书籍。

一个技术细节:丢弃字体时必须同时删掉 CSS 里的 @font-face 规则。只删文件不删规则,EPUB 里就会有一条指向不存在文件的引用——宽松的阅读器忽略它,严格的会直接报错拒绝打开。

目录不对的三种表现和对策

表现成因对策
一条目录都没有原文件无 NCX,正文标题也不规整转 TXT 后用 TXT 转 EPUB 按正则切章
目录条数远少于实际章节原书就只做了卷级目录同上,按正文标题重切
目录能显示但点了不跳filepos 映射未正确重建换转换路径重试;也可能原文件本身偏移就是坏的
目录层级全平了MOBI6 的 NCX 本来就只有一层无解,MOBI6 不表达多级层次

顺带说明:MOBI6 的目录天然是扁平的。想要”卷 - 章 - 节”三级目录,只有 KF8 和 EPUB 支持。一本老 .mobi 转出来目录没层次,不是转换缩水了。

转完之后的三件收尾

1. 补元数据。 MOBI 里书名作者常常是空的或者写着文件名。用 EPUB 元数据编辑 补上书名、作者、系列名、系列序号——尤其是系列信息,多数阅读器靠它把同一套书排在一起。

2. 验收三项。 导入目标阅读器后,点一次目录、翻一次插图、点一次脚注。这三项通过基本就没问题了。

3. 需要纯文本时另转一次。 想做全文检索、灌进 AI 工具做摘要、或者在极简阅读器里看,用 EPUB 转 TXT 从刚转好的 EPUB 再转一次,比从 MOBI 直接转文本更干净——因为 EPUB 的文档结构已经理顺了。相关坑见 EPUB 转 TXT:spine 顺序、标题与编码

常见报错对照

提示真实含义怎么办
这本书有 DRM 保护文件头有加密标记换无 DRM 的来源,浏览器端无解
文件不完整记录表偏移超出文件长度重新完整下载一次
不是有效的 MOBI 文件PDB 头的 type/creator 不是 BOOKMOBI确认扩展名没被改过(可能实际是 EPUB 或 PDF)
标签页崩溃 / 内存不足峰值内存约为文件体积的三到四倍换电脑转,或一本一本转、转完刷新页面

总结

  • .mobi.azw3 不是同一种格式——前者是整块 HTML 加字节偏移,后者是骨架加碎片加 CSS,排版能力差一个时代
  • DRM 在浏览器端一定解不了,密钥不在文件里;看来源比看文件更快判断
  • 内容能完整带走,丢的是生词提示、X-Ray、阅读进度这些依附亚马逊服务的东西
  • 中文书优先丢弃内嵌字体,体积经常能砍掉一多半,阅读体验无差别
  • 转完必做三件事:查目录、补元数据、在目标阅读器上验收跳转和插图

搬家一次,之后的书就都在开放格式里了——这才是这次转换真正的价值。

❓ 常见问题

和 calibre 转出来的有什么区别?该用哪个?

结果高度接近,差别在使用成本和场景。calibre 是桌面软件,功能面大得多——书库管理、批量元数据、正则批处理、发送到设备,转换引擎也久经考验。本工具的定位是不装软件、打开就转:临时一两本书、公司电脑装不了软件、在别人机器上、或者手机上想马上转一本,浏览器本地跑完就走。技术路线是同一套:都要解 PDB 容器、拆正文、提资源、重建目录。真要长期管理几百本书库,装 calibre 更合适;只是要把手里几本书换个格式,没必要为此装一个几百 MB 的软件。

转完在 Apple Books 里显示“未命名”或者没有封面,怎么办?

多半是原文件的元数据本来就缺,不是转换掉了。MOBI 的书名、作者存在 EXTH 记录里,很多资源站流出的文件这块是空的或者写着文件名;封面同理——EXTH 里有一条 coverOffset 指向图片记录,缺这条记录时工具只能退而用正文第一张图,猜错就没有封面。修法:转出 EPUB 之后用 EPUB 元数据编辑 补书名、作者、系列名和封面,再导入阅读器。另外 Apple Books 有缓存陷阱:同一本书改完元数据重新导入,书架上可能还显示旧信息,需要先把旧的删干净再导。详见 改完元数据阅读器不认怎么办

转出来的 EPUB 比原文件大了不少,正常吗?

正常,主要是压缩方式变了。MOBI 正文用 PalmDOC 或 HUFF/CDIC 压缩,图片按原样存放;EPUB 是一个 ZIP 包,正文 XHTML 用 Deflate 压缩——纯文字部分通常还会更小,但KF8 的骨架加碎片结构拆开重组之后会产生更多独立文件,每个文件都有 ZIP 条目头开销,加上重建的 content.opftoc.ncxnav.xhtml 三份索引,小说类的书体积涨 5%–20% 很常见。图片多的书基本持平(图片本来就是压好的,两边都不会二次压缩)。真的嫌大就勾上“丢弃内嵌字体”,中文书这一项经常能砍掉一多半体积。

一个 .mobi 里同时有 MOBI6 和 KF8,为什么默认选 KF8?什么时候该要 MOBI6?

KF8 的排版信息完整得多,所以默认选它。MOBI6 只认一小撮内联样式,居中、缩进、字号这些全靠 <font><blockquote> 硬凑;KF8 支持真正的 CSS——多级标题层次、表格、代码块缩进、图文混排都能保住。MOBI6 那一份唯一的优势是简单:结构扁平、不会因为骨架拼装出错而串行。所以如果你转出来的 KF8 版本发现章节顺序错乱或者正文有重复段落(极少见,通常是原文件打包时就有问题),可以找一个只保留 MOBI6 的路径重转一次对比。日常阅读的书,KF8 是更好的选择。

手里有几十本要转,浏览器扛得住吗?

能批量,但要注意内存节奏。转换过程的峰值内存大约是单个文件体积的三到四倍——解压后的正文、提取出来的图片、重新打包时的 ZIP 缓冲同时存在。几十本小说(每本几 MB)没有压力;带大量彩色插图的漫画或画册,超过 50MB 的建议一本一本转,转完一本刷新一次页面释放内存,尤其是在手机上。另外一个实务建议:先挑三五本试转,确认目录和插图效果符合预期,再动整个书库——避免一口气转完才发现某个开关没勾对,要全部重来。

提示“文件不完整”,但这本书在 Kindle 里能正常读,是误判吗?

这两件事不矛盾。工具校验的是文件内部记录表指向的偏移量有没有超出文件实际长度。Kindle 设备读书时是按需加载的,前半本完好就能翻前半本,读到断掉的位置才出问题——很多人根本没读到那里,所以以为文件是好的。最常见的成因是网盘同步中断、下载没跑完、或者从别的设备拷贝时中途断连。处理办法只有一个:重新完整获取一次文件。工具选择在这里拦下来,是因为硬转的结果是一本内容少一半、目录还残缺的书,比直接报错更难发现。

📕 打开 MOBI/AZW3 转 EPUB Kindle 电子书转 EPUB·保留目录/插图/封面/排版·MOBI6 与 KF8 双格式·DRM 自动识别·多本批量·本地处理

🔗 相关阅读

全部教程 →