팟캐스트 생성 스킬
개요
이 스킬은 텍스트 콘텐츠로부터 고품질의 팟캐스트 오디오를 생성합니다. 구조화된 JSON 스크립트(대화형 대본)를 만들고 TTS(Text-to-Speech) 합성을 통해 오디오를 생성하는 워크플로우를 포함합니다.
핵심 기능
- 모든 텍스트 콘텐츠(기사, 보고서, 문서)를 팟캐스트 스크립트로 변환
- 두 명의 진행자(남성, 여성)가 자연스럽게 대화하는 형식 생성
- TTS를 사용하여 음성 오디오 합성
- 오디오 청크를 하나의 최종 팟캐스트 MP3 파일로 믹싱
- 영어 및 중국어 콘텐츠 지원
워크플로우
1단계: 요구 사항 파악
사용자가 팟캐스트 생성을 요청하면 다음을 확인합니다:
- 원본 콘텐츠: 팟캐스트로 변환할 텍스트/기사/보고서
- 언어: 영어 또는 중국어 (콘텐츠 기반)
- 출력 위치: 생성된 팟캐스트를 저장할 위치
/mnt/user-data폴더를 확인할 필요 없음
2단계: 구조화된 스크립트 JSON 생성
/mnt/user-data/workspace/ 폴더에 {설명-이름}-script.json 패턴의 파일 이름으로 구조화된 JSON 스크립트 파일을 생성합니다.
JSON 구조:
{
"locale": "en",
"lines": [
{"speaker": "male", "paragraph": "대화 텍스트"},
{"speaker": "female", "paragraph": "대화 텍스트"}
]
}
3단계: 생성 실행
Python 스크립트를 호출합니다:
python /mnt/skills/public/podcast-generation/scripts/generate.py \
--script-file /mnt/user-data/workspace/script-file.json \
--output-file /mnt/user-data/outputs/generated-podcast.mp3 \
--transcript-file /mnt/user-data/outputs/generated-podcast-transcript.md
파라미터:
--script-file: JSON 스크립트 파일의 절대 경로 (필수)--output-file: 출력 MP3 파일의 절대 경로 (필수)--transcript-file: 출력 대본 마크다운 파일의 절대 경로 (선택사항, 하지만 권장)
[!IMPORTANT]
- 스크립트는 한 번에 완전히 실행하세요. 워크플로우를 별도의 단계로 나누지 마십시오.
- 스크립트는 모든 TTS API 호출 및 오디오 생성을 내부적으로 처리합니다.
- Python 파일을 읽지 말고, 파라미터와 함께 바로 호출하세요.
- 항상
--transcript-file을 포함하여 사용자가 읽을 수 있는 대본을 생성하세요.- TTS 제공자와 동시성은 환경 변수에서 자동으로 선택되며, 직접 선택하거나 조정하지 않습니다.
스크립트 JSON 형식
스크립트 JSON 파일은 다음 구조를 따라야 합니다:
{
"title": "인공지능의 역사",
"locale": "en",
"lines": [
{"speaker": "male", "paragraph": "안녕하세요 Deer! 다른 에피소드에 다시 오신 것을 환영합니다."},
{"speaker": "female", "paragraph": "안녕하세요 여러분! 오늘은 정말 흥미로운 주제를 다룰 예정입니다."},
{"speaker": "male", "paragraph": "맞아요! 오늘은 인공지능의 역사에 대해 이야기해볼게요."}
]
}
필드:
title: 팟캐스트 에피소드 제목 (선택사항, 대본에서 제목으로 사용됨)locale: 언어 코드 - 영어는 "en", 중국어는 "zh"lines: 대화 라인 배열speaker: "male" 또는 "female"paragraph: 해당 화자의 대화 텍스트
스크립트 작성 지침
스크립트 JSON을 만들 때 다음 지침을 따르세요:
형식 요구 사항
- 남성과 여성 두 명의 진행자만 사용하며, 자연스럽게 번갈아 가며 진행
- 목표 런타임: 약 10분 분량의 대화 (약 40-60 라인)
- 남성 진행자가 "Hello Deer" 인사로 시작
어조 및 스타일
- 두 친구가 대화하는 것처럼 자연스럽고 대화체로 작성
- 일상적인 표현과 대화 전환 사용
- 지나치게 격식 있는 언어나 학술적인 어조 지양
- 반응, 후속 질문, 자연스러운 감탄사 포함
콘텐츠 지침
- 진행자 간 자주 의견을 주고받음
- 문장은 짧고 따라하기 쉽게 작성
- 출력에는 마크다운 서식 없이 일반 텍스트만 사용
- 기술적인 개념은 이해하기 쉬운 언어로 번역
- 수학 공식, 코드, 복잡한 표기법 사용 금지
- 오디오 청취자에게 매력적이고 접근성 있게 구성
- 날짜, 저자 이름, 문서 구조와 같은 메타 정보 제외
팟캐스트 생성 예시
사용자 요청: "인공지능의 역사에 대한 팟캐스트를 생성해줘"
1단계: 스크립트 파일 생성 /mnt/user-data/workspace/ai-history-script.json:
{
"title": "인공지능의 역사",
"locale": "en",
"lines": [
{"speaker": "male", "paragraph": "Hello Deer! 흥미진진한 또 다른 에피소드에 오신 것을 환영합니다. 오늘은 말 그대로 우리의 미래를 형성하고 있는 주제, 바로 인공지능의 역사에 대해 파고들어 보겠습니다."},
{"speaker": "female", "paragraph": "오, 이 주제 정말 좋아해요! AI가 너무 현대적으로 느껴지지만, 사실 그 뿌리는 70년 전으로 거슬러 올라간다는 거 알고 계셨나요?"},
{"speaker": "male", "paragraph": "맞아요! 모든 것은 1950년대에 시작됐죠. '인공지능'이라는 용어는 1956년 다트머스에서 열린 유명한 컨퍼런스에서 존 매카시에 의해 처음 사용되었습니다."},
{"speaker": "female", "paragraph": "잠깐만요, 그때 이미 기계가 생각할 수 있다는 것을 고민하고 있었다고요? 정말 대단하네요!"},
{"speaker": "male", "paragraph": "그렇죠? 초기 개척자들은 매우 낙관적이었어요. 그들은 한 세대 안에 인간 수준의 AI가 가능할 것이라고 생각했습니다."},
{"speaker": "female", "paragraph": "하지만 현실은 그렇게 되지 않았죠, 그렇죠?"},
{"speaker": "male", "paragraph": "네, 전혀요. 1970년대에는 첫 번째 AI 겨울이라고 불리는 시기가 도래했습니다..."}
]
}
2단계: 생성 실행:
python /mnt/skills/public/podcast-generation/scripts/generate.py \
--script-file /mnt/user-data/workspace/ai-history-script.json \
--output-file /mnt/user-data/outputs/ai-history-podcast.mp3 \
--transcript-file /mnt/user-data/outputs/ai-history-transcript.md
다음 파일이 생성됩니다:
ai-history-podcast.mp3: 오디오 팟캐스트 파일ai-history-transcript.md: 팟캐스트의 읽기 쉬운 마크다운 대본
특정 템플릿
사용자 요청과 일치하는 경우에만 다음 템플릿 파일을 읽으세요.
- Tech Explainer - 기술 문서 및 튜토리얼 변환용
출력 형식
생성된 팟캐스트는 "Hello Deer" 형식을 따릅니다:
- 두 명의 진행자: 남성 1명, 여성 1명
- 자연스러운 대화체
- "Hello Deer" 인사로 시작
- 목표 길이: 약 10분
- 흥미로운 흐름을 위해 화자가 번갈아 가며 진행
출력 처리
생성 후:
- 팟캐스트와 대본은
/mnt/user-data/outputs/폴더에 저장 present_files도구를 사용하여 팟캐스트 MP3와 대본 MD 파일을 사용자와 공유- 생성 결과에 대한 간략한 설명 제공 (주제, 길이, 진행자)
- 조정이 필요한 경우 재생성 제안
요구 사항
다음 환경 변수가 설정되어 있어야 합니다:
- Volcengine:
VOLCENGINE_TTS_APPID및VOLCENGINE_TTS_ACCESS_TOKEN - MiniMax:
MINIMAX_API_KEY VOLCENGINE_TTS_CLUSTER: Volcengine TTS 클러스터 (선택사항, 기본값은 "volcano_tts")
참고 사항
- 항상 전체 파이프라인을 한 번에 실행하세요 - 개별 단계를 테스트하거나 타임아웃을 걱정할 필요 없음
- 스크립트 JSON은 콘텐츠 언어(en 또는 zh)와 일치해야 함
- 기술 콘텐츠는 오디오 접근성을 위해 스크립트에서 단순화해야 함
- 복잡한 표기(수식, 코드)는 스크립트에서 일반 언어로 번역해야 함
- 긴 콘텐츠는 더 긴 팟캐스트로 이어질 수 있음
제공 업체 (Volcengine / MiniMax)
환경 변수에 의해 자동 선택:
VOLCENGINE_TTS_APPID+VOLCENGINE_TTS_ACCESS_TOKEN설정 → Volcengine TTS (기본값)MINIMAX_API_KEY만 설정 → MiniMax TTS (/v1/t2a_v2)PODCAST_GENERATION_PROVIDER=volcengine|minimax로 강제 지정
MiniMax 재정의: MINIMAX_API_HOST (기본값 https://api.minimaxi.com),
MINIMAX_TTS_MODEL (기본값 speech-2.6-hd), MINIMAX_TTS_VOICE_MALE
(기본값 male-qn-qingse), MINIMAX_TTS_VOICE_FEMALE (기본값 female-tianmei).
동시성은 각 제공 업체가 내부적으로 관리합니다. MiniMax는 속도 제한 실패를 줄이기 위해 단일 스레드로 실행되며, Volcengine은 4개의 워커를 사용합니다. 호출자가 조정할 수 있는 동시성 설정은 없으며, 일시적인 속도 제한은 지수 백오프를 통한 자동 재시도로 처리됩니다.