这是外行人的问题(在这种情况下,我是外行)。我一直在问这个问题.我用这个答案编写一个 bash 脚本,下载多个 tts 片段,将它们转换为 mp3 格式文件,并将它们合并到名为的单个文件中page.mp3
。您可以在这些链接中看到它的工作原理(GitHub,GitHub 维基,Vimeo)。
我现在想要的是构建(并包含在full.sh
)一个命令,该命令读取包含我想要转换为 tts 的文本的文件(我不想仅使用 tts 服务复制翻译),然后保存生成的文件 har,而无需打开 Firefox,等待原始文本转换为 tts 片段 url,然后保存 har.file。我真的是网络资源、正则表达式等方面的外行。所以我没有任何 MWE 来按照正常标准开始发帖。但我希望对这个目标有一些建议或解决方案。
答案1
我不知道 gtts 工具,尽管在发布此问题之前我就怀疑过这一点:
因此,这里有一个可行的替代方案:
- 安装包 gtts,查看如何安装:https://gtts.readthedocs.io/en/latest/
我的经验如下:
要对机器本地保存的文件进行简单翻译,您可以使用以下命令顺序:
gtts-cli -l pt -f <file> -o <name.output>.mp3
需要翻译四个不同的文本文件,在两种情况下,保存的文本文件均未使用任何扩展名:
本书第 1 章:文件(页数):1 和 2
本书第 2 章:文件(页数):3 和 4
在文件1、2、3、4所在的文件夹中创建一个finish.sh文件,并在finish.sh文件内放置以下代码:
#!/bin/bash
awk -F, '{print $1"3;"}' pre.full.gtts.txt > mp3.txt; awk '/\.mp3/{sub(".mp3",++count"&")} 1' mp3.txt > pre.count.txt; awk '/\-o/{sub(" -o",++count"&")} 1' pre.count.txt > pre.count1.txt; awk 'ORS=" "' pre.count1.txt > hor.mp3.txt; awk -F, '{print "#!/bin/bash \n "$1" "$2""}' hor.mp3.txt > gtts.sh; chmod +x gtts.sh; export PATH=$PATH:$pwd; gtts.sh
还创建一个 pre.full.gtts.txt 文件并使用以下代码保存在同一文件夹中:
gtts-cli -l pt -f -o .mp
gtts-cli -l pt -f -o .mp
gtts-cli -l pt -f -o .mp
gtts-cli -l pt -f -o .mp
gtts-cli -l pt -f -o .mp
注意:行数(gtts-cli -l en -f -o .mp
)不必正好等于要翻译的文本文件的数量,但不能少于这个数字。
情况 1:仅从每个文本页面生成相应的 mp3 文件:将终端进入保存文件 1、2、3 和 4 的文件夹并输入以下命令:$ chmod + x finish.sh; export PATH = $ PATH: $ pwd
然后执行$ finish.sh
。
案例 2:将文件 1、2、3 和 4 保存在一个名为 book.mp3 的文件中。我只在文件夹中保留了文本文件 1、2、3 和 4。然后在此文件夹中创建一个名为 full.end.sh 的文件,并将以下代码放入其中并保存:
#!/bin/bash
awk -F, '{print $1"3;"}' pre.full.gtts.txt > mp3.txt; awk '/\.mp3/{sub(".mp3",++count"&")} 1' mp3.txt > pre.count.txt; awk '/\-o/{sub(" -o",++count"&")} 1' pre.count.txt > pre.count1.txt; awk 'ORS=" "' pre.count1.txt > hor.mp3.txt; awk -F, '{print "#!/bin/bash \n "$1" "$2""}' hor.mp3.txt > gtts.sh; chmod +x gtts.sh; export PATH=$PATH:$pwd; gtts.sh
printf '#!/bin/bash'> oz.txt; awk -F, '{print $1"\n seq 1 4 > ozn1.txt"}' oz.txt > ozn.sh;chmod +x ozn.sh; ozn.sh; awk -F, '{print $1".mp3"}' ozn1.txt > ozn2.txt; awk 'ORS=" "' ozn2.txt > ozn3.txt; awk -F, '{print "#!/bin/bash \n cat "$1" > book.mp3"}' ozn3.txt > ozn4.sh; chmod +x ozn4.sh; ozn4.sh
注意 1:您还必须在 Case 2 文件夹中有 pre.full.gts.txt 文件。注意 2:请注意,我们要放入 book.mp3 中的文件范围是在代码片段中设置的print $1"\n seq 1 4
。运行 finish.sh 命令(假设您已经完成$ export PATH=$PATH:$pwd; chmod + x finish.sh
案例 3:将第 1 页和第 2 页保存在一个 mp3 文件中,我们将其命名为 capitule1.mp3,将第 3 页和第 4 页保存在另一个 mp3 文件中,我们将其命名为 capitule2.mp3 要做到这一点,只需printf '#!/bin/bash'> oz.txt; awk -F, '{print $1"\n seq 1 4 > ozn1.txt"}' oz.txt > ozn.sh;chmod +x ozn.sh; ozn.sh; awk -F, '{print $1".mp3"}' ozn1.txt > ozn2.txt; awk 'ORS=" "' ozn2.txt > ozn3.txt; awk -F, '{print "#!/bin/bash \n cat "$1" > book.mp3"}' ozn3.txt > ozn4.sh; chmod +x ozn4.sh; ozn4.sh
在文件中再添加一行 ( )full.end.sh
并更改摘录中属于每个章节的相应页面的范围 (例如print $1"\n seq 3 4
:) e 将 book.mp3 重命名为 capitule2.mp3 并执行$ full.end.sh
。看看代码会是什么样子 full.end.sh:
#!/bin/bash
awk -F, '{print $1"3;"}' pre.full.gtts.txt > mp3.txt; awk '/\.mp3/{sub(".mp3",++count"&")} 1' mp3.txt > pre.count.txt; awk '/\-o/{sub(" -o",++count"&")} 1' pre.count.txt > pre.count1.txt; awk 'ORS=" "' pre.count1.txt > hor.mp3.txt; awk -F, '{print "#!/bin/bash \n "$1" "$2""}' hor.mp3.txt > gtts.sh; chmod +x gtts.sh; export PATH=$PATH:$pwd; gtts.sh
printf '#!/bin/bash'> oz.txt; awk -F, '{print $1"\n seq 1 2 > ozn1.txt"}' oz.txt > ozn.sh;chmod +x ozn.sh; ozn.sh; awk -F, '{print $1".mp3"}' ozn1.txt > ozn2.txt; awk 'ORS=" "' ozn2.txt > ozn3.txt; awk -F, '{print "#!/bin/bash \n cat "$1" > capitule1.mp3"}' ozn3.txt > ozn4.sh; chmod +x ozn4.sh; ozn4.sh
printf '#!/bin/bash'> oz.txt; awk -F, '{print $1"\n seq 3 4 > ozn1.txt"}' oz.txt > ozn.sh;chmod +x ozn.sh; ozn.sh; awk -F, '{print $1".mp3"}' ozn1.txt > ozn2.txt; awk 'ORS=" "' ozn2.txt > ozn3.txt; awk -F, '{print "#!/bin/bash \n cat "$1" > capitule2.mp3"}' ozn3.txt > ozn4.sh; chmod +x ozn4.sh; ozn4.sh
谢谢!