[Python] 음성 관련 라이브러리 (pyannote,pedalboard,noisereduce,pydub,pytube)
2024. 6. 4. 16:03ㆍ파이썬
1. pytube,pydub
알게된 경로: 유튜브 영상의 음원만 가지고 테스트하길 원하다 찾았음
Pytube는 youtube 영상 다운에 적합
Pydub은 음성 처리에 적합 (노이즈 줄이기, 증폭, 변환 등) 기능을 가지고 있음
#pip install pytube
#pip install pydub
from pytube import YouTube
from pydub import AudioSegment
# 유튜브 동영상 URL
url = '원하는 유튜브 영상 URL' (유튜브 영상 우측 : 현재 주소 복사 or 동영상 주소 복사)
# 유튜브 동영상 다운로드
yt = YouTube(url)
stream = yt.streams.filter(only_audio=True).first()
output_path = stream.download(filename='output_audio.mp4')
# wav파일이 필요시
# 오디오 추출 및 wav 형식으로 변환
audio = AudioSegment.from_file(output_path, format="mp4")
audio_output_path = 'ko_s2.wav'
audio.export(audio_output_path, format='wav')
주의사항
1. AudioSegment는 ffmpeg라는 파일을 설치해야된다.
(라이브러리도 있긴한데 OS문제로 잘 되지 않아 다운받는걸 추천)
2. wav파일을 읽어올경우
from_wav()라는 메소드가 있지만 에러가 너무 많이뜸
>> 그냥 from_file() 사용 추천
cf) FFMPEG 설치방법 (윈도우 ver)
이 형님이 아주 잘 알려준다.
https://doa-oh.tistory.com/170
2. noisereduce
알게된 경로: audiosegment라이브러리의 low_pass_filter로 감소시키다가 좀 다른 방법은 없나하고 찾게 되었다.
장점: 얼마나 노이즈를 줄였는지 matplot으로 확인가능 / 상대적으로 간단한 메소드
단점: input파일은 무조건 wav만 가능 (mp3,mp4) 불가
예시)
3. pedalboard(spotify)
라이브러리 기능 : pedalboard읽기, 쓰기, 렌더링, 효과 추가 등 오디오 작업을 위한 Python 라이브러리입니다. 가장 널리 사용되는 오디오 파일 형식과 다양한 일반 오디오 효과를 즉시 지원하며, 타사 소프트웨어 악기 및 효과를 로드하기 위해 VST3® 및 Audio Unit 형식을 사용할 수도 있습니다.
>> 기타 효과음 추가, 믹싱등 가능한 라이브러리
장점: 소리증폭, 노이즈를 1개의 파이프라인으로 해결 가능 output은 mp3,mp4,wav 가능
단점: input파일은 wav만 가능
from pedalboard.io import AudioFile
from pedalboard import *
import noisereduce as nr # pip install noiseredure
from pydub import AudioSegment
import matplotlib.pyplot as plt
import numpy as np
"""
NOTE
제한점
Input : wav파일만 가능
Output : wav,mp3 둘다 가능
장점
증폭도 같이 들어가있음
그래프로 확인해봐야라듯
"""
def test ():
sr=44100
with AudioFile('test.wav').resampled_to(sr) as f:
audio = f.read(f.frames)
print(audio)
reduced_noise = nr.reduce_noise(y=audio, sr=sr, stationary=True, prop_decrease=0.75)
print(reduced_noise)
board = Pedalboard([
#노이즈 제거 (임계값, 비율, 종료시간
NoiseGate(threshold_db=-30, ratio=1.5, release_ms=250),
Compressor(threshold_db=-16, ratio=2.5),
LowShelfFilter(cutoff_frequency_hz=400, gain_db=10, q=1),
Gain(gain_db=10)
])
effected = board(audio, sr)
with AudioFile('1123123.mp3', 'w', sr, effected.shape[0]) as f:
f.write(effected)
# 별첨 : mp4-> wav로 변경하는거
def convert_mpeg_to_wav(mpeg_filename,output_path):
audio = AudioSegment.from_file(mpeg_filename, format="mp4")
audio.export(output_path, format='wav')
728x90
'파이썬' 카테고리의 다른 글
[issue] Flask AWS close_wait 다중 발생 (0) | 2024.06.10 |
---|---|
[Python] pyannote + whisper 사용 (0) | 2024.06.04 |
[Python] flask audio file Not Loading (0) | 2024.05.30 |
[Python] Whisper 모델 이용해서 뭐라도 만들기 (0) | 2024.05.27 |
[issue] pytube 버그 발생 (0) | 2024.05.23 |