Foliate:功能全面、开源且支持 edge-tts 的Linux电子书阅读器

    • #21904

      Foliate 是一款开源的电子书阅读器,支持 Linux 桌面环境。它提供了一个现代化且易于使用的界面,支持多种电子书格式。Foliate 是一个功能全面、用户友好的电子书阅读器,适合所有类型的读者,无论是休闲阅读还是学术研究。

      作为专为 GNOME 桌面环境优化的阅读应用,Foliate 致力于提供”无干扰”的沉浸式阅读体验。它采用了现代化的 GTK 4 技术栈(自 3.0 版本起),拥有自研的电子书解析器和渲染引擎,这意味着更快的加载速度、更流畅的翻页体验,以及对复杂排版格式的更好支持。

      📌 项目信息:


      一、🔧 Foliate 的功能介绍

      具体而言,Foliate 的独特功能包括:

      📖 格式支持

      支持多种格式:Foliate 支持 EPUB、Mobipocket(MOBI)、Kindle(AZW/AZW3)、FictionBook(FB2)、漫画档案(CBZ)以及 PDF 等多种格式。

      💡 说明:EPUB 是目前开放标准中最主流的电子书格式,而 CBZ 支持使得 Foliate 也可以作为漫画阅读器使用。PDF 支持是 3.0 版本后新增的重要功能。

      👀 阅读模式

      双页浏览模式:用户可以在双页浏览模式下阅读电子书,并提供滚动查看模式。

      Foliate 会根据屏幕尺寸智能切换单页或双页视图。具体包含:

      • 分页模式(Paginated):模拟传统纸质书的翻页体验
      • 滚动模式(Scrolled):连续滚动浏览,适合长时间阅读
      • 用户可以根据个人习惯随时在两种模式间切换

      🎨 自定义阅读体验

      自定义阅读体验:能够自定义字体、行距、边距和亮度。默认主题包括浅色、棕褐色、深色等多种模式。

      高级排版功能包括:

      • 自动断字(Auto-hyphenation):提升英文等西文排版的美观度
      • 弹出式脚注(Popup Footnotes):无需跳转即可查看注释
      • 媒体叠加层(Media Overlays):支持带有嵌入音频的电子书
      • 从右到左(RTL)文本支持:适配阿拉伯语、希伯来语等语言
      • 竖排文本支持:适配日文、中文等东亚语言的传统排版
      • 固定布局书籍支持:保持原版设计排版的电子书

      📚 图书馆管理

      图书馆视图:显示最近的书籍和阅读进度。

      3.0 版本中,图书馆功能得到了显著增强:

      • 阅读进度可视化:直观显示每本书的阅读进度百分比
      • 最近阅读排序:快速找到上次阅读的书籍
      • OPDS 目录支持:可以浏览和下载来自在线 OPDS 书库的电子书(如 Project Gutenberg、Standard Ebooks 等)

      ✏️ 批注系统

      书签和注释:用户可以添加书签、高亮文本和添加注释,并能够导出数据或同步它们。

      批注数据存储的一大亮点:Foliate 将阅读进度、书签和批注保存为纯 JSON 文件格式。这意味着:

      • 数据完全开放透明,你可以用任何文本编辑器查看和编辑
      • 易于备份和同步,可以配合 Syncthing、Nextcloud 等工具实现跨设备同步
      • 不依赖私有格式,避免供应商锁定

      🔍 查找与参考工具

      查找功能:能够在书中查找文本。

      字典和翻译:使用维基词典和维基百科查询单词,以及使用谷歌翻译翻译文字。

      这些内置的参考工具大大提升了学术阅读和外语学习的效率。选中文本后,可以一键调用这些服务进行查询,无需离开阅读界面。

      🔊 文字转语音支持(TTS)

      文字转语音支持(TTS):使用 eSpeak NG 和 Festival 等支持文字转语音。

      更准确地说,Foliate 的 TTS 功能是通过 Speech Dispatcher 实现的。Speech Dispatcher 是 Linux 下的语音合成调度系统,它可以对接多种 TTS 后端:

      • eSpeak NG:开源、轻量,支持多语言,但音质相对机械
      • Festival:经典的语音合成系统
      • Piper TTS:新一代开源神经网络 TTS,音质接近商业服务
      • 自定义脚本:这正是本课程后续要介绍的 edge-tts 集成方案

      📌 TTS 入口位置:将鼠标悬停在页面底部区域可调出导航栏,点击耳机图标即可启用朗读功能。也可以选中文本后从右键菜单选择「从此处开始朗读」。


      🌟 GTK 4 带来的性能提升(3.0 版本亮点)

      2023 年 11 月发布的 Foliate 3.0 是一次完全的重写,从 GTK 3 迁移到了 GTK 4。这次重大升级带来了:

      • 更快的性能:翻页更流畅、大型书籍加载更快、界面响应更灵敏
      • 重新设计的标题栏:更紧凑、更智能的布局,搜索、目录、设置等常用功能触手可及
      • 自研渲染引擎:不再依赖 WebKitGTK 的某些限制,对电子书格式的支持更加原生
      • 改进的沙箱兼容性:更好地支持 Flatpak 和 Snap 等容器化分发方式

      🤝 社区与开发

      作为一个开源项目,Foliate 鼓励社区参与,用户可以贡献代码、报告问题或提出新功能建议。Foliate 的开发活跃,定期发布更新和改进,确保用户获得最佳的阅读体验。

      你可以通过以下方式参与:

      • 提交 Issue:在 GitHub 上报告 Bug 或提出功能建议
      • 贡献翻译:帮助将 Foliate 翻译成更多语言
      • 代码贡献:Fork 仓库并提交 Pull Request

      二、💻 如何安装 Foliate

      Foliate 提供多种安装方式,以适应不同用户的需求和偏好:

      方式一:APT 包管理器(Debian/Ubuntu 系统)

      以 Debian/Ubuntu 系统为例,只需要输入如下命令行即可:

      sudo apt install foliate

      ⚠️ 注意:通过系统软件源安装的版本可能不是最新版。例如,Ubuntu 22.04 LTS 的软件源中可能仍是 2.x 版本。如果你需要 3.0+ 版本的新功能,建议使用下述的 Flatpak 或 Snap 方式安装。

      方式二:Flatpak(推荐)

      Flatpak 是 Foliate 官方推荐的安装方式,能确保获得最新版本:

      # 首先确保系统已安装 Flatpak
      sudo apt install flatpak
      
      # 添加 Flathub 仓库(如果尚未添加)
      flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
      
      # 安装 Foliate
      flatpak install flathub com.github.johnfactotum.Foliate -y

      📌 沙箱权限提示:Flatpak 应用运行在沙箱环境中,可能无法直接访问本地电子书文件。你可能需要使用 Flatseal 工具来授予文件访问权限。

      方式三:Snap

      sudo snap install foliate

      Snap 版本同样运行在沙箱中,安装简单,适合 Ubuntu 用户。

      方式四:PPA(Ubuntu 专用,获取较新版本)

      sudo add-apt-repository ppa:apandada1/foliate
      sudo apt update
      sudo apt install foliate

      通过 PPA 可以在 Ubuntu 系统上获得比官方软件源更新的版本。

      方式五:其他发行版

      Foliate 已被纳入多个主流发行版的官方软件源:

      发行版安装命令
      Fedorasudo dnf install foliate
      Arch Linuxsudo pacman -S foliate
      openSUSEsudo zypper install foliate

      三、🎙️ 什么是 edge-tts

      微软 Edge 浏览器的 edge-tts 是个非常棒的学英语工具,可以在日常阅读英文网页时使用。配合沉浸式翻译,非常有助于高效获取各类日常信息。当然,美中不足的是,edge-tts 还不支持 Xiaoxiao-Multilingual 这类大模型训练的超自然声音。后者已经逼近完美主播了。同时,Edge 浏览器的默认设置非常不隐私友好。

      💡 Edge 浏览器内置的免费 TTS 和开源 edge-tts 模块暂不支持完整的 SSML 自定义功能(自 5.0.0 版本起,由于微软的限制,自定义 SSML 支持已被移除)。

      与此同时,目前也有基于 edge-tts 的开源 Python 模块,允许用户在不安装微软 Edge 浏览器或使用微软 API 的情况下,通过 Python 代码或提供的命令行工具,使用微软 Edge 浏览器的在线文本转语音服务。这极大地提升了使用的便捷性和隐私性,也便于同其他工具相整合。

      📊 edge-tts 技术概览

      根据 PyPI 上的信息,截至 2025 年 12 月,edge-tts 的最新版本为 7.2.7。主要特性包括:

      特性说明
      语言支持74 种语言,322 种高质量神经网络语音
      输出格式MP3、WAV 等常见音频格式
      字幕生成支持同步生成 SRT、VTT 字幕文件
      语音调节可调整语速(–rate)、音量(–volume)、音调(–pitch)
      异步架构底层采用异步设计,适合批量处理和 Web 服务集成
      Python 版本要求 Python 3.7 或更高版本

      🌐 相关资源:


      🎤 常用语音推荐

      以下是一些广受好评的 edge-tts 语音选项:

      中文语音

      语音名称地区特点
      zh-CN-XiaoxiaoNeural中国大陆女声,温暖亲切,适合新闻和有声书
      zh-CN-YunxiNeural中国大陆男声,成熟稳重
      zh-CN-YunyangNeural中国大陆男声,新闻播音风格
      zh-TW-HsiaoChenNeural台湾女声,适合台湾普通话内容
      zh-TW-HsiaoYuNeural台湾女声
      zh-HK-HiuGaaiNeural香港女声,粤语

      英文语音

      语音名称地区特点
      en-US-AriaNeural美国女声,清晰自然
      en-US-GuyNeural美国男声
      en-US-JennyNeural美国女声,活泼年轻
      en-GB-SoniaNeural英国女声,英式口音
      en-AU-NatashaNeural澳大利亚女声,澳式口音

      四、🔌 如何适配 edge-tts

      方法学习借鉴自 @Michael Anti,并根据安装过程中遇到的问题简单补充:

      步骤 1:安装 edge-tts

      将 edge-tts 安装到本地:

      pip install edge-tts

      如果你的系统中没有 pip,则需要根据提示先安装 pip,命令是:

      sudo apt install python3-pip

      ⚠️ 现代 Linux 发行版(如 Ubuntu 23.04+)可能会阻止通过 pip 直接安装到系统 Python 环境。如果遇到「externally-managed-environment」错误,可以使用虚拟环境:

      # 创建虚拟环境
      python3 -m venv ~/edge-tts-venv
      
      # 激活虚拟环境
      source ~/edge-tts-venv/bin/activate
      
      # 在虚拟环境中安装 edge-tts
      pip install edge-tts

      使用虚拟环境时,后续脚本中的 edge-tts 命令路径需要调整为 ~/edge-tts-venv/bin/edge-tts

      步骤 2:安装音频播放器

      在创建脚本之前,确保系统已安装 VLC 播放器(用于播放 edge-tts 生成的音频流):

      sudo apt install vlc

      步骤 3:创建 TTS 脚本

      用编辑器新建一个脚本 etts_do.sh

      nano ~/etts_do.sh

      脚本内容如下(请根据你的语音偏好修改 --voice 参数):

      #!/bin/bash
      
      # 使用 edge-tts 进行语音合成,通过 VLC 播放
      # --voice: 指定语音(可通过 edge-tts --list-voices 查看所有可用语音)
      # --file /dev/stdin: 从标准输入读取文本
      # cvlc: VLC 的命令行版本,--gain 10 控制音量,--play-and-exit 播放完毕后退出
      
      edge-tts --voice zh-TW-HsiaoYuNeural --file /dev/stdin | cvlc --gain 10 --play-and-exit - &
      
      # 捕获中断信号(Ctrl+C),优雅地终止后台进程
      trap 'kill $!; exit 0' INT
      
      # 等待后台进程结束
      wait

      📌 脚本说明:

      • --voice zh-TW-HsiaoYuNeural:使用台湾女声,发音清晰。你可以根据阅读内容的语言更换为其他语音
      • --file /dev/stdin:从标准输入读取文本,这是 Foliate 传递待朗读文本的方式
      • cvlc:VLC 的无界面命令行版本,不会弹出播放器窗口
      • --gain 10:音量增益,可根据需要调整(数值越大越响)
      • trap 命令:确保按 Ctrl+C 或 Foliate 停止朗读时能正确终止进程

      设置为可执行:

      chmod +x ~/etts_do.sh

      🔍 如需查看所有可用语音,可使用命令:

      edge-tts --list-voices

      此命令会列出所有 322 种可用语音及其语言、地区和性别信息。你可以使用 grep 过滤特定语言:

      # 查看所有中文语音
      edge-tts --list-voices | grep zh-
      
      # 查看所有英文语音
      edge-tts --list-voices | grep en-

      步骤 4:在 Foliate 中配置 TTS

      打开 Foliate,进入 TTS 设置:

      1. 打开任意一本电子书
      2. 将鼠标悬停在页面底部,调出导航栏
      3. 点击耳机图标(🎧)打开朗读控制
      4. 点击设置(齿轮图标),选择「其他(Other)」
      5. 在输入框中填入脚本的完整路径,例如:/home/你的用户名/etts_do.sh

      ⚠️ 注意:必须使用绝对路径,不能使用 ~ 简写。

      步骤 5:测试与排错

      配置完成后,在 Foliate 中尝试朗读。如果没有声音,请按以下步骤排查:

      1. 检查脚本可执行权限

        ls -la ~/etts_do.sh
        # 应该看到 -rwxr-xr-x 或类似的权限
      2. 手动测试脚本

        echo "这是一个测试" | ~/etts_do.sh

        如果能听到声音,说明脚本本身没问题

      3. 检查 edge-tts 是否正常工作

        edge-tts --voice zh-CN-XiaoxiaoNeural --text "测试语音合成" --write-media test.mp3
        mpv test.mp3  # 或用 vlc test.mp3 播放
      4. 检查 VLC 是否已安装

        which cvlc
        # 应该输出 /usr/bin/cvlc 或类似路径
      5. 如果使用虚拟环境,确保脚本中使用的是虚拟环境中的 edge-tts 完整路径

      五、🎯 高级配置与替代方案

      📝 多语言自动切换脚本(进阶)

      如果你经常阅读多种语言的书籍,可以创建一个更智能的脚本来自动检测语言并选择对应的语音:

      #!/bin/bash
      
      # 读取输入文本
      TEXT=$(cat /dev/stdin)
      
      # 简单的语言检测:检查是否包含中文字符
      if echo "$TEXT" | grep -qP '[\p{Han}]'; then
          VOICE="zh-CN-XiaoxiaoNeural"
      else
          VOICE="en-US-AriaNeural"
      fi
      
      echo "$TEXT" | edge-tts --voice $VOICE --file /dev/stdin | cvlc --gain 10 --play-and-exit - &
      
      trap 'kill $!; exit 0' INT
      wait

      🔧 其他 TTS 方案对比

      如果你对 TTS 有更高的要求,以下是一些替代方案的对比:

      方案优点缺点适用场景
      edge-tts免费、音质好、中英文优秀需要联网、依赖微软服务日常阅读、英语学习
      Piper TTS完全本地、开源、神经网络音质需要下载模型(每个约 50-100MB)离线使用、隐私优先
      eSpeak NG轻量、支持语言最多音质机械辅助功能、嵌入式设备
      NaturalReader商业级音质付费服务专业有声书制作

      💡 Piper TTS 推荐:如果你希望完全离线且保护隐私,Piper 是目前最佳的开源神经网络 TTS 选择。它可以通过 Speech Dispatcher 与 Foliate 集成,音质接近商业服务,且完全在本地运行。详细配置可参考 Arch Wiki – Speech Dispatcher


      六、📌 总结与最佳实践

      通过以上部署,我们就得到了一个基于开源隐私环境的 TTS 阅读器,这是目前的最佳实践了。如果不在意隐私,也不想麻烦,关于 TTS 阅读功能,也可以尝试 NaturalReader 等付费 TTS 阅读工具。

      🏆 本课程方案的优势总结:

      优势说明
      开源生态Foliate + edge-tts 均为开源软件,代码透明可审计
      隐私保护不依赖专有浏览器,不收集阅读行为数据
      高质量语音使用微软神经网络语音,音质接近真人朗读
      成本为零全部软件免费使用,无需订阅付费
      可定制性可根据需求更换语音、调整参数、编写自动化脚本
      跨语言支持322 种语音覆盖 74 种语言,满足多语言阅读需求

      📚 延伸学习建议:

      • 探索 Piper TTS 实现完全离线的神经网络语音合成
      • 学习 Speech Dispatcher 的高级配置
      • 尝试将 edge-tts 与其他工具整合,如 Obsidian、Anki 等

      📖 参考资料:

  • 抱歉,回覆主題必需先登入。