이 글에서는 Google의 최신 AI 모델인 Gemini를 사용하여 유튜브 영상의 자막을 자동으로 생성하는 방법을 알아보겠습니다. 이 과정을 통해 AI의 멀티모달 기능이 어떻게 실제 응용되는지 살펴볼 수 있습니다.
필요한 파이썬 패키지를 설치합니다.
먼저, 필요한 파이썬 패키지들을 설치합니다. 터미널에서 다음 명령어를 실행하세요:
pip install pytubefix python-dotenv google-generativeai
각 패키지의 역할은 다음과 같습니다:
pytubefix
: 유튜브 영상을 다운로드하기 위한 라이브러리입니다.python-dotenv
: 환경 변수를 관리하는 데 사용됩니다.google-generativeai
: Google의 생성형 AI 모델을 사용하기 위한 공식 파이썬 클라이언트입니다.
유튜브 자동 자막 다운로드하기
유튜브에서 자동으로 생성된 자막을 다운로드하는 방법을 알아보겠습니다. 이렇게 다운로드한 자막은 나중에 Gemini가 생성한 자막과 비교해볼 수 있습니다.
from pytubefix import YouTube
youtube_url = "https://www.youtube.com/watch?v=iY1sAaLw3LY"
yt = YouTube(youtube_url)
captions = yt.captions["a.ko"]
print(captions.generate_srt_captions()) # SRT 형식으로 자막 출력
이 코드는 다음과 같은 작업을 수행합니다:
YouTube
객체를 생성하여 지정된 URL의 영상 정보를 가져옵니다.- 해당 영상의 한국어("a.ko") 자막을 선택합니다.
- 선택된 자막을 SRT 형식으로 변환하여 출력합니다.
유튜브 영상 다운로드하기
이제 실제 영상을 다운로드하여 Gemini에 입력으로 사용할 준비를 합니다.
TEMP_VIDEO_FILENAME = "temp_video.mp4"
ys = yt.streams.get_lowest_resolution()
print(f"다운로드 중: {yt.title}")
ys.download(filename=TEMP_VIDEO_FILENAME)
print("다운로드 완료!")
이 코드는 다음과 같은 작업을 수행합니다:
- 다운로드할 영상의 해상도를 가장 낮은 것으로 선택합니다. 이는 처리 속도를 높이기 위함입니다.
- 선택한 스트림을 지정된 파일 이름으로 다운로드합니다.
- 다운로드 진행 상황과 완료를 콘솔에 출력합니다.
Google Gemini로 자막 생성 요청하기
이제 다운로드한 영상을 Gemini에 입력으로 제공하여 자막을 생성해보겠습니다.
먼저, Gemini API를 사용하기 위한 설정을 합니다:
import os
import google.generativeai as genai
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
이 코드는 .env
파일에서 API 키를 로드하고 Gemini API를 구성합니다. 보안을 위해 API 키를 직접 코드에 입력하지 않고 환경 변수를 사용하는 것이 좋습니다.
다음으로, 다운로드한 비디오 파일을 Gemini에 업로드합니다:
video_file = genai.upload_file(path=TEMP_VIDEO_FILENAME)
import time
while video_file.state.name == "PROCESSING":
time.sleep(10)
video_file = genai.get_file(video_file.name)
print(video_file)
이 코드는 다음과 같은 작업을 수행합니다:
- 로컬에 저장된 비디오 파일을 Gemini 서버에 업로드합니다.
- 업로드된 파일의 처리가 완료될 때까지 10초 간격으로 상태를 확인합니다.
- 처리가 완료되면 파일 정보를 출력합니다.
Gemini의 안전 설정(safety_settings)을 아래와 같이 구성하여 부적절한 콘텐츠 생성시 응답이 차단되는 것을 방지합니다.
from google.generativeai.types import HarmCategory, HarmBlockThreshold
safety_settings = [
{
"category": HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
"threshold": HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
{
"category": HarmCategory.HARM_CATEGORY_HATE_SPEECH,
"threshold": HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
{
"category": HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
"threshold": HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
{
"category": HarmCategory.HARM_CATEGORY_HARASSMENT,
"threshold": HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
]
이 설정은 위험한 콘텐츠, 혐오 발언, 성적으로 노골적인 내용, 괴롭힘 등의 카테고리에 대해 높은 수준의 위험만을 차단하도록 지정합니다.
마지막으로, Gemini 모델에 자막 생성을 요청합니다:
SYSTEM_PROMPT = """당신은 고도로 정확한 음성 인식 및 자막 생성 AI입니다.
주어진 영상에서 모든 음성을 정확하게 인식하고 텍스트 자막으로 변환해주세요.
최종 결과물로 고품질의 정확한 자막을 제공해주시기 바랍니다.
"""
model = genai.GenerativeModel(model_name="models/gemini-1.5-pro")
response = model.generate_content(
[SYSTEM_PROMPT, video_file],
safety_settings=safety_settings,
request_options={"timeout": 600},
)
print(response.text)
이 코드는 다음과 같은 작업을 수행합니다:
- Gemini 모델에 대한 지시사항(시스템 프롬프트)을 정의합니다.
- Gemini-1.5 Pro 모델을 초기화합니다.
- 시스템 프롬프트와 업로드된 비디오 파일을 입력으로 제공하여 콘텐츠 생성을 요청합니다.
- 안전 설정과 타임아웃 옵션을 적용합니다.
- 생성된 자막을 출력합니다.
Gemini로 생성한 자막과 유튜브에서 제공하는 자동 자막 비교
Gemini를 사용하여 생성한 자막과 유튜브에서 제공하는 자동 자막을 비교해보면 몇 가지 흥미로운 차이점을 발견할 수 있습니다:
- 내용의 풍부성: Gemini로 생성한 자막은 유튜브의 자동 자막보다 내용이 조금 더 풍부한 경향이 있습니다. Gemini는 단순히 음성을 텍스트로 변환하는 것을 넘어, 영상의 맥락을 이해하고 더 자세한 설명을 제공하는 경우가 있습니다.
- 맥락 이해: Gemini는 영상의 시각적 요소와 음성을 함께 분석하여 더 정확한 맥락 파악이 가능합니다. 이로 인해 전문 용어나 고유명사의 인식 정확도가 더 높을 수 있습니다.
- 문장 구조: Gemini로 생성한 자막은 더 자연스러운 문장 구조를 가지는 경향이 있습니다. 유튜브 자동 자막이 단순히 단어를 나열하는 경우가 있다면, Gemini는 더 문법적으로 정확하고 읽기 쉬운 문장을 만들어냅니다.
- 비언어적 정보: Gemini는 때때로 배경 음악, 효과음, 또는 화면에 표시되는 텍스트 등 비언어적 정보를 자막에 포함시키기도 합니다. 이는 청각장애인 시청자들에게 더 풍부한 시청 경험을 제공할 수 있습니다.
- 일관성: Gemini로 생성한 자막은 전체적으로 더 일관된 스타일과 톤을 유지하는 경향이 있습니다. 이는 긴 영상을 시청할 때 더 나은 사용자 경험을 제공할 수 있습니다.
- 오류 처리: 음성 인식이 어려운 부분(예: 배경 소음이 큰 구간)에서 Gemini는 맥락을 이용해 더 정확한 추측을 할 수 있습니다. 반면 유튜브 자동 자막은 이런 경우 종종 오류를 그대로 표시하거나 해당 부분을 생략합니다.
그러나 Gemini로 생성한 자막이 항상 우수한 것은 아닙니다. 때로는 과도한 해석이나 불필요한 정보 추가로 인해 원래의 내용과 차이가 날 수 있습니다. 따라서 최종적으로는 사람의 검토와 수정 과정이 필요할 수 있습니다.
이러한 비교 결과는 AI 기술의 발전을 보여주는 동시에, 각 도구의 특성을 이해하고 적절히 활용하는 것이 중요함을 시사합니다.
결론
이 튜토리얼을 통해 Google Gemini의 멀티모달 기능을 활용하여 유튜브 영상의 자막을 자동으로 생성하는 방법을 살펴보았습니다. 이 기술은 콘텐츠 제작자, 교육자, 그리고 접근성 향상을 위해 노력하는 모든 이들에게 유용할 것입니다.
향후 개선 방안으로는 다음과 같은 것들을 고려해볼 수 있습니다:
- 생성된 자막의 정확도 평가 및 개선
- 다양한 언어로의 자동 번역 기능 추가
- 타임스탬프 정확도 향상을 위한 알고리즘 개발
AI 기술의 발전에 따라 이러한 자동화 도구들이 더욱 정교해지고 실용적으로 변화할 것으로 기대됩니다.
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Upvoted! Thank you for supporting witness @jswit.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
이것두 따라 해볼 시간이 되면 좋겠습니다.
즐거운 주말 되십시오.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
유튜브 영상을 자동으로 요약해 뉴스레터를 발송하는 AI 봇을 만들수 있는지 연구하고 있어요.
가야태자님도 즐거운 주말 보내세요! 😊
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit