2017-08-05 367 views
0

我有超过200个MP3文件,我需要通过使用静音检测来分割它们中的每一个。我尝试过Audacity和WavePad,但他们没有批处理过程,并且一个接一个地进行处理非常缓慢。使用静音检测分割音频文件

的情况如下:在开始

  • 分割轨道而沉默2秒或更
  • 然后添加0.5秒和这些轨道的端部,并保存为MP3播放
  • 比特率192立体声
  • 正常化量,以确保所有的文件都是相同的体积和质量

我尝试FFmpeg的,但没有成功。

+0

看看[如何分割mp3文件?](https://askubuntu.com/questions/27574/how-can-i-split-a-mp3-file)。 – John1024

+0

我用[mp3DirectCut](http://www.mpesch3.de1.cc/mp3dc.html)合理成功。话虽如此,StackOverflow是编程的Q/A站点。它不是一个请求软件或其他场外资源推荐的站点。 – rojo

回答

4

我发现pydub是以简单的方式并以最少的代码量完成这些类型的音频操作的最简单的工具。

您可以安装pydub作为

pip install pydub 

如果需要,您可能需要安装的ffmpeg/avlib。检查link了解更多详情。

这是一段代码,它可以完成你所问的任务。某些参数(如silence_threshold,target_dBFS)可能需要进行一些调整以符合您的要求。
总的来说,我是能够拆分mp3文件(尽管在我结束不同silence_threshold

工作守则

from pydub import AudioSegment 
from pydub.silence import split_on_silence 

def match_target_amplitude(aChunk, target_dBFS): 
    ''' Normalize given audio chunk ''' 
    change_in_dBFS = target_dBFS - aChunk.dBFS 
    return aChunk.apply_gain(change_in_dBFS) 

song = AudioSegment.from_mp3("your_audio.mp3") 

#split track where silence is 2 seconds or more and get chunks 

chunks = split_on_silence(song, 
    # must be silent for at least 2 seconds or 2000 ms 
    min_silence_len=2000, 

    # consider it silent if quieter than -16 dBFS 
    #Adjust this per requirement 
    silence_thresh=-16 
) 

#Process each chunk per requirements 
for i, chunk in enumerate(chunks): 
    #Create 0.5 seconds silence chunk 
    silence_chunk = AudioSegment.silent(duration=500) 

    #Add 0.5 sec silence to beginning and end of audio chunk 
    audio_chunk = silence_chunk + chunk + silence_chunk 

    #Normalize each audio chunk 
    normalized_chunk = match_target_amplitude(audio_chunk, -20.0) 

    #Export audio chunk with new bitrate 
    print("exporting chunk{0}.mp3".format(i)) 
    normalized_chunk.export(".//chunk{0}.mp3".format(i), bitrate='192k', format="mp3") 

如果您的原始音频立体声(通道= 2),块将立体声。 您可以检查如下。

>>> song.channels 
2