긴 형식 팟캐스트 인트로 (콜드 오픈)
이 룩은 Greg Isenberg의 긴 형식 인트로를 모델로 했습니다. 매력적으로 만드는 요소:
- 가장 강력한 라인으로 시작하며, 로고가 먼저 나오지 않습니다.
- 3~6초마다 컷을 전환합니다.
- 거의 모든 다른 클립을 컷어웨이로 만듭니다: 스피커가 왼쪽의 카드로 슬라이드 인하고 오른쪽에 그래픽이 나타납니다.
- 자막을 짧게 유지합니다: 1~3단어, 주황색 키워드와 함께.
- 타이틀로 끝맺습니다: 다가올 내용을 보여주는 카드.
파이프라인은 pipeline/build_episode.py이며, work/<ep>/episode.json → intro에 의해 구동됩니다. 렌더링은 Remotion IntroV2 컴포지션(pipeline/remotion/src/IntroV2.tsx)을 사용합니다. 그래픽은 Graphics.tsx에서 가져옵니다.
1. 에피소드에서 클립 발췌 (810개 후보, 79개 유지)
- 트랜스크립트(
work/<ep>/words-*.json또는 Descript.txt)를 읽고 6초 이내에 독립적으로 사용 가능한 라인을 나열합니다. - 선호도 순서:
- 확실한 숫자: "직원의 27%에게 퇴직을 제안", "900% 수익 유지율".
- 대담한 주장 또는 예측: "토큰이 모든 것에 스며들 것이다".
- 고백 또는 공감할 수 있는 고통: "구독료를 내는 데 너무 지쳤어요".
- 재미있거나 감정적인 반응: "저는 토큰 맥싱을 할 거예요".
- 인용하기 좋은 마무리: "초지능에 가격을 매길 수는 없다".
- 주제 전반에 걸쳐 분배: 챕터당 약 하나의 클립, 두 진행자 모두 포함, 최소 한 번의 웃음.
- 릴 순서:
- 클립 1은 가장 강력한 훅(보통 숫자나 주장)입니다.
- 스피커와 에너지를 번갈아 배치합니다.
- 가장 인용하기 좋은 라인을 마지막, 타이틀 카드 바로 앞에 둡니다.
- 건너뛰기:
- 맥락이 필요한 라인 ("내가 말했듯이", "그 차트");
- 약 6초가 넘는 라인;
- 크로스토크가 있는 라인.
- 욕설: 사용자가 노골적인 인트로를 괜찮아하는 경우에만 유지하고, 보고서에 그 사실을 명시합니다.
2. episode.json → intro 구성
"title": "FRINGE LINES",
"subtitle": "2026년 10월 30일",
"intro": {
"style": "v2",
"title": "Fringe Lines",
"title_seconds": 4.5,
"topics": ["아침 루틴", "Microsoft 인원", "제작 vs. 구매", "토큰 한도", "Google vs. AI 모드", "Anthropic의 S-1", "AI 지출"],
"emphasis": ["27%", "떠나다", "900%", "유지", "sql", "에이전트", "토큰", "모든 것", "맥싱"],
"clips": [
{"say": "microsoft just offered", "until": "employees to leave", "tag": "AI & 일자리", "replace": {"27": "27%"},
"graphic_on": "27%", "graphic": {"type": "stat", "kicker": "Microsoft 매수 제안", "value": 27, "suffix": "%", "label": "*떠나기* 위해 제안을 받은 직원 비율"}},
{"say": "tokens are going to seep", "until": "like the internet", "tag": "토큰의 확산"}
]
}
say/until: 클립의 처음과 끝 부분에 해당하는 몇 단어입니다. 대소문자와 구두점에 관계없이 일치시킵니다. 일치는 에피소드에서 첫 번째로 나타나는 부분이므로,say를 독특하게 만드세요(3~5단어). 다른 스피커가 라인을 가로막으면, 매처는 한 스피커의 단어만 사용하여 재시도합니다.pre: (선택 사항)say앞의 리드인 시간(초)입니다.tag: 왼쪽 상단에 번호와 함께 표시되는 주제 레이블입니다. 1~3단어를 사용하세요.replace: 자막 수정, 예: 숫자, "sequel"→"SQL", 또는"a": ""로 단어 숨기기.graphic+graphic_on: 컷어웨이는graphic_on이라는 말이 시작되기 약 150ms 전에 나타납니다.- 선택 사항
graphic_off(이후 단어)는 전체 화면으로 돌아갑니다. graphic_off가 없으면 컷어웨이는 클립 끝까지 유지됩니다.
- 선택 사항
- 컷어웨이 개수: 3~5개의 클립에 컷어웨이를 추가하세요. 숫자, 명명된 회사 또는 제품, 인용하기 좋은 라인이 있는 클립을 선택하세요. 반응 및 웃음 클립은 전체 화면으로 둡니다.
- 그래픽 유형 (에디토리얼 쇼츠와 동일):
stat: 킥커와 레이블이 있는 숫자;people: 아이콘 그리드;lines: 개략적인 추세선;quote: 잉크 카드;headline: 하이라이트 스윕이 있는 뉴스 스타일 카드;list: 번호가 매겨진 행.- 주황색 이탤릭체에는
*word*를 사용하세요.
- 정직성: 화면의 숫자는 말한 내용과 일치해야 합니다. 차트는 개략적이며, 가상의 데이터가 아닙니다.
topics: 타이틀 카드용 5~7개의 짧은 챕터 이름, 에피소드 순서대로.emphasis: 자막에 주황색으로 표시될 12~25개의 키워드: 숫자, 이름, 핵심 단어.title_seconds: 4~5초. 타이틀 카드는 serif 글꼴의 "Fringe Lines", 주황색 이탤릭체 마지막 단어, 날짜, 그리고 "이번 에피소드에서" 목록으로 구성됩니다.
3. 렌더링 전 계획 확인
~/.shorts-skill/bin/python pipeline/build_episode.py --ep <ep> --stage plan
- 각 인트로 클립의 태그, 길이 및 자막 텍스트를 출력합니다.
WARN intro clip not found가 있으면 수정:say/until단어가 트랜스크립트와 정확히 일치하도록 조정합니다.- 목표 총 시간: 클립 35~50초 + 타이틀 4.5초. 6초가 넘는 클립은 제거하거나 자릅니다.
- 모든 자막 줄을 읽고 잘못 들은 단어를 찾아
replace수정을 추가합니다.
4. 렌더링
~/.shorts-skill/bin/python pipeline/build_episode.py --ep <ep> --stage graphics # 인트로 클립 + IntroV2 + lower-thirds
~/.shorts-skill/bin/python pipeline/build_episode.py --ep <ep> --stage final # 인트로 + 본문, 챕터, 음량 연결
- 배경이 흐려진 버전을 위해 두 명령에
--blur를 추가합니다. 이를 위해서는~/.cache/fringe-lines-video/blur/에 흐려진 카메라 영상이 필요하며(pipeline/bg_blur.py참조), 별도 캐시에서<ep>-fringe-lines-blur.mp4를 작성합니다. - 본문은 인트로 변경을 위해 다시 렌더링할 필요가 없습니다.
- 챕터 파일이 다시 생성되므로 모든 타임스탬프는 인트로 길이에 따라 변경됩니다.
- 음향 효과(우웅, 팝, 타이틀 쪽으로 길게 우웅)는 그래픽 폴더에 생성되고 Remotion에 의해 믹싱됩니다.
5. QA
F=out/episode/<ep>-fringe-lines.mp4
ffmpeg -v error -y -i $F -t 50 -vf "fps=1,scale=320:-1,tile=8x7" -frames:v 1 /tmp/intro.png
확인:
- 각 컷어웨이의 카드가 화면에 완전히 표시되고, 숫자가 말한 내용과 일치하며, 잘못된
*가 없습니다. - 자막에 주황색 키워드가 표시되고, 자막이 스피커 카드의 하단 가장자리와 겹치지 않습니다.
- 타이틀 카드가 모든 주제를 순서대로 나열합니다.
- 비디오와 오디오 지속 시간이 일치합니다(
ffprobe -show_entries stream=codec_type,duration). - 에피소드의 음량이 약 −15.5 LUFS입니다.
- 챕터 파일이
00:00 콜드 오픈, 인트로 길이, "잡담" 순서로 시작합니다.
사용자에게 보고:
- 클립 목록 (태그 + 라인);
- 컷어웨이가 있는 클립;
- 인트로 길이;
- 노골적인 언어 사용 여부;
- 확인해야 할 숫자.