영상 콘텐츠를 위한 AI 더빙 도구 만들기
요약
본 기사는 영상 콘텐츠를 다른 언어/청중에게 재활용하기 위한 AI 더빙 도구 구축 과정을 안내합니다. TTS 및 보이스 클로닝 서비스를 활용하여 스크립트 추출, 음성 생성, 오디오 병합까지의 파이프라인을 자동화하는 방법을 다룹니다.
핵심 포인트
- TTS와 보이스 클로닝으로 수동 더빙 과정 자동화 가능
- ElevenLabs는 고품질 TTS 및 REST API를 제공하는 핵심 플랫폼
- Whisper 또는 ASR 서비스를 이용해 영상에서 스크립트 추출
- 타임스탬프 기반으로 생성된 오디오 세그먼트를 비디오에 재합성
왜 AI 더빙이 중요한가
만약 당신이 튜토리얼, 브이로그 또는 인터뷰 영상을 다른 언어나 청중을 위해 재활용하려고 시도해 본 적이 있다면, 수동 더빙 과정이 얼마나 고통스러울 수 있는지 알 것입니다. 스크립트를 번역하고, 보이스 오버를 녹음하고, 타이밍을 맞추고, 그 다음 비디오를 다시 인코딩해야 합니다. 최신 text-to-speech (TTS) 및 voice cloning 서비스와 함께라면, 몇 줄의 코드로 이러한 파이프라인 대부분을 자동화할 수 있습니다.
본 기사에서는 다음과 같은 기능을 가진 가벼운 AI 더빙 도구를 구축하는 과정을 안내합니다:
- 영상에서 음성 스크립트를 추출하거나 (또는 기존 자막 파일을 사용).
- 스크립트를 자연스러운 목소리를 복제할 수 있는 TTS 서비스로 전송.
- 생성된 오디오를 원본 비디오에 병합하면서 싱크(sync)를 유지합니다.
이 프로젝트의 핵심은 **ElevenLabs**입니다. 이곳은 보이스 클로닝, SSML 지원 및 간단한 REST API를 제공하는 고품질 TTS 플랫폼입니다. 데모에서는 무료 티어를 사용하겠지만, 동일한 코드는 더 긴 오디오 제한과 사용자 지정 음성 훈련을 제공하는 유료 플랜에서도 작동합니다.
전제 조건
| 필요한 것 | 이유 |
|---|---|
| Python 3.9+ | 파이프라인 스크립팅용. |
| ... | |
| 당신은 다음 명령어로 Python 의존성을 설치할 수 있습니다: |
pip install requests tqdm python-dotenv
우리는 코드를 간단하게 유지하고 무거운 프레임워크는 피할 것입니다. HTTP 호출에는 requests만, 진행률 표시줄에는 tqdm을 사용할 것입니다.
1. 스크립트 가져오기 (Grab the Transcript)
이미 SRT 또는 VTT 파일이 있다면 이 단계를 건너뛸 수 있습니다. 그렇지 않다면, 오디오를 추출하여 speech-to-text 서비스로 전송해 봅시다. 간결함을 위해 무료 Whisper API를 사용하겠습니다 (또는 로컬에서 whisper.cpp를 실행할 수 있습니다).
import subprocess
from pathlib import Path
...
이제 audio.wav를 Whisper(또는 다른 ASR)에 공급하여 일반 텍스트 스크립트를 얻을 수 있습니다. 출력은 타임스탬프가 포함된 문장 목록이어야 합니다. 이 타임스탬프는 나중에 더빙이 싱크를 유지하는 데 필요합니다.
2. ElevenLabs TTS 호출
ElevenLabs는 두 가지 유용한 엔드포인트를 제공합니다:
/v1/text-to-speech/{voice_id}– 일반 텍스트에서 음성 생성./v1/text-to-speech/{voice_id}/stream– 오디오를 직접 스트리밍 (대용량 파일에 유용).
아래는 텍스트 청크를 전송하고 MP3 파일을 받는 최소한의 래퍼 코드입니다. 우리는 스크립트를 문장(또는 자막 블록)으로 분할하여 나중에 각 오디오 세그먼트를 원래 타이밍과 정렬할 수 있도록 할 것입니다.
import os
import requests
from tqdm import tqdm
...
팁: 사용자 지정 클론 음성을 가지고 있다면, voice_id를 ElevenLabs에 음성 샘플을 업로드한 후 받는 ID로 교체하세요. 동일한 엔드포인트는 사용자가 소유한 모든 음성에 작동합니다.
3. 오디오를 비디오에 다시 합치기 (Stitch Audio Back to Video)
이제 각 문장을 나타내는 MP3 파일 디렉터리를 가지고 있습니다. 우리는 ASR 단계에서 포착한 타임스탬프에 따라 이들을 타임라인에 배치해야 합니다.
import json
import subprocess
...
마지막으로, 원래 오디오 트랙을 새로 생성된 더빙 음성으로 대체합니다:
def mux_video(original_video: str, new_audio: str, out_video: str = "video_dubbed.mp4"):
cmd = [
"ffmpeg", "-y",
...
이것으로 끝입니다! 이제 합성 음성이 놀라울 정도로 인간적인 완전히 더빙된 비디오를 갖게 되었습니다.
4. 경험 다듬기 (Polishing the Experience)
강조를 위한 SSML 추가
ElevenLabs는 일부 SSML 태그(예: <break>, <prosody>)를 지원합니다. 새 단락 앞에 일시 정지나 질문에 대한 약간 높은 음조를 원한다면, 전송하는 텍스트에 단순히 해당 태그를 포함시키기만 하면 됩니다:
payload = {
"text": "<speak>Hello there!<break time='500ms'/>How are you today?</speak>",
"model_id": "eleven_monolingual_v1",
...
긴 비디오 처리
무료 등급은 각 요청을 약 30초의 오디오로 제한합니다. 더 긴 콘텐츠의 경우, 스크립트를 작은 블록으로 분할(위에서 한 것처럼)하고 루프 내에서 API를 호출하세요. 429 오류를 피하려면 속도 제한(≈ 5 req/s)을 준수하십시오.
사용자 지정 음성 클로닝 (Custom Voice Cloning)
브랜드별 목소리가 필요하다면, ElevenLabs를 사용하여 몇 분간의 깨끗한 음성을 업로드하면 클론을 생성할 수 있습니다. 워크플로우는 동일하며, 기본 voice_id만 사용자 지정 음성의 ID로 교체하면 됩니다. 클로닝 프로세스에 대한 자세한 내용은 ElevenLabs 웹사이트에서 확인할 수 있습니다.
5. 최소 스크립트 전체 구현하기
이 모든 조각들을 합치면, 저장소에 바로 넣을 수 있는 간결한 엔드투엔드(end-to-end) 스크립트가 완성됩니다:
# ai_dub.py
import json, os, subprocess
from pathlib import Path
...
적절한 오류 처리, 병렬 TTS 호출 또는 자막 편집기와의 통합 기능을 추가하여 스크립트를 자유롭게 확장해 보세요.
마무리하며
AI 더빙 파이프라인을 구축하는 것은 이제 몇 가지 잘 문서화된 조각들을 연결하는 문제로 줄어들었습니다:
- 오디오를 추출하고 타임스탬프가 찍힌 스크립트를 얻습니다.
- ElevenLabs와 같은 서비스를 사용하여 고품질 음성을 생성하며, 선택적으로 사용자 지정 클론 목소리를 사용합니다.
ffmpeg을 사용하여 새로운 오디오를 비디오에 다시 병합합니다.
그 결과물은 배포, 현지화 또는 다국어 콘텐츠의 신속한 프로토타이핑을 위해 준비된 완벽하게 더빙된 비디오입니다.
직접 시도해 볼 준비가 되셨나요?
무료 ElevenLabs API 키를 받고, 이 링크를 위의 스크립트에 붙여넣은 다음 오늘 바로 자신만의 비디오 더빙을 시작하세요. SSML과 음성 설정으로 실험할수록 결과물이 인간 내레이터의 목소리에 더욱 가까워질 것입니다.
지금 ElevenLabs를 사용해 AI 기반 음성으로 영상 콘텐츠에 생명을 불어넣으세요! https://try.elevenlabs.io/kr07zfuqn1bp
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기