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時,音頻中的所有內容(除了提供的片段中的那些部分)都應該被消除。在
總結
以上是生活随笔為你收集整理的python3123_使用sox和python,基于时间戳列表对音频区域进行静音处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机刷软路由_华为路由AX3 Pro
- 下一篇: python建立数据库和基本表_pyth