Python,pydub分割音频文件

Posted

技术标签:

【中文标题】Python,pydub分割音频文件【英文标题】:Python, pydub splitting an audio file 【发布时间】:2017-02-06 04:43:32 【问题描述】:

您好,我正在使用 pydub 拆分音频文件,提供从原始片段中获取片段的范围。

我拥有的是:

from pydub import Audiosegment

sound_file = AudioSegment.from_mp3("C:\\audio file.mp3")

# milliseconds in the sound track
ranges = [(30000,40000),(50000,60000),(80000,90000),(100000,110000),(150000,180000)] 

for x, y in ranges:
    new_file = sound_file[x : y]
    new_file.export("C:\\" + str(x) + "-" + str(y) +".mp3", format="mp3")

它适用于前 3 个新文件。但其余的不是 - 它不会相应地拆分。

问题出在我给出范围的方式上吗?

谢谢。

插件:

当它变得简单时 - 例如

sound_file[150000:180000]

并将其导出为 mp3 文件。它有效,但只削减 50000:80000 部分。似乎读取的范围不正确。

【问题讨论】:

您确定您的音频文件至少有 180 秒长吗? @Jiaaro,感谢您的评论。是的,音频文件很长,涵盖了所有范围。 你能用一个更简单的例子重现它吗?喜欢len(sound_file[150000:180000]) @Jiaaro,谢谢。当它变得简单时(一个段而不是几个段)。像 sound_file[150000:180000] 然后将其导出为 mp3 文件。它有效,但只削减 50000:80000 部分。似乎读取的范围不正确。 你能分享有问题的音频文件吗?似乎必须有更多的东西 【参考方案1】:

试试这个,可能有用

import pydub
import numpy as np
sound_file = pydub.AudioSegment.from_mp3("a.mp3")
sound_file_Value = np.array(sound_file.get_array_of_samples())
# milliseconds in the sound track
ranges = [(30000,40000),(50000,60000),(80000,90000),(100000,110000),(150000,180000)] 

for x, y in ranges:
    new_file=sound_file_Value[x : y]
    song = pydub.AudioSegment(new_file.tobytes(), frame_rate=sound_file.frame_rate,sample_width=sound_file.sample_width,channels=1)
    song.export(str(x) + "-" + str(y) +".mp3", format="mp3")

【讨论】:

以上是关于Python,pydub分割音频文件的主要内容,如果未能解决你的问题,请参考以下文章

Python pydub音频处理

python处理音频文件(mp3)

如何使用pydub在静音结束时拆分音频文件而不删除静音?

Pydub for python 2.7 [windows 7]

Python pydub 截取音频

Python pydub 截取音频