【问题标题】:Splitting an Ogg Opus File stream拆分 Ogg Opus 文件流
【发布时间】:2020-02-05 01:13:50
【问题描述】:

我正在尝试将 OGG_OPUS 编码流发送到谷歌的语音到文本流服务。 由于 Google 对其流请求施加了时间限制,因此我必须以固定的时间间隔将音频流路由到另一个 Google Speech To Text 流会话。

据我所知,OGG流中的页面不能独立读取,因为页面中的数据是通过考虑前一页和下一页的数据来计算的。 如果是这样的话,我们是否可以在某个点切断流并用剩余的数据重新创建一个全新的流? 在某个点停止并在新流中发送数据是行不通的,因为初始 OGG 标头数据包在第二个流中也不可用。

我知道这个问题可以使用 PCM 数据来解决,因为它没有被编码,一个 PCM 流可以简单地在任何时候被分割并变成一个新的流。由于比特率高,我不能使用 PCM 流,而且我不喜欢使用无损质量,因为我正在传输语音数据流。

参考:https://www.rfc-editor.org/rfc/rfc7845#section-3

【问题讨论】:

  • 你有测试代码或作品文件吗?试试下面的OpusFileSplitter...

标签: javascript audio google-speech-api ogg opus


【解决方案1】:

OpusFileSplitter 可以拆分 Opus 音频文件。

只要文件以流的开头 (BOS) 标题和注释页开头,就可以独立读取 Ogg 页面。您可以将一个 Ogg 文件拆分为多个文件,方法是创建以 Ogg 标题页开头并在 .例如,这个 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() 显示如何找到页面边界。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2019-03-23
    • 2021-09-02
    • 2021-02-05
    • 2016-11-06
    • 2021-11-19
    • 2015-11-16
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多