YouTube 링크에서 텍스트 추출 및 텍스트 파일 저장 (Google Cloud 활용)
핵심 개념 및 필요 기술
- YouTube Data API: YouTube 동영상 정보를 가져오기 위한 Google Cloud 서비스입니다.
- Google Cloud Text-to-Speech API: 영상의 오디오를 텍스트로 변환하는 데 사용됩니다.
- Google Cloud Storage: 변환된 텍스트를 저장할 공간을 제공합니다.
- Python: 스크립트 작성을 위한 언어 (Google Cloud 클라이언트 라이브러리 지원)
코드 구현
https://colab.research.google.com/drive/1KpguxjrDomdU4TmBAj7dAY5D4LHkXQqs
Python
import os
import googleapiclient.discovery
from google.cloud import texttospeech
from google.cloud import storage
def youtube_to_text(youtube_link, storage_bucket_name):
# YouTube Data API 인증 정보 설정 (자신의 프로젝트에 맞게 수정)
api_service_name = "youtube"
api_version = "v3"
DEVELOPER_KEY = "YOUR_API_KEY"
youtube = googleapiclient.discovery.build(
api_service_name, api_version, developerKey=DEVELOPER_KEY
)
# YouTube 동영상 ID 추출
video_id = youtube_link.split('=')[1]
# 동영상 정보 가져오기
request = youtube.videos().list(
part="snippet,contentDetails",
id=video_id
)
response = request.execute()
# 동영상 URL 가져오기
video_url = 'https://www.youtube.com/watch?v=' + video_id
# Text-to-Speech 클라이언트 생성
client = texttospeech.TextToSpeechClient()
# 오디오 파일 다운로드 (현재는 지원되지 않음)
# YouTube Data API로는 직접 오디오 파일을 다운로드할 수 없습니다.
# 대신, third-party 라이브러리나 서비스를 활용해야 합니다.
# 다운로드한 오디오 파일을 이용하여 텍스트 변환 (예시)
audio = open("audio.mp3", "rb")
audio_content = audio.read()
audio.close()
synthesis_input = texttospeech.SynthesisInput(audio=texttospeech.SynthesisInput.Audio(content=audio_content))
voice = texttospeech.VoiceSelectionParams(
language_code="ko-KR", ssml_gender=texttospeech.SsmlVoiceGender.FEMALE
)
audio_config = texttospeech.Audio Config(
audio_encoding=texttospeech.AudioEncoding.MP3
)
response = client.synthesize_speech(
request={"input": synthesis_input, "voice": voice, "audio_config": audio_config}
)
# 변환된 텍스트를 Google Cloud Storage에 저장
storage_client = storage.Client()
bucket = storage_client.bucket(storage_bucket_name)
blob = bucket.blob("output.txt")
blob.upload_from_string(response.audio_content.decode('utf-8'))
print(f"텍스트가 {storage_bucket_name} 버킷의 output.txt 파일에 저장되었습니다.")
코드 설명
- YouTube Data API를 이용하여 동영상 정보 가져오기: YouTube 링크에서 동영상 ID를 추출하고, 해당 동영상의 정보를 가져옵니다.
- Text-to-Speech API를 이용하여 텍스트 변환: 다운로드한 오디오 파일을 Text-to-Speech API를 이용하여 텍스트로 변환합니다.
- Google Cloud Storage에 저장: 변환된 텍스트를 Google Cloud Storage에 지정된 버킷에 저장합니다.
주의사항 및 추가 고려 사항
- YouTube Data API 키: 자신의 Google Cloud 프로젝트에서 API 키를 생성하여
DEVELOPER_KEY
변수에 설정해야 합니다. - 오디오 파일 다운로드: YouTube Data API로는 직접 오디오 파일을 다운로드할 수 없습니다.
pytube
와 같은 third-party 라이브러리를 사용하거나 YouTube의 다운로드 기능을 활용해야 합니다. - 텍스트 변환 정확도: Text-to-Speech API의 텍스트 변환 정확도는 음질, 배경 소음, 발음 등 다양한 요인에 따라 달라질 수 있습니다.
- 저작권: YouTube 동영상의 저작권에 유의하여 사용해야 합니다.
- 비용: Google Cloud 서비스 이용 시 발생하는 비용을 고려해야 합니다.
추가 기능 구현
- 다국어 지원: Text-to-Speech API의
language_code
를 변경하여 다양한 언어를 지원할 수 있습니다. - 오류 처리: 예외 처리를 추가하여 오류 발생 시 적절한 메시지를 출력하도록 합니다.
- 배치 처리: 여러 개의 YouTube 링크를 처리하기 위한 배치 처리 기능을 구현할 수 있습니다.
- 텍스트 후처리: 변환된 텍스트에 대한 추가적인 처리 (예: 불필요한 문자 제거, 형태소 분석)를 수행할 수 있습니다.
Pytube를 활용하여 YouTube 영상을 MP3 파일로 변환하는 코드
Pytube 라이브러리를 사용하면 간단하게 YouTube 영상을 다운로드할 수 있습니다. 특히, 오디오 스트림만 추출하여 MP3 파일로 저장하는 기능을 제공합니다.
Pythonfrom pytube import YouTube
def download_youtube_audio(youtube_link, output_filename="audio.mp3"):
"""
YouTube 영상을 MP3 파일로 다운로드하는 함수
Args:
youtube_link (str): YouTube 영상 링크
output_filename (str, optional): 저장할 파일 이름. 기본값은 "audio.mp3"
"""
try:
# YouTube 객체 생성
yt = YouTube(youtube_link)
# 가장 높은 해상도의 오디오 스트림 선택
audio = yt.streams.filter(only_audio=True).order_by('bitrate').desc().first()
# 오디오 다운로드 및 저장
out_file = audio.download(filename=output_filename)
# 출력 파일 경로 출력
print(f"다운로드 완료: {out_file}")
except Exception as e:
print(f"오류 발생: {e}")
# YouTube 링크
youtube_link = "https://youtu.be/fy_NNE7QWm0?si=yQDPIK6qT44J0ExC"
# 함수 실행
download_youtube_audio(youtube_link)
Pytube 라이브러리를 사용하면 간단하게 YouTube 영상을 다운로드할 수 있습니다. 특히, 오디오 스트림만 추출하여 MP3 파일로 저장하는 기능을 제공합니다.
Python
from pytube import YouTube
def download_youtube_audio(youtube_link, output_filename="audio.mp3"):
"""
YouTube 영상을 MP3 파일로 다운로드하는 함수
Args:
youtube_link (str): YouTube 영상 링크
output_filename (str, optional): 저장할 파일 이름. 기본값은 "audio.mp3"
"""
try:
# YouTube 객체 생성
yt = YouTube(youtube_link)
# 가장 높은 해상도의 오디오 스트림 선택
audio = yt.streams.filter(only_audio=True).order_by('bitrate').desc().first()
# 오디오 다운로드 및 저장
out_file = audio.download(filename=output_filename)
# 출력 파일 경로 출력
print(f"다운로드 완료: {out_file}")
except Exception as e:
print(f"오류 발생: {e}")
# YouTube 링크
youtube_link = "https://youtu.be/fy_NNE7QWm0?si=yQDPIK6qT44J0ExC"
# 함수 실행
download_youtube_audio(youtube_link)
코드 설명
- Pytube 라이브러리 임포트:
pytube
라이브러리를 임포트합니다. - 함수 정의:
download_youtube_audio
함수를 정의합니다. 이 함수는 YouTube 링크와 저장할 파일 이름을 입력받아 오디오를 다운로드합니다. - YouTube 객체 생성: 입력된 YouTube 링크를 사용하여
YouTube
객체를 생성합니다. - 오디오 스트림 선택:
streams.filter
메서드를 사용하여 오디오 스트림만 필터링하고, order_by('bitrate').desc().first()
를 통해 비트레이트가 가장 높은 스트림을 선택합니다. - 오디오 다운로드:
download
메서드를 사용하여 선택한 오디오 스트림을 지정된 파일 이름으로 다운로드합니다. - 오류 처리:
try-except
블록을 사용하여 오류 발생 시 예외를 처리합니다.
- Pytube 라이브러리 임포트:
pytube
라이브러리를 임포트합니다. - 함수 정의:
download_youtube_audio
함수를 정의합니다. 이 함수는 YouTube 링크와 저장할 파일 이름을 입력받아 오디오를 다운로드합니다. - YouTube 객체 생성: 입력된 YouTube 링크를 사용하여
YouTube
객체를 생성합니다. - 오디오 스트림 선택:
streams.filter
메서드를 사용하여 오디오 스트림만 필터링하고,order_by('bitrate').desc().first()
를 통해 비트레이트가 가장 높은 스트림을 선택합니다. - 오디오 다운로드:
download
메서드를 사용하여 선택한 오디오 스트림을 지정된 파일 이름으로 다운로드합니다. - 오류 처리:
try-except
블록을 사용하여 오류 발생 시 예외를 처리합니다.
실행 방법
- Pytube 설치: 터미널에서
pip install pytube
명령어를 실행하여 Pytube 라이브러리를 설치합니다. - 코드 실행: 위 코드를 Python 파일로 저장하고 실행합니다.
- Pytube 설치: 터미널에서
pip install pytube
명령어를 실행하여 Pytube 라이브러리를 설치합니다. - 코드 실행: 위 코드를 Python 파일로 저장하고 실행합니다.
주의 사항
- 저작권: YouTube 영상을 다운로드할 때는 저작권에 유의해야 합니다. 상업적인 목적으로 사용하거나 저작권자의 허가 없이 무단으로 배포하는 것은 불법입니다.
- 인터넷 환경: 인터넷 연결 상태에 따라 다운로드 속도가 달라질 수 있습니다.
- YouTube 정책: YouTube의 서비스 약관은 수시로 변경될 수 있으며, 다운로드 기능이 제한될 수 있습니다.
추가 기능:
- 다양한 파일 형식:
audio.download(filename="output.mp3", filename=True)
와 같이 filename=True
옵션을 사용하면 확장자를 지정하여 다양한 파일 형식으로 저장할 수 있습니다. - 진행률 표시:
pytube
는 다운로드 진행률을 표시하는 기능을 제공합니다. - 플레이리스트 다운로드:
pytube.Playlist
클래스를 사용하여 플레이리스트 전체를 다운로드할 수 있습니다.
참고:
- Pytube 공식 문서:
https://pytube.io/en/latest/
주의: 위 코드는 기본적인 예시이며, 실제 사용 환경에서는 더욱 복잡한 로직이 필요할 수 있습니다.
- 저작권: YouTube 영상을 다운로드할 때는 저작권에 유의해야 합니다. 상업적인 목적으로 사용하거나 저작권자의 허가 없이 무단으로 배포하는 것은 불법입니다.
- 인터넷 환경: 인터넷 연결 상태에 따라 다운로드 속도가 달라질 수 있습니다.
- YouTube 정책: YouTube의 서비스 약관은 수시로 변경될 수 있으며, 다운로드 기능이 제한될 수 있습니다.
추가 기능:
- 다양한 파일 형식:
audio.download(filename="output.mp3", filename=True)
와 같이filename=True
옵션을 사용하면 확장자를 지정하여 다양한 파일 형식으로 저장할 수 있습니다. - 진행률 표시:
pytube
는 다운로드 진행률을 표시하는 기능을 제공합니다. - 플레이리스트 다운로드:
pytube.Playlist
클래스를 사용하여 플레이리스트 전체를 다운로드할 수 있습니다.
참고:
- Pytube 공식 문서:
https://pytube.io/en/latest/
주의: 위 코드는 기본적인 예시이며, 실제 사용 환경에서는 더욱 복잡한 로직이 필요할 수 있습니다.
0 댓글