- Remove 'version' field from 13 SKILL.md files - Quote descriptions containing colons (Triggers:) in 9 files - Fix 20-gtm-audit binary file (extract proper SKILL.md from ZIP) - Add missing 'description:' key in 41-jamie-brand-audit - Add new skill 44-jamie-youtube-subtitle-checker with both desktop/ and code/ versions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
247 lines
5.5 KiB
Markdown
247 lines
5.5 KiB
Markdown
# 챕터 추출 패턴 가이드
|
|
|
|
> 정기호 원장 영상의 구조적 특징을 기반으로 챕터 타임스탬프를 추출합니다.
|
|
|
|
---
|
|
|
|
## 영상 유형별 구조
|
|
|
|
### 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*
|