Audio Silence Trimming

안녕하세요. 이번시간에는 오디오파일에서 아무말도 안하고 있는 부분을 자동으로 지워주는 파이썬 스크립트를 만들어 볼까 합니다.

우선 필요한 라이브러리를 설치해주세요. pydub와 ffmpeg를 설치해주셔야합니다.

pip install pydub
brew install ffmpeg

pydub이 기존에 파이썬 기본패키지로 들어가 있던 audioop라이브러리를 사용하는데요, 혹시 파이썬 3.13버젼을 사용하신다면 새로운 버젼에서는 더이상 audioop을 기본적으로 제공하지 않기때문에 별도로 설치를 해주셔야합니다. audioop아니고요 audioop-lts를 설치해주셔야합니다.

pip install audioop-lts

코드는 다음과 같습니다. 음성파일을 같은 폴더에 저장해주세요.

from pydub import AudioSegment
from pydub.silence import split_on_silence

# Load the audio file
audio = AudioSegment.from_file("input.m4a")

# Split the audio by silence
chunks = split_on_silence(audio, min_silence_len=1000, silence_thresh=-40)

# Combine the chunks back together
clean_audio = AudioSegment.empty()
for chunk in chunks:
    clean_audio += chunk

# Export the cleaned audio file
clean_audio.export("output.mp3", format="mp3")

위의 코드는 input.m4a를 받아서 output.mp3로 중간에 아무런 말도 들리지 않는 경우에 트림을 하는 코드입니다. min_silence_len는 현재 1초로 설정되어 있는데 더 짧은 구간도 트림하고 싶으시면 700이나 그 이하로도 필요에따라 줄이셔도 됩니다. 그리고 silence_thresh는 -40인 경우에 삭제를 하도록 했습니다. output도 m4a로 하고 싶었는데 라이브러리에서 해당 포멧을 지원하지 않네요.

한번 실행해볼게요. 오디오나 비디오는 처리시간이 꽤 소요됩니다.

python audio-silence-trimming.py

결과를 보시면 output.mp3가 같은 폴더에 생성되어있고, 열어서 확인해보시면 공백이 모두 사라져있습니다.

감사합니다.