# 챕터 추출 패턴 가이드 > 정기호 원장 영상의 구조적 특징을 기반으로 챕터 타임스탬프를 추출합니다. --- ## 영상 유형별 구조 ### Type A: 시술 소개 영상 (3-10분) ``` 0:00 인트로 (인사) └─ "안녕하세요. 제이미성형외과 정기호 원장입니다" 0:15~ 문제 제기 / 공감 └─ "~로 고민하시는 분들", "~때문에 걱정" 0:30~ 시술 소개 └─ "[시술명]이란", "어떤 방법", "특징" 1:00~ 수술 과정 / 방법 └─ "수술은", "진행", "과정", "방법" 2:00~ 장점 / 효과 └─ "장점", "효과", "결과", "좋은 점" 3:00~ 회복 / 주의사항 └─ "회복 기간", "주의", "관리", "~후에" 마지막 20초 마무리 / CTA └─ "상담", "문의", "감사합니다" ``` ### Type B: 짧은 설명 영상 (1-3분) ``` 0:00 인트로 0:10~ 핵심 설명 0:40~ 장점/특징 1:20~ 마무리 ``` ### Type C: Q&A / FAQ 영상 ``` 0:00 인트로 + 질문 소개 0:15~ 답변 1 0:45~ 답변 2 (있는 경우) 1:15~ 정리 / 마무리 ``` --- ## 챕터 감지 키워드 ### Primary Keywords (높은 우선순위) | 챕터 유형 | 키워드 | |----------|--------| | **인트로** | "안녕하세요", "제이미성형외과", "정기호 원장" | | **시술 소개** | "[시술명]이란", "무엇인가요", "어떤 수술" | | **수술 과정** | "수술 과정", "진행", "방법은", "어떻게" | | **장점** | "장점", "좋은 점", "효과", "결과" | | **회복** | "회복 기간", "회복은", "관리", "주의사항" | | **마무리** | "상담", "문의", "감사합니다", "추천드립니다" | ### Secondary Keywords (보조) | 챕터 유형 | 키워드 | |----------|--------| | **문제 제기** | "고민", "걱정", "불편", "힘든" | | **비교** | "차이", "비교", "vs", "다른 점" | | **대상** | "적합한 분", "추천", "이런 분" | | **비용/시간** | "시간", "기간", "비용" | --- ## 챕터 추출 알고리즘 ### Step 1: 텍스트에서 키워드 탐지 ```python def detect_chapter_candidates(subtitles, keywords): candidates = [] for i, sub in enumerate(subtitles): text = sub['text'] start_time = parse_start_time(sub['timestamp']) for chapter_type, kw_list in keywords.items(): for kw in kw_list: if kw in text: candidates.append({ 'time': start_time, 'type': chapter_type, 'keyword': kw, 'context': text }) break return candidates ``` ### Step 2: 중복 제거 및 정리 ```python def deduplicate_chapters(candidates, min_gap_seconds=15): """ 같은 유형의 챕터가 15초 이내에 있으면 첫 번째만 유지 """ result = [] last_by_type = {} for c in sorted(candidates, key=lambda x: x['time']): ctype = c['type'] if ctype in last_by_type: if c['time'] - last_by_type[ctype] < min_gap_seconds: continue result.append(c) last_by_type[ctype] = c['time'] return result ``` ### Step 3: 챕터 제목 생성 ```python chapter_titles = { 'intro': '인트로', 'problem': '이런 고민 있으신가요?', 'explanation': '{procedure_name}이란?', 'procedure': '수술 과정', 'benefits': '장점 및 효과', 'recovery': '회복 및 관리', 'closing': '마무리' } ``` --- ## 시간 형식 변환 ### SBV → YouTube 챕터 형식 ```python def sbv_to_chapter_time(sbv_time): """ "0:01:23.450" → "1:23" "0:00:45.120" → "0:45" """ parts = sbv_time.split(':') if len(parts) == 3: h, m, s = parts s = s.split('.')[0] # 밀리초 제거 h, m, s = int(h), int(m), int(s) if h > 0: return f"{h}:{m:02d}:{s:02d}" else: return f"{m}:{s:02d}" return sbv_time ``` --- ## 챕터 출력 형식 ### YouTube 설명란용 형식 ``` 0:00 인트로 0:17 하이브리드 쌍꺼풀이란? 0:33 수술 과정 0:50 장점 및 특징 1:10 회복 기간 1:25 마무리 ``` ### 상세 형식 (내부 문서용) ```markdown | 시간 | 챕터 | 감지 키워드 | 컨텍스트 | |------|------|------------|----------| | 0:00 | 인트로 | "안녕하세요" | 인사말 | | 0:17 | 시술 소개 | "이란" | "하이브리드 쌍꺼풀이란..." | ``` --- ## 시술별 챕터 템플릿 ### 눈 성형 영상 ``` 0:00 인트로 0:XX [시술명]이란? 0:XX 수술 방법 0:XX 장점 (자연스러움, 빠른 회복 등) 0:XX 회복 기간 및 주의사항 0:XX 마무리 ``` ### 이마/리프팅 영상 ``` 0:00 인트로 0:XX 노화의 원인 0:XX [시술명] 소개 0:XX 수술 과정 0:XX 효과 및 유지 기간 0:XX 회복 및 관리 0:XX 마무리 ``` ### Q&A 영상 ``` 0:00 인트로 및 질문 소개 0:XX Q1. [질문1] 0:XX Q2. [질문2] 0:XX Q3. [질문3] 0:XX 마무리 ``` --- ## Edge Cases ### 1. 챕터가 너무 적을 때 영상 길이 대비 챕터가 2개 이하면: - 영상을 3등분하여 강제 챕터 생성 - "전반부", "중반부", "후반부" 사용 ### 2. 인트로가 감지되지 않을 때 - 0:00에 "인트로" 강제 추가 - 첫 번째 자막 내용으로 제목 생성 ### 3. 짧은 영상 (1분 미만) - 챕터 최소 2개만 생성 - 0:00 인트로 + 마지막 구간 --- *Version 1.0.0 | 2025-12-23*