首先我知道这个问题已经被问过了, 听起来很自然的文本转语音?
我在寻找某种文本转语音引擎,但要转换完整的电子书/文本。简而言之,我不再有足够的时间坐下来阅读,而是经常旅行,所以喜欢听有声读物,并尝试了列出的所有建议......但是......
我真的很喜欢 user85321 的建议和小脚本,它紧凑而切中要点,但由于某种原因,任何大于几段的文本都会以有关太多参数的错误消息结束:
bash: ./speech.sh: Argument list too long
有什么方法可以改变脚本或者添加脚本来防止这种情况发生吗?
我喜欢 pico2wav 的声音,与 googleTT 相比,它的延迟/停顿更少,是的,有一个奇怪的拼写问题,将“TH E”拼写成了“The”,但总的来说,语音似乎流畅一些,与 festival / embrola 相比,我更喜欢它。
我甚至尝试了原始帖子中列出的使用 GoogleTT 的脚本,包括使用 pico2wav 作为离线备份的脚本。不幸的是,即使通过拆分将书分成几部分,它们也会在随机间隔处停止,因此尝试将随机的语音块拼凑在一起是一件非常麻烦的事。
我最后使用的插件是 libreoffice 的读取文本插件(使用 pico2wav),它似乎与 args 有同样的问题,因为它在一段时间后就会崩溃。
经过过去几个月对此的深入研究,我现在陷入了困境,因此任何帮助或建议都将非常感谢。
感谢您阅读我的涂鸦。
答案1
无论出于什么原因,pico2wave
只接受输入作为参数。因此,它一次可以处理的文本长度受最大参数大小的限制。您也许可以使用xargs
将文本拆分为不超过此限制的部分。使用xargs
以下方式运行该脚本:
xargs -a input.txt ./speech.sh
xargs
您不需要使用的相关选项:
--max-chars=max-chars
-s max-chars
Use at most max-chars characters per command line, including the
command and initial-arguments and the terminating nulls at the
ends of the argument strings. The largest allowed value is
system-dependent, and is calculated as the argument length limit
for exec, less the size of your environment, less 2048 bytes of
headroom. If this value is more than 128KiB, 128Kib is used as
the default value; otherwise, the default value is the maximum.
1KiB is 1024 bytes.
答案2
我遇到了类似的问题并遇到了以下对我有用的脚本: https://github.com/GwadaLUG/pico-read-speaker 这是一个 Python 脚本,它将文本文件分割成多个部分并将它们传递给 pico2wave。然后它将所有输出的 .wav 文件合并为一个巨大的 .wav。