前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Audio Slicer 进行高效音频切割

使用Audio Slicer 进行高效音频切割

原创
作者头像
TechHarmony
发布2024-04-15 11:32:00
1940
发布2024-04-15 11:32:00
举报
文章被收录于专栏:智汇编程工坊智汇编程工坊

今天我要和大家分享一个非常酷的 Python 工具,它叫做 Audio Slicer。这个小工具的主要功能是利用沉默检测技术来切割音频文件。在最新的 2.0 版本中,它的速度有了显著的提升(比之前的版本快了 400 倍!),并且切割逻辑也得到了改进,错误率大大降低。如果你对 1.0 版本感兴趣,可以在 GitHub 上找到旧版本的代码库。此外,还有一个带有图形用户界面的版本,让操作更加方便。

工作原理

沉默检测

Audio Slicer 使用均方根(RMS)来衡量音频的安静程度并检测沉默部分。它会计算每个帧(帧长度设置为 hop size)的 RMS 值,并将 RMS 值低于 阈值 的所有帧视为沉默帧。

音频切割

当自上次切割以来有效的(有声)部分达到 最小长度 min_length,并且检测到一段长于 最小间隔 min_interval 的沉默部分时,音频将被切割,除了沉默区域内 RMS 值最低的帧之外。较长的沉默部分可能会被删除。

使用要求

如果你打算使用 Python API,你需要安装 numpy:

代码语言:bash
复制
pip install numpy

如果你打算使用命令行界面(CLI),你需要安装 librosa 和 soundfile:

代码语言:shell
复制
pip install librosa
pip install soundfile

或者,你可以一次性安装所有的依赖:

代码语言:shell
复制
pip install -r requirements.txt

使用方法

使用 Python API

代码语言:python
复制
import librosa  # 可选。使用你喜欢的任何库来读取音频文件。
import soundfile  # 可选。使用你喜欢的任何库来写入音频文件。

from slicer2 import Slicer

音频, 采样率 = librosa.load('example.wav', sr=None, mono=False)  # 使用librosa加载音频文件。
slicer = Slicer(
    sr=采样率,
    threshold=-40,
    min_length=5000,
    min_interval=300,
    hop_size=10,
    max_sil_kept=500
)
chunks = slicer.slice(音频)
for i, 片段 in enumerate(chunks):
    if 片段.shape.length > 1:
        片段 = 片段.T  # 如果音频是立体声的,交换轴。
    soundfile.write(f'clips/example_{i}.wav', 片段, 采样率)  # 使用soundfile保存切割后的音频文件。

使用 CLI

你可以通过下面的命令行运行脚本:

代码语言:bash
复制
python slicer2.py 音频 [--out OUT] [--db_thresh DB_THRESH] [--min_length MIN_LENGTH] [--min_interval MIN_INTERVAL] [--hop_size HOP_SIZE] [--max_sil_kept MAX_SIL_KEPT]

其中 音频 是指要切割的音频文件,--out 默认为音频所在的相同目录,其他选项的默认值如上文参数部分所列。

参数

  • sr:输入音频的采样率。
  • db_threshold:以分贝(dB)表示的 RMS 阈值。所有 RMS 值低于此阈值的区域将被视为静音。如果你的音频噪声较大,可以增加这个值。默认值为 -40。
  • min_length:每个切割音频片段所需的最小长度,以毫秒为单位。默认值为 5000。
  • min_interval:要被切割的沉默部分的最小长度,以毫秒为单位。如果你的音频只包含短间隙,请将此值设置得更小。这个值越小,脚本生成的切割音频片段可能越多。请注意,这个值必须小于 min_length 且大于 hop_size。默认值为 300。
  • hop_size:每个 RMS 帧的长度,以毫秒为单位。增加这个值将提高切割的精度,但会减慢处理速度。默认值为 10。
  • max_silence_kept:围绕切割音频保留的最大沉默长度,以毫秒为单位。根据需要调整此值。请注意,设置此值并不意味着切割后的音频中的沉默部分恰好具有给定的长度。算法将如上文所述寻找最佳切割位置。默认值为 1000。

性能

在 Intel i7 8750H CPU 上,这个脚本的速度比实时快 400 倍以上。速度可能会因你的 CPU 和磁盘而异。尽管 Slicer 是线程安全的,但由于输入/输出瓶颈,多线程似乎没有必要。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工作原理
    • 沉默检测
      • 音频切割
      • 使用要求
      • 使用方法
        • 使用 Python API
          • 使用 CLI
          • 参数
          • 性能
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com