修剪音频返回空文件(Python)

Posted

技术标签:

【中文标题】修剪音频返回空文件(Python)【英文标题】:Trimming audio returns empty files (Python) 【发布时间】:2021-10-31 18:12:31 【问题描述】:

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

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

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 开始。

【问题讨论】:

1. pydub 正在使用 ffmpeg,因此请确保您已正确安装它并且您使用的是正确的版本。 2. 你真的不需要在startTimeendTime 中添加0*60*1000 来将秒转换为mSeconds :) 嗨,@TDG。我已经安装了 ffmpeg。我可以修剪一个文件,但是当我考虑多个文件时,我无法为每个文件正确开始。例如,在另一个版本中,我修剪了这两个文件,但只使用了两个文件的最后一个起点(15 秒)。我相信我在 extract = song[s:e] 中传递所需的开头是错误的。 【参考方案1】:

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

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")

【讨论】:

请检查我编辑的答案。 没错!谢谢!

以上是关于修剪音频返回空文件(Python)的主要内容,如果未能解决你的问题,请参考以下文章

Echonest 轨道配置文件请求总是返回一个空的 audio_summary

AV音频播放器。音频文件的可选重定向。在 _audio 我得到空

iOS:使用 Swift 修剪音频文件?

无法使用 AVAssetExportSession 修剪音频文件

修剪音频文件并获得静音之间的部分

通过在 UISlider 中选择点来修剪音频文件