修剪音频返回空文件(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. 你真的不需要在startTime
或endTime
中添加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 我得到空