格式、文件与 DRM

在 Android 上播放 EPUB3 Media Overlays

Media Overlay 把 EPUB3 的文本与真人录音和 SMIL 时间数据配对,让阅读应用能高亮正在朗读的段落。Lectern 会自动检测:打开书籍,点一下「收听」,只要这个版本包含可用的 Media Overlay,Lectern 就会播放录制的音频,而不是生成语音。

简短版本:Media Overlay 是一份通过 SMIL 时间文件与文本同步的真人录音。它不是文字转语音,只有在出版社或 Storyteller 这类工具制作过它时才会存在。Lectern 会自动读取 SMIL 数据,一旦发现它,就会播放录音并高亮当前文本,而不是生成语音。

Media Overlay 到底是什么

EPUB3 Media Overlays 是打包在 EPUB 内部的一个 SMIL 文件。每个 <par> 元素都把书籍 XHTML 里的一个片段(一个 text 引用,通常是出版社标了 id 的一段或一句话)与一段音频剪辑(带 clipBegin 和 clipEnd 的 audio 引用)配对。播放这段剪辑,就能准确知道它对应哪个文字片段。把几百个这样的配对叠起来,就得到一整本书,阅读应用可以在专业朗读者读书的同时,逐句或逐段把它高亮出来。

它完全是可选的。EPUB3 规范并不要求这个功能,而制作它需要真实的录音棚时间,或者对现成有声书做一遍强制对齐,所以大多数 EPUB3 文件,包括最近发布的文件,都没有它。

它与 Lectern 的文字转语音有何不同

Lectern 本身就会用自带的设备本地声音(Piper 与 Kokoro 神经语音,加上系统语音)高亮正在朗读的句子。这方面详见同步高亮如何让阅读变得更好。Media Overlay 是实现同一个想法的另一种来源,两者在同一次播放中不能互换。

 Media Overlay 朗读Lectern 文字转语音
声音出版社或朗读者的真实录音合成语音(系统、Piper 或 Kokoro)
是否需要专门制作的版本需要,EPUB 必须内嵌音频和 SMIL不需要,对 Lectern 能读的任何书都有效
声音或语言选择固定为录制时用的那一个可任选已下载的声音和语言
高亮粒度SMIL 引用的片段大小,通常是一段或一句,不会再细分段落内逐句
语速控制有,与文字转语音用同一个语速设置有
能否离线能,只要文件已在设备上能,完全在设备本地

Lectern 如何播放 Media Overlay

没有单独的模式需要打开。启动文字转语音或关联有声书的同一个「收听」控件,会先检查这本书:如果它内嵌了 Media Overlays,Lectern 就会播放录音,而不是生成语音。

  1. 打开书籍,点一下「收听」。Lectern 在导入和扫描时就会读取书籍内嵌的 SMIL 数据,所以它早就知道这本书是否内置了朗读。
  2. 内置朗读开始播放,当前文本会亮起来。阅读器设置面板的音频标签页里,会在「收听方式」下把它列为「内置朗读」,与文字转语音、任何已关联的有声书文件并列,方便你看清当前用的是哪个来源。
  3. 点一句话就能跳到那里。点文本会让录音定位到对应的剪辑,就像点文本会让 TTS 播放定位一样。
  4. 锁屏、通知栏和蓝牙控制照常可用。Media Overlay 播放走的是与 Lectern 任何朗读相同的前台媒体会话:可以在锁屏上播放和暂停,用耳机按钮控制,通知栏会显示书名。
  5. 播放期间屏幕保持常亮,前提是你开启了这项阅读设置,与文字转语音播放时完全一样。

因为声音是固定在录音里的,平时用来选声音和语言的控件在这里不适用。如果你想听合成语音,或者某一章缺少录音,音频标签页里有一个明确的「改用文字转语音」开关,也有反向的「使用随读旁白」开关可以切回来。

某一章或整本书没有 Media Overlay 时

朗读版不保证每一章都配有音频,前言或附录部分有时没有录制。如果你在没有朗读的章节里点了播放,Lectern 会显示一条简短的「这里没有旁白」提示,并主动提出改用文字转语音朗读这部分,不会丢失你的阅读位置。

对完全没有 Media Overlays 的书,你不会注意到任何区别:「收听」控件只会直接启动文字转语音,和书库里其他任何一本书一样。

固定版式的 EPUB3 书籍

