Decentralization? We're still early!

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

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

    發布人 Brave 2024-05-03 16:47

    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 等

    📖 参考资料:

    Brave 回复 9 months, 2 weeks ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在