pyannote-audio 를 이용한 diarization 을 진행하는 과정에서 wav 파일을 다루기 위해 pydub 를 공부한 내용을 정리한다.
1. 설치
pip install pydub
2. 기본사용법
from pydub import AudioSegment
# Open file
song = AudioSegment.from_mp3('song.mp3')
# Slice audio
# pydub는 milliseconds 단위를 사용한다
ten_seconds = 10 * 1000
one_min = ten_seconds * 6
first_10_seconds = song[:ten_seconds]
last_5_seconds = song[-5000:]
# up/down volumn
beginning = first_10_seconds + 6
# Save the result
# can give parameters-quality, channel, etc
beginning.exoprt('result.flac', format='flac', parameters=["-q:a", "10", "-ac", "1"])
pydub 를 이용하여 wav 를 가져오고 다루는데 있어서 일반적인 배열처럼 사용이 가능하다.
wav import
rawAudio = AudioSegment.from_wav("파일이름이 포함된 파일경로")
rawAudio = AudioSegment.from_wav(targetDirPath + fileName[0] + ".wav")
wav 이어붙이기 및 export
diaLen = len(diarization.for_json()['content'])
spk00Wav = AudioSegment.empty()
spk01Wav = AudioSegment.empty()
for i in range(diaLen):
startTime = int(round(diarization.for_json()['content'][i]['segment']['start'] * 1000))
endTime = int(round(diarization.for_json()['content'][i]['segment']['end'] * 1000))
print(startTime, endTime) # ms 단위로 치환된 값이다
if diarization.for_json()['content'][i]['label'] == 'SPEAKER_00':
# 일반적인 배열 연산으로 오디오 붙여넣기가 가능
spk00Wav += rawAudio[startTime:endTime]
else:
spk01Wav += rawAudio[startTime:endTime]
spk00FileName = 'spk00_' + path[1] + '_' + path[2] + '_' + path[3] + '_' + path[4] + '_' + fileName[0] + '.wav'
spk01FileName = 'spk01_' + path[1] + '_' + path[2] + '_' + path[3] + '_' + path[4] + '_' + fileName[0] + '.wav'
spk00Wav.export('./splitTest/' + spk00FileName, format = 'wav')
spk01Wav.export('./splitTest/' + spk01FileName, format = 'wav')
'Deep Learning > Python' 카테고리의 다른 글
[Python / Pandas] python 에서 엑셀 읽고 수정하고 저장하기 (0) | 2023.01.30 |
---|---|
[Python] Python Dictionary to JSON (0) | 2023.01.17 |
[Python] numpy arange 와 range 차이 (0) | 2022.09.23 |