拆分 Ogg Opus 文件流
Splitting an Ogg Opus File stream
我正在尝试将 OGG_OPUS 编码流发送到 google 的语音转文本流服务。
由于 Google 对他们的流请求施加了时间限制,我必须按固定间隔将音频流路由到另一个 Google 语音到文本流 session。
据我了解,OGG流中的页面不能独立读取,因为页面中的数据是通过考虑上一页和下一页的数据计算的。
如果是这样,我们是否可以在某个点切断流并用剩余数据重新创建一个全新的流?
在某个点停止并在新流中发送数据是行不通的,因为初始 OGG header 数据包在第二个流中也不可用。
我知道这个问题可以使用 PCM 数据来解决,因为它没有编码,PCM 流可以在任何时候简单地分割并变成一个新的流。由于比特率高,我无法使用 PCM 流,而且我不想使用无损质量,因为我正在传输语音数据流。
OpusFileSplitter 可以拆分 Opus 音频文件。
只要文件以流开头 (BOS) header 和注释页开头,就可以独立读取 Ogg 页面。您可以通过创建以 Ogg header 页面开头并在 .例如,这个 Ogg Opus 文件:
*********************************************************
* * * * *
* Header * Audio Data * Audio Data * Audio Data *
* Page * Page 1 * Page 2 * Page 3 *
* * * * *
*********************************************************
可以拆分成 2 个文件:
***************************
* * *
* Header * Audio Data *
* Page * Page 1 *
* * *
***************************
******************************************
* * * *
* Header * Audio Data * Audio Data *
* Page * Page 2 * Page 3 *
* * * *
******************************************
关于可以拆分并跨越多个页面的音频片段,您是正确的。我假设如果页面包含不完整的音频片段,可能会损失几毫秒,但这不应该破坏语音识别。不幸的是,我的本地测试使用了 opusenc
util 生成的 Opus 文件,它没有创建跨页面拆分段的页面,这似乎是拆分文件的好事!
OpusFileSplitter.scanPages()
展示了如何找到页面边界。
我正在尝试将 OGG_OPUS 编码流发送到 google 的语音转文本流服务。 由于 Google 对他们的流请求施加了时间限制,我必须按固定间隔将音频流路由到另一个 Google 语音到文本流 session。
据我了解,OGG流中的页面不能独立读取,因为页面中的数据是通过考虑上一页和下一页的数据计算的。 如果是这样,我们是否可以在某个点切断流并用剩余数据重新创建一个全新的流? 在某个点停止并在新流中发送数据是行不通的,因为初始 OGG header 数据包在第二个流中也不可用。
我知道这个问题可以使用 PCM 数据来解决,因为它没有编码,PCM 流可以在任何时候简单地分割并变成一个新的流。由于比特率高,我无法使用 PCM 流,而且我不想使用无损质量,因为我正在传输语音数据流。
OpusFileSplitter 可以拆分 Opus 音频文件。
只要文件以流开头 (BOS) header 和注释页开头,就可以独立读取 Ogg 页面。您可以通过创建以 Ogg header 页面开头并在 .例如,这个 Ogg Opus 文件:
*********************************************************
* * * * *
* Header * Audio Data * Audio Data * Audio Data *
* Page * Page 1 * Page 2 * Page 3 *
* * * * *
*********************************************************
可以拆分成 2 个文件:
***************************
* * *
* Header * Audio Data *
* Page * Page 1 *
* * *
***************************
******************************************
* * * *
* Header * Audio Data * Audio Data *
* Page * Page 2 * Page 3 *
* * * *
******************************************
关于可以拆分并跨越多个页面的音频片段,您是正确的。我假设如果页面包含不完整的音频片段,可能会损失几毫秒,但这不应该破坏语音识别。不幸的是,我的本地测试使用了 opusenc
util 生成的 Opus 文件,它没有创建跨页面拆分段的页面,这似乎是拆分文件的好事!
OpusFileSplitter.scanPages()
展示了如何找到页面边界。