固定版式的 EPUB3(由整页图像而非可重排文本构成)通常会在 Lectern 的漫画查看器里打开,而不是常规阅读器。带 Media Overlays 的书籍是例外:Lectern 会让它们留在常规阅读器中,使配音绘本保留内置的朗读和高亮功能。代价是原始的页面设计,因为文字会被重排,而不是以固定页面显示。

把 Storyteller 生成的 EPUB3 导入 Lectern

Storyteller 是一个自建服务器,能把无 DRM 的电子书与对应的有声书对齐,并导出一个带 Media Overlays 的标准 EPUB3。这是为你已拥有的书获得真正朗读版的较实用方式之一。如果还在考虑要不要搭建它,可参考完整的Calibre-Web 与 Storyteller 对比。

  1. 搭建 Storyteller。自建 OPDS 指南里有 Docker Compose 的搭建步骤。加入一本无 DRM 电子书和对应的有声书,让对齐处理完成;这一步可能需要一些时间,因为它是整条流程里计算量最大的部分。
  2. 把 Storyteller 添加为 Lectern 里的一个目录。在空的或已有的书库中,打开添加图书的流程,在自建目录里选择 Storyteller 选项,而不是通用的 OPDS 订阅源。输入服务器地址以及你的 Storyteller 用户名和密码,然后连接。
  3. 留意耳机徽标。在目录里,书籍封面上的小耳机图标表示 Lectern 识别到这本书有可用的随读版本。没有徽标的书未必就没有朗读,因为订阅源必须以 Lectern 能可靠识别的方式来声明这一点;如果不确定,下载后打开书籍确认即可。
  4. 下载这本书。它会像其他任何导入一样,加入你正常的离线书库。此后 Lectern 不再需要连接 Storyteller 服务器,音频和 SMIL 时间数据都随 EPUB 文件本身一起保存。

如果你已经从别处获得了带 Media Overlays 的 EPUB3 文件,用文件管理器复制过来,或者通过文件夹同步过来,按平常方式导入即可。Lectern 会在导入和扫描时解析内嵌的 SMIL,不需要另外打开什么设置。

故障排查

  • 「收听」只提供合成语音,但你原本期待朗读版。这个文件可能是一份普通的 EPUB3,完全没有 Media Overlays;这项功能是可选的,多数书都没有。如果你确信文件确实内嵌了音频和 SMIL,只是 Lectern 没识别出来,只需打开这本书一次:Lectern 会在打开时重新读取书籍内容并更新朗读标记。
  • 某一章没有声音。有些朗读版本来就没有从头到尾全部录制。对那一部分使用 Lectern 提供的文字转语音后备方案,等朗读恢复后再继续。
  • 高亮一跳就是一整段,而不是一句话。这是正常现象。Lectern 会按出版社 SMIL 所指的片段来高亮,不会比录音允许的范围再细分。
  • 你想换一个朗读者或另一种语言。内置朗读播放的是固定录音,激活时无法更改。在音频标签页里切换到「改用文字转语音」,即可选用任意已下载的声音。
  • 配音绘本打开后显示为重排文本,而不是固定页面。这是刻意为之:带 Media Overlays 的固定版式 EPUB3 会留在常规阅读器中,让朗读功能继续可用。
  • Storyteller 目录里的某个条目下载不了,或下载后没有朗读。对齐处理可能还在服务器上运行;Lectern 只下载 EPUB 条目,并且会刻意忽略纯音频条目,而不是导入一个它没法作为书籍打开的东西。

常见问题

播放 Media Overlay 需要联网吗?

不需要。只要带内嵌音频的 EPUB3 文件已经在你设备上,播放就完全离线,和 Lectern 的其他部分一样。

可以调整 Media Overlay 的朗读语速吗?

可以。它使用和文字转语音相同的播放速度设置,放慢或加快录音的方式完全一样。

Storyteller 是获得这种书的唯一方式吗?

不是,它只是从你已拥有的电子书和有声书制作出这种版本的一种实用自建方式。任何内嵌了正确计时 Media Overlays 的兼容 EPUB3,都能在 Lectern 里这样播放;来源特殊的出版社文件,建议先测试再依赖它。

关联的有声书文件能提供和 Media Overlay 一样的高亮吗?

不能。单纯关联的有声书只作为音频播放,没有随播高亮。只有 EPUB3 Media Overlays 才能在播放录音的同时驱动同步高亮。

跟着真人朗读一起读

只要书里有 EPUB3 Media Overlays,Lectern 就会自动离线播放,锁屏控制与其他任何朗读一样。

前往下载Google Play