카테고리 없음

유투브 영상으로 STT, 번역 ,TTS 가보자구

강블루 2023. 10. 20. 00:11

요즘 Transformer랑 STT, TTS 분야에 관심이 생겨 간단하게 구현을 해보고 본격적으로 파보고 싶어서 코랩 환경에서 간단하게 구현을 해보았다.

 

<진행순서>

 

1) 한국어 유투브 영상을 wav 파일로 다운한다

2) wav 파일을 텍스트로 변환한다

3) 한국어 텍스트를 영어로 번역한다

4) 텍스트를 다시 wav 파일로 변환한다

 

 

그럼 코드 실습 가보자구

 

!pip install pytube
!pip install -qq git+https://github.com/openai/whisper.git
!pip install SpeechRecognition
!pip install gtts
!pip install googletrans==4.0.0-rc1

from pytube import YouTube
import os
from moviepy.editor import *
import whisper
import speech_recognition as sr

<유투브 영상 다운 및 파일명 변경>

DOWNLOAD_FOLDER = "./"
url = "https://www.youtube.com/watch?v=4Fnitdr3EVk" # 예시 url
yt = YouTube(url)
stream = yt.streams.get_highest_resolution()
stream.download(DOWNLOAD_FOLDER)

files = os.listdir()
print(files)

for filename in files:
    if filename.endswith(".mp4"):
        new_filename = "input_v.mp4"
        os.rename(os.path.join(filename), os.path.join(new_filename))
        print(f"파일 이름이 {filename}에서 {new_filename}으로 변경되었습니다.")
        
<영상에서 음성 추출>

video = VideoFileClip("input_v.mp4")
audio = video.audio
audio.write_audiofile("input_s.wav")
audio.close()

<음성을 텍스트로 변환>

#방법1
model = whisper.load_model('base')
result = model.transcribe('input_s.wav') #Whisper ASR 사용해서 음성파일에서 텍스트로 변환 수행
result['text']

# 방법2
# 음성 인식 객체 초기화
recognizer = sr.Recognizer()

# 오디오 파일 로드
with sr.AudioFile('input_s.wav') as source:
    audio_data = recognizer.record(source)

# Google Web Speech API를 사용하여 오디오 데이터를 텍스트로 변환
try:
    text = recognizer.recognize_google(audio_data, language='ko-KR')
    print("Transcript:", text)
except sr.UnknownValueError:
    print("Google Web Speech API could not understand audio")
except sr.RequestError:
    print("Google Web Speech API request failed")

print(text)

<한국어를 영어로 번역>

from googletrans import Translator

# 번역기 객체 생성
translator = Translator()

# 텍스트를 영어로 번역
translated_text = translator.translate(text, src='ko', dest='en').text
print(translated_text)

<텍스트를 음성으로 변환>

from gtts import gTTS

tts = gTTS(text=translated_text, lang='en')
tts.save("output_s.wav")