修剪音频 returns 个空文件 (Python)

Trimming audio returns empty files (Python)

考虑到不同的起点(秒),我正在尝试 trim 多个 .wav 文件,但是我制作的代码 returns 只有空文件。

这里是考虑到两个文件有两个不同起点的代码:

from pydub import AudioSegment
import os
path  = "PATH"
files = os.listdir(path)
#start of first song starts at 20 seconds;
#start of second song starts at 15 seconds
startSec = [20,15] 

endSec   = []

for s in startSec:
    endSec.append(s + 30) # adding thirty seconds
#Set duration in milliseconds
startTimes = [] 

for s in startSec:
    startTime = s*1000 
    startTimes.append(startTime) 

endTimes = []

for e in endSec:
    endTime = e*1000 
    endTimes.append(endTime)
for s, e in startTimes, endTimes:
    for f in files:
        song = AudioSegment.from_wav(path+'\'+ f)
        extract = song[s:e]
        extract.export(f+'-extract.mp3', format="mp3")

有谁知道我拥有这些空文件可能会犯什么错误吗?

注意:这是我第一次使用这个库,所以我不知道这是最好的工具还是实现解决方案的最好方法

另一个版本:

for f in files:
    song = AudioSegment.from_wav(path+'\'+ f)
    extract = song[startTime:endTime]
    extract.export(f+'-extract.mp3', format="mp3")

改变最后一个循环,我得到了两个文件,但都是根据定义的第二个起点(15 秒)开始,而不是第一个从 20 开始,第二个从 15 开始。

如果您检查原始版本中最后一个(外部)循环的输出 -

for s, e in startTimes, endTimes:
    print(s, e)

你会看到输出是

20000 15000

50000 45000
所以你得到错误的开始和结束时间。
迭代这两个列表的正确方法是使用 zip() function -

for s, e in zip(startTimes, endTimes):
    print(s, e)

产生:
20000 50000
15000 45000

所以你的循环应该是这样的 -

for f, s, e in zip(files, startTimes, endTimes):
    song = AudioSegment.from_wav(path+'\'+ f)
    extract = song[s:e]
    extract.export(f+'-extract.mp3', format="mp3")