[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

 

Windows ffmpeg 코덱 설치 및 환경변수 설정하기

fmpeg란? ffmpeg는 오픈 소스 라이브러리로, 영상 및 음성 파일의 인코딩, 디코딩, 변환, 스트리밍 등을 담당합니다. 다양한 포맷을 지원하며, 대부분의 운영체제에서 사용할 수 있다. Windows에 ffmpeg

doa-oh.tistory.com

 

 

 

 

2. noisereduce

 

알게된 경로: audiosegment라이브러리의  low_pass_filter로 감소시키다가 좀 다른 방법은 없나하고 찾게 되었다.

 

장점: 얼마나 노이즈를 줄였는지 matplot으로 확인가능 / 상대적으로 간단한 메소드  

단점: input파일은 무조건 wav만 가능 (mp3,mp4) 불가

 

 

예시)

https://colab.research.google.com/github/timsainb/noisereduce/blob/master/notebooks/1.0-test-noise-reduction.ipynb#scrollTo=hhlh0hBmIZeX

 

1.0-test-noise-reduction.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

 

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