python3123_使用sox和python,基于时间戳列表对音频区域进行静音处理

我有一个音频文件。

我有一堆[开始,结束]时间戳段。在

我想要实现的目标:

假设音频长度为6:00分钟。

我有段是:[[0.0,4.0],[8.0,12.0],[16.0,20.0],[24.0,28.0]]

在我把这两个传递给sox+python之后,输出应该是6分钟长的音频,但是只有在片段经过的时间内有音频。在

也就是说,我想把time stamps和原始音频传递给SOX+python

这样就生成了一个音频,除了那些与传递的片段相对应的部分之外,所有内容都被静音

我无法达到上述目标,但有点接近相反的结果,经过几天的谷歌搜索,我得到了这样的结果:

更新、更简洁的代码+示例:

sox命令,像这样进行填充和修剪SOX__SILENCE = 'sox "{inputaudio}" -c 1 "{outputaudio}" {padding}{trimming}'

随机测试段:

^{pr2}$

生成填充和修剪的小python脚本。在

填充:def get_pad_pattern_from_timestamps(my_segments):

padding = 'pad'

for segment in my_segments:

duration = str(segment[1] - segment[0])

padding = padding + ' ' + duration + '@' + str(segment[0])

return padding

print get_pad_pattern_from_timestamps(A)

print get_pad_pattern_from_timestamps(b)

print get_pad_pattern_from_timestamps(z)

print get_pad_pattern_from_timestamps(q)

来自^的输出:pad 16.0@0.0

pad 1.0@1.0

pad 6.7@1.6 20.5@13.2 3.0@35.0 9.0@42.0 3.5@70.2 9.2@90.0 8.1@123.0

pad 4.0@0.0 4.0@8.0 4.0@16.0 4.0@24.0 4.0@32.0 4.0@40.0

修剪:def get_trimm_pattern_from_timestamps(my_segments):

trimming = ''

for segment in my_segments:

duration = str(segment[1] - segment[0])

trimming = trimming + ' trim 0 ' + str(segment[0]) + ' 0 ' + duration + ' ' + duration

return trimming

print get_trimm_pattern_from_timestamps(A)

print get_trimm_pattern_from_timestamps(b)

print("\n")

print get_trimm_pattern_from_timestamps(z)

print("\n")

print get_trimm_pattern_from_timestamps(q)

print("\n")

修剪输出:trim 0 0.0 0 16.0 16.0

trim 0 1.0 0 1.0 1.0

trim 0 1.6 0 6.7 6.7 trim 0 13.2 0 20.5 20.5 trim 0 35.0 0 3.0 3.0 trim 0 42.0 0 9.0 9.0 trim 0 70.2 0 3.5 3.5 trim 0 90.0 0 9.2 9.2 trim 0 123.0 0 8.1 8.1

trim 0 0.0 0 4.0 4.0 trim 0 8.0 0 4.0 4.0 trim 0 16.0 0 4.0 4.0 trim 0 24.0 0 4.0 4.0 trim 0 32.0 0 4.0 4.0 trim 0 40.0 0 4.0 4.0

使用来自终端的about输出运行SOX:Padding:

sox dinners.mp3 -c 1 testlongpad.mp3 pad 4.0@0.0 4.0@8.0 4.0@16.0 4.0@24.0

Trimming:

sox dinners.mp3 -c 1 testrim.mp3 trim 0 0.0 0 16.0 16.0

Padd and trimm:

sox dinners.mp3 -c 1 testlongpadtrim.mp3 pad 4.0@0.0 4.0@8.0 4.0@16.0 4.0@24.0 trim 0 0.0 0 4.0 4.0 trim 0 8.0 0 4.0 4.0 trim 0 16.0 0 4.0 4.0 trim 0 24.0 0 4.0 4.0

如果S是我的片段,那么NS就是其他一切。在^方法中,我传递NS,而NS正在从音频中删除。在

我想要实现的仍然是相同的,但方式不同,即我想传递S,这样只保留与{}对应的音频部分。在

附言:我的问题非常具体,我是新的音频处理和不确定如何继续。请不要把问题说得太宽泛或是什么。

我很乐意提供更多的细节来澄清。

最后,这不是一个硬件问题。这是个人项目。在

样本段[[开始,结束],,]]:[[1.6, 8.3], [13.2, 33.7], [35.0,38.0], [42.0,51.0], [70.2,73.7], [90.0,99.2], [123.0,131.1]]

因此,当这些时间戳通过音频传递给sox/python时,音频中的所有内容(除了提供的片段中的那些部分)都应该被消除。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值