[AI] Google Gemini의 멀티모달을 사용하여 유튜브 영상 자막 자동 생성하기steemCreated with Sketch.

in kr-dev •  4 months ago 

이 글에서는 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 형식으로 자막 출력

이 코드는 다음과 같은 작업을 수행합니다:

  1. YouTube 객체를 생성하여 지정된 URL의 영상 정보를 가져옵니다.
  2. 해당 영상의 한국어("a.ko") 자막을 선택합니다.
  3. 선택된 자막을 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("다운로드 완료!")

이 코드는 다음과 같은 작업을 수행합니다:

  1. 다운로드할 영상의 해상도를 가장 낮은 것으로 선택합니다. 이는 처리 속도를 높이기 위함입니다.
  2. 선택한 스트림을 지정된 파일 이름으로 다운로드합니다.
  3. 다운로드 진행 상황과 완료를 콘솔에 출력합니다.

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)

이 코드는 다음과 같은 작업을 수행합니다:

  1. 로컬에 저장된 비디오 파일을 Gemini 서버에 업로드합니다.
  2. 업로드된 파일의 처리가 완료될 때까지 10초 간격으로 상태를 확인합니다.
  3. 처리가 완료되면 파일 정보를 출력합니다.

코드 실행 결과

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)

이 코드는 다음과 같은 작업을 수행합니다:

  1. Gemini 모델에 대한 지시사항(시스템 프롬프트)을 정의합니다.
  2. Gemini-1.5 Pro 모델을 초기화합니다.
  3. 시스템 프롬프트와 업로드된 비디오 파일을 입력으로 제공하여 콘텐츠 생성을 요청합니다.
  4. 안전 설정과 타임아웃 옵션을 적용합니다.
  5. 생성된 자막을 출력합니다.

코드 실행 결과

Gemini로 생성한 자막과 유튜브에서 제공하는 자동 자막 비교

Gemini를 사용하여 생성한 자막과 유튜브에서 제공하는 자동 자막을 비교해보면 몇 가지 흥미로운 차이점을 발견할 수 있습니다:

  1. 내용의 풍부성: Gemini로 생성한 자막은 유튜브의 자동 자막보다 내용이 조금 더 풍부한 경향이 있습니다. Gemini는 단순히 음성을 텍스트로 변환하는 것을 넘어, 영상의 맥락을 이해하고 더 자세한 설명을 제공하는 경우가 있습니다.
  2. 맥락 이해: Gemini는 영상의 시각적 요소와 음성을 함께 분석하여 더 정확한 맥락 파악이 가능합니다. 이로 인해 전문 용어나 고유명사의 인식 정확도가 더 높을 수 있습니다.
  3. 문장 구조: Gemini로 생성한 자막은 더 자연스러운 문장 구조를 가지는 경향이 있습니다. 유튜브 자동 자막이 단순히 단어를 나열하는 경우가 있다면, Gemini는 더 문법적으로 정확하고 읽기 쉬운 문장을 만들어냅니다.
  4. 비언어적 정보: Gemini는 때때로 배경 음악, 효과음, 또는 화면에 표시되는 텍스트 등 비언어적 정보를 자막에 포함시키기도 합니다. 이는 청각장애인 시청자들에게 더 풍부한 시청 경험을 제공할 수 있습니다.
  5. 일관성: Gemini로 생성한 자막은 전체적으로 더 일관된 스타일과 톤을 유지하는 경향이 있습니다. 이는 긴 영상을 시청할 때 더 나은 사용자 경험을 제공할 수 있습니다.
  6. 오류 처리: 음성 인식이 어려운 부분(예: 배경 소음이 큰 구간)에서 Gemini는 맥락을 이용해 더 정확한 추측을 할 수 있습니다. 반면 유튜브 자동 자막은 이런 경우 종종 오류를 그대로 표시하거나 해당 부분을 생략합니다.

그러나 Gemini로 생성한 자막이 항상 우수한 것은 아닙니다. 때로는 과도한 해석이나 불필요한 정보 추가로 인해 원래의 내용과 차이가 날 수 있습니다. 따라서 최종적으로는 사람의 검토와 수정 과정이 필요할 수 있습니다.

이러한 비교 결과는 AI 기술의 발전을 보여주는 동시에, 각 도구의 특성을 이해하고 적절히 활용하는 것이 중요함을 시사합니다.

결론

이 튜토리얼을 통해 Google Gemini의 멀티모달 기능을 활용하여 유튜브 영상의 자막을 자동으로 생성하는 방법을 살펴보았습니다. 이 기술은 콘텐츠 제작자, 교육자, 그리고 접근성 향상을 위해 노력하는 모든 이들에게 유용할 것입니다.

향후 개선 방안으로는 다음과 같은 것들을 고려해볼 수 있습니다:

  1. 생성된 자막의 정확도 평가 및 개선
  2. 다양한 언어로의 자동 번역 기능 추가
  3. 타임스탬프 정확도 향상을 위한 알고리즘 개발

AI 기술의 발전에 따라 이러한 자동화 도구들이 더욱 정교해지고 실용적으로 변화할 것으로 기대됩니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.

이것두 따라 해볼 시간이 되면 좋겠습니다.
즐거운 주말 되십시오.

유튜브 영상을 자동으로 요약해 뉴스레터를 발송하는 AI 봇을 만들수 있는지 연구하고 있어요.
가야태자님도 즐거운 주말 보내세요! 😊