IT

Cloud Function 설정하기: YouTube 동영상 텍스트 추출 가이드

esmile1 2025. 1. 16. 09:46

Cloud Function 설정하기: YouTube 동영상 텍스트 추출 가이드

안녕하세요! 오늘은 Cloud Function을 설정하여 YouTube 동영상에서 텍스트를 추출하는 방법을 상세히 알아보겠습니다. 초보자분들도 쉽게 따라할 수 있도록 단계별로 설명해드리겠습니다.

기본 정보

작업에 사용할 URL 정보입니다:

  1. Cloud Function URL:
<https://us-central1-youtube-data-sheet.cloudfunctions.net/youtubetranscriber1>

  1. 텍스트 추출할 YouTube 동영상:
<https://www.youtube.com/watch?v=cQk5BJwy1Xw>

Cloud Function 설정하기

기본 설정

  1. Google Cloud Console에 로그인합니다.
  2. 좌측 메뉴에서 "Cloud Functions"를 선택합니다.
  3. "CREATE FUNCTION" 버튼을 클릭합니다.

런타임 환경 설정

  1. Runtime 드롭다운에서 "Python 3.10"을 선택합니다.
  2. Source Code 옵션에서 "Inline editor"를 선택합니다.
  3. Entry Point를 "transcribe_audio"로 변경합니다.

코드 작성

  1. main.py 파일을 열고 기존 코드를 모두 삭제합니다.
  2. 다음 코드를 main.py에 붙여넣습니다:
import yt_dlp
import whisper
import tempfile
import os
import json
from flask import jsonify

def transcribe_audio(request):
    # CORS 헤더 설정
    if request.method == 'OPTIONS':
        headers = {
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods': 'POST',
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Max-Age': '3600'
        }
        return ('', 204, headers)

    headers = {
        'Access-Control-Allow-Origin': '*'
    }

    # POST 요청 처리
    request_json = request.get_json()

    if not request_json or 'url' not in request_json:
        return jsonify({'error': 'No URL provided'}), 400, headers

    video_url = request_json['url']

    # YouTube 동영상 다운로드 설정
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
    }

    try:
        # 임시 파일 생성
        with tempfile.TemporaryDirectory() as temp_dir:
            ydl_opts['outtmpl'] = os.path.join(temp_dir, '%(title)s.%(ext)s')

            # 동영상 다운로드
            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                info = ydl.extract_info(video_url, download=True)
                audio_file = os.path.join(temp_dir, f"{info['title']}.mp3")

            # Whisper 모델 로드 및 텍스트 추출
            model = whisper.load_model("base")
            result = model.transcribe(audio_file)

            return jsonify(result), 200, headers

    except Exception as e:
        return jsonify({'error': str(e)}), 500, headers

requirements.txt 설정

  1. requirements.txt 파일을 열고 기존 내용을 삭제합니다.
  2. 다음 내용을 붙여넣습니다:
yt-dlp
openai-whisper
google-cloud-functions

배포 설정

  1. "DEPLOY" 버튼을 클릭하기 전에 모든 설정을 다시 확인합니다.
  2. Entry Point가 "transcribe_audio"로 설정되어 있는지 확인합니다.
  3. Runtime이 "Python 3.10"으로 설정되어 있는지 확인합니다.
  4. requirements.txt 파일 내용이 정확한지 확인합니다.
  5. "DEPLOY" 버튼을 클릭하여 함수를 배포합니다.

테스트하기

브라우저에서 테스트

  1. Chrome 브라우저를 엽니다.
  2. F12를 눌러 개발자 도구를 엽니다.
  3. Console 탭을 선택합니다.
  4. 다음 코드를 입력합니다:
fetch('<https://us-central1-youtube-data-sheet.cloudfunctions.net/youtubetranscriber1>', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    url: '<https://www.youtube.com/watch?v=cQk5BJwy1Xw>'
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

결과 확인

  1. Network 탭에서 요청이 성공적으로 전송되었는지 확인합니다.
  2. 응답 데이터에 추출된 텍스트가 포함되어 있는지 확인합니다.

문제 해결

CORS 오류 발생 시

  1. main.py 코드의 CORS 헤더 설정이 올바른지 확인합니다.
  2. 브라우저의 개발자 도구에서 오류 메시지를 확인합니다.

배포 오류 발생 시

  1. Cloud Console의 로그를 확인합니다.
  2. requirements.txt 파일의 내용이 정확한지 다시 확인합니다.
  3. Python 버전이 3.10으로 설정되어 있는지 확인합니다.

실행 오류 발생 시

  1. YouTube URL이 올바른지 확인합니다.
  2. Cloud Function의 메모리 할당이 충분한지 확인합니다.
  3. 실행 시간 제한이 적절한지 확인합니다.
  4. 모든 설정이 올바른지 다시 한 번 검토합니다.

주의사항

  1. 보안: API 키나 민감한 정보는 절대 공개하지 마세요.
  2. 리소스 관리: Cloud Function의 리소스 사용량을 모니터링하세요.
  3. 비용 관리: 사용량에 따른 비용이 발생할 수 있으니 주의하세요.
  4. 오류 처리: 모든 가능한 오류 상황에 대비한 처리 로직을 구현하세요.

추가 팁

성능 최적화

  • 동영상 길이가 긴 경우 메모리 할당을 늘리세요.
  • 실행 시간 제한을 적절히 설정하세요.
  • 필요한 경우 더 강력한 Whisper 모델을 사용하세요.

모니터링

  • Cloud Console에서 함수의 실행 상태를 주기적으로 확인하세요.
  • 오류 로그를 모니터링하여 문제를 조기에 발견하세요.
  • 사용량 통계를 확인하여 비용을 관리하세요.

결론

이 가이드를 따라하면 Cloud Function을 사용하여 YouTube 동영상에서 텍스트를 추출할 수 있습니다. 처음에는 복잡해 보일 수 있지만, 단계별로 차근차근 진행하면 충분히 구현할 수 있습니다.

 

문제가 발생하면 당황하지 말고, 제시된 문제 해결 방법을 하나씩 시도해보세요. 대부분의 문제는 설정이나 코드의 작은 오류에서 발생하므로, 꼼꼼히 확인하면 해결할 수 있습니다.

 

이 기술을 활용하면 다양한 YouTube 동영상의 내용을 텍스트로 변환하여 활용할 수 있습니다. 화이팅!