반응형
pydub는 ffmpeg에 의존한다.
apt install -y ffmpeg
pydub도 설치를 한다.
pydub는 pip로 설치를 하는 방법과 git clone을 통해 설치하는 방법, zip파일을 다운받아서 설치하는 방법이 있는데.
pip install pydub
or
git clone https://github.com/jiaaro/pydub.git
pip install pydub를 활용하려니 pycharm에 python3.7의 경우 해당 모듈을 찾을 수 없다고하여,
git을 통하여 설치하고 프로젝트안에 넣어버렸다.
전반적인 설치방법이나 기본 가이드는 아래의 URL에서 확인이 가능하다.
GitHub - jiaaro/pydub: Manipulate audio with a simple and easy high level interface
def make_wav(wav_file_name):
my_wav = AudioSegment.from_wav(wav_file_name)
# wav의 재생 시간을 확인
wav_len = my_wav.duration_seconds * 1000
if wav_len > 0.0:
# 진폭의 평균 제곱근 GET
average_loudness = my_wav.rms
# 진폭의 평균 값보다 30 데시벨 더 작은 진폭은 묵음으로 간주하자.
silence_threshold = average_loudness * db_to_float(-30)
# 묵음으로 간주된 부분을 필터 처리하여, 그 이상의 값만 담는다.
podcast_parts = (ms for ms in my_wav if ms.rms > silence_threshold)
# 모든 chunks를 재결합
my_wav = reduce(lambda a, b: a + b, podcast_parts)
# 시간을 줄여보자.
# (목적은 파일의 중간을 기준으로 앞뒤 1.5초씩하여 총 3초의 시간을 보여준다.
wav_len = my_wav.duration_seconds * 1000
# print('묵음 필터 wav_len : ', wav_len)
avg_len = wav_len / 2
if avg_len > (max_time * 1000):
start_duration = avg_len - ((max_time * 1000) / 2)
end_duration = avg_len + ((max_time * 1000) / 2)
else:
start_duration = 0
end_duration = wav_len
# print('묵음 필터 avg_len : ', avg_len)
# print('묵음 필터 start_duration : ', start_duration)
# print('묵음 필터 end_duration : ', end_duration)
my_wav = my_wav[start_duration:end_duration]
# 위 묵음 필터 처리 후 재결합 된 chunks를 wav로 저장 한다.
# prefix를 filled_로 설정
my_wav.export('filled_' + wav_file_name, format="wav")
else:
# 빈 파일일 때, pefix를 empty_로 설정
my_wav.export('empty_' + wav_file_name, format="wav")
그러면 기존 wav가 voice.wav일 경우,
빈 wav라면 empty_voice.wav, 그렇지 않은 wav라면 filled_voice.wav로 저장되는 make_wav 함수를 생성해 보았다.
reduce를 사용할 때, import를 해줘야하지만 안해줘도 되는 파이썬 버전이 있음.
from functools import reduce
나는 사일런스하게 밥을 잘 묵음.ㅋ
'Python' 카테고리의 다른 글
[Python 기초] 로또번호 API 사용하기. (0) | 2023.04.28 |
---|---|
ffmpeg - pcm확장자의 음성파일을 wav로 변환시키자. (0) | 2022.09.17 |
댓글