A_V

AI 숏츠 비디오 자동 생성기 - 2025년 6월 2일 작업 요약

Solo.dev 2025. 6. 3. 00:36
AI 숏츠 비디오 자동 생성기 - 2025년 6월 2일 작업 요약

🤖 AI 숏츠 비디오 자동 생성기: 2025년 6월 3일 작업 요약

✅ 완료된 작업

  1. 스크립트 생성 (script_generator.py)
    • OpenAI API를 연결하여 사용자가 입력한 5가지 옵션을 처리:
    • 주제: 예: "미래 도시의 하루"
    • 핵심 내용: 예: "AI와 로봇이 공존하는 활기찬 도시 풍경"
    • 장면 수: 예: 3개 장면
    • 캡션 언어: 예: 한국어
    • 비디오 스타일 가이드: videostyle/groovy_vlog_style.txt
    • script_generator.py에서 OpenAI API를 호출하여 각 장면에 대해 image_prompt (영어, 이미지 생성용)와 caption (한국어, 내레이션 및 자막용)을 생성.
    • 출력: JSON 형식, 각 장면은 image_promptcaption 키 포함.
  2. TTS 파일 생성 (text_to_speech.py)
    • 생성된 captiontext_to_speech.py로 전달.
    • ElevenLabs API를 사용해 각 caption에 해당하는 TTS 오디오 파일 생성.
    • 오디오 파일은 assets/generated_temp/ 폴더에 저장.
    • 오디오 길이(초)를 반환하여 자막 동기화에 활용 가능.
  3. 자막 생성 (subtitle_handler.py)
    • subtitle_handler.py를 통해 captionTTS 오디오 길이를 기반으로 자막 클립(TextClip) 생성.
    • 자막 스타일은 configs/의 설정 파일(예: default_style_config.json) 또는 videostyle/groovy_vlog_style.txt 참조.
    • 테스트 완료: 자막 클립 생성 성공, 하지만 실제 비디오에 적용 미완료.
    • 미적용 이유: 비디오 생성을 위한 video_processor.py 미구현.

📊 현재 상태

  • 완료된 모듈:
    • script_generator.py: OpenAI API로 스크립트 및 캡션 생성.
    • text_to_speech.py: ElevenLabs API로 TTS 오디오 생성.
    • subtitle_handler.py: 자막 클립 생성 테스트 완료.
  • 미완성 모듈:
    • video_processor.py: 비디오 생성 및 편집 로직.
    • audio_processor.py: 배경음악 및 효과음 통합.
    • utils.py: 공용 유틸리티 함수.
    • main.py: 전체 워크플로우 조율.

🚀 다음 단계

  1. Stable Diffusion으로 이미지 생성:
    • script_generator.pyimage_prompt를 사용해 각 장면의 이미지를 생성.
    • 로컬에서 Stable Diffusion 모델 실행 (models/stable_diffusion/).
    • 생성된 이미지를 assets/generated_temp/에 저장.
  2. 비디오 편집 자동화 (video_processor.py):
    • MoviePyOpenCV로 이미지, TTS, 자막 클립 조합.
    • videostyle/groovy_vlog_style.txt 스타일 적용 (점프컷, 와이프 전환, 손글씨 폰트 효과).
    • 최종 비디오를 output/ 폴더에 렌더링.
  3. 오디오 통합 (audio_processor.py):
    • PydubLibrosaTTS와 배경음악 혼합.
    • noisereduce로 오디오 품질 개선.
  4. 메인 스크립트 (main.py):
    • 사용자 입력(주제, 내용, 장면 수, 캡션 언어, 스타일 가이드)을 받아 워크플로우 조율.
    • 모든 모듈 통합.

📝 코드 예시

아래는 main.py의 스케치로, 전체 워크플로우를 조율하는 예시입니다.


import argparse
from core.script_generator import ScriptGenerator
from core.text_to_speech import generate_audio_elevenlabs
from core.subtitle_handler import create_subtitle_clips

def main():
    parser = argparse.ArgumentParser(description="AI 숏츠 비디오 자동 생성기")
    parser.add_argument("--config", required=True, help="설정 파일 경로")
    parser.add_argument("--style-guide", required=True, help="비디오 스타일 가이드 경로")
    parser.add_argument("--topic", required=True, help="비디오 주제")
    parser.add_argument("--content", required=True, help="핵심 내용")
    parser.add_argument("--num-scenes", type=int, default=3, help="생성할 장면 수")
    parser.add_argument("--caption-language", default="Korean", help="캡션 언어")
    args = parser.parse_args()

    # 스크립트 생성
    generator = ScriptGenerator()
    scenes = generator.generate_scenes(args.topic, args.content, args.num_scenes, args.caption_language, args.style_guide)

    # TTS 및 자막 생성
    for scene in scenes:
        audio_path, duration = generate_audio_elevenlabs(scene["caption"], f"assets/generated_temp/scene_{id}.wav", voice_id="YOUR_VOICE_ID")
        scene["audio_duration"] = duration
        create_subtitle_clips([scene], subtitle_style_params={})