如何将srt文件转换为AWS Polly的SSML增强文本



我们有一些校对的.srt文件,我们想通过AWS Polly从中生成音频。根据AWS Polly上的参考资料,Polly的输入类型为纯文本或SSML增强文本。有没有办法将.srt文件转换为SSML增强文本?

我们想要使用.srt文件,因为它们是经过校对的,并且会在文件中记录"音频暂停"信息。例如:

1
00:00:04,960 --> 00:00:06,880
- [Instructor] Bacteria
are able to inhabit
2
00:00:06,880 --> 00:00:09,220
almost every environment on Earth,
3
00:00:09,500 --> 00:00:12,740
from desert tundra to
tropical rainforests.

00:00:09220到00:00:09500之间有一段时间,这是我们掌握的"音频暂停"信息。

AWS Polly参考:https://docs.aws.amazon.com/polly/latest/dg/ssml-to-speech-console.html

如果无法将.srt转换为SSML增强型文本,我是否应该解析.srt文件以生成Polly能够理解的SSML增强文本?

我已经创建了一个python脚本来实现这一点:https://github.com/ThioJoe/SRT-To-SSML

它使用duration属性(用于prosody标签(和break标签来理论上保持语音与原始字幕同步。

然而,仍有一些限制需要记住:

  • 虽然有一个官方/标准的duration属性可以与prosody标签一起使用,以指定特定语音应该持续多久,但似乎大多数服务都不支持它
  • AmazonPolly的amazon:max-duration属性将加快语音速度以匹配该时间,但不会减慢语音速度,这意味着它仍然可能与原始字幕不同步

如果使用一个完整的ssml文件不起作用,我可以想到的一种"蛮力"方法是将字幕的每一行生成为一个单独的音频文件,然后使用可以根据相应字幕行的持续时间拉伸或收缩每个文件的东西。然后,你必须使用等于每个字幕行的时间戳之差的空静音。然后将所有内容拼接到一个音频文件中。但不确定需要什么工具。

如果你的最终目标是通过AmazonPolly将SRT(视频字幕(转换为音频,我猜理论上这是可能的,但SSML并不是真正适合这项工作的(因为你不能保证多行(开始/停止/暂停等(的时间,这样在与视频配对时就可以接受(。您可能需要

  1. 将每一行分隔成自己的请求/作业
  2. 使用
<prosody amazon:max-duration>

标签。从当前线路中减去下一条线路的开始时间,计算最大持续时间

  1. 通过合并多个音频片段并设置开始时间来执行音频组装

无论如何,如果你没有使用Polly,&有一个FOSS式的SRT音频解决方案,我很想听听。

最新更新