testimonial-clips
SkillMediaLets your agent pull client praise from Zoom recordings and turn it into captioned short-form videos.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the testimonial-clips skill
About this capability
Read this when extracting client testimonial segments from Zoom recordings and turning them into captioned short-form videos (Reels/Shorts). Handles requests like "make testimonial clips" or "cut anything testimonial-worthy from this meeting".
What this skill tells your AI
The instructions your AI receives, as published by bam-bam-2/solo-skills in skills/testimonial-clips/SKILL.md and read by ahel’s review.
이 스킬이 시스템에 하는 일 (설치 전 확인)
- 녹화 파일을 읽고 잘라낸 클립을 새로 만듭니다. 원본은 수정하지 않습니다.
- 남의 발언을 편집하는 작업입니다. 공개 전 당사자 동의를 받으세요.
ffmpeg을 로컬에서 돌립니다.
후기 클립 만들기
줌 자문/미팅 녹화에서 클라이언트가 스스로 말한 긍정 평가를 뽑아 숏폼으로 만든다. 2026-09월 A 대표님·B 원장님 두 건으로 검증된 절차다.
0. 먼저 판단할 것 — 클라이언트가 화면에 나오는가
이게 전체 구성을 가른다. 다운로드 전에 프레임을 뽑아 확인한다.
ffmpeg -ss <구간> -i full.mp4 -frames:v 1 -vf scale=300:-2 /tmp/chk.jpg
| 상황 | 구성 |
|---|---|
| 얼굴 나옴 | 영상을 주인공으로. 얼굴 중심 크롭 + 하단 자막 |
| 카메라 꺼짐 | 영상 버림. 브랜드 인용 카드 + 오디오 파형 + 자막 |
⚠️ 줌 shared_screen_with_speaker_view는 말하는 사람 타일로 전환된다.
클라이언트가 카메라를 껐으면 정작 그가 말하는 구간이 전부 검은 화면이다.
갤러리 뷰도 마찬가지다. 화면공유가 없으면 한쪽이 통째로 검다.
1. 녹화·전사록 받기
Zoom S2S OAuth — 자격증명과 다운로드 토큰 절차는 advisory-minutes 스킬 참조.
download_url에는 별도의 download_access_token이 필요하다.
2. 후기 구간 찾기
VTT를 타임스탬프째로 파싱해 클라이언트 발화만 키워드로 훑는다.
keys=['좋았','감사','도움','달라졌','자신감','해결','성장','바뀌','이뤘','배웠','몰랐']
for ts, sp, body in cues:
if sp != '밤밤' and any(k in body for k in keys) and len(body) > 15:
print(f"[{ts}] {body}")
고르는 기준
- ⭐ 밤밤이 유도한 답이 아니라 클라이언트가 스스로 꺼낸 말만 쓴다
- 비교가 들어간 발언이 가장 세다 — "다른 걸 해봤는데 이건 다르더라" 류
- 그 사람의 직업·맥락이 묻어난 문장 (예: "진료실에서 듣는 거랑은 다르니까")
- 밤밤 자랑이 섞인 구간은 잘라낸다
- 앞뒤 문맥을 붙여 완결된 한 덩어리로 만든다. 40~90초
메타 파일로 정리한다: 번호|시작|길이|제목
3. 단어 단위 재전사 — 줌 자막을 쓰지 않는다
줌 자체 자막은 고유명사·숫자가 심하게 깨진다.
(fimbam→밤밤, 긱백→겟백, 커피 채취→커피챗, 오만원 단가가 오만원으로)
맥에 mlx_whisper가 깔려 있다(애플 실리콘 최적화, 맥미니에서 클립당 10~15초).
ffmpeg -ss <시작> -i full.mp4 -t <길이> -vn -ac 1 -ar 16000 -c:a pcm_s16le a1.wav
mlx_whisper a1.wav --model mlx-community/whisper-large-v3-mlx --language ko \
--word-timestamps True --output-format json --output-dir /tmp/wj --output-name w1
4. 카라오케 자막(ASS) 생성
단어별로 색을 바꾼 라인을 여러 개 깔아 하이라이트가 이동하는 효과를 낸다.
- 청크: 세로 17자 / 가로 28~30자, 단어 간격 0.9초 이상이면 끊는다
- 강조색
&H0035F0F5&(형광 연두), 기본&HFFFFFF& \pos()로 고정,\fad(60,60)subtitles=...:force_style=은 쓰지 말 것 — 쉼표를 필터 구분자로 먹어 파싱이 깨진다. 스타일을 ASS 파일에 직접 박고ass=파일.ass로 붙인다
5. 합성
얼굴이 나올 때
crop=<얼굴중심>,scale=1080:1279,eq=brightness=0.12:contrast=1.16,
pad=1080:1920:0:200:<브랜드색>,ass=자막.ass
- 위 여백에 후크 인용문 + 이름 배지를 ASS
Hook/Tag스타일로 얹는다 - 밤 촬영이면 밝기·대비 보정을 반드시 넣는다
얼굴이 없을 때
[1:a]showwaves=s=1080x200:mode=cline:colors=<강조색>@0.75,format=yuva420p,
colorkey=black:0.18:0.06[wv];
[0:v]scale=1080:1920[bg];[bg][wv]overlay=0:830[bw];[bw]ass=자막.ass
- 배경은 브랜드 그라데이션 카드(HTML→PNG 렌더)
showwaves+colorkey로 파형만 남겨 얹으면 화면이 산다
레이아웃은 층으로 완전히 분리한다. 후크(상단) / 파형·영상(중앙) / 자막(하단). 겹치면 둘 다 안 읽힌다. 실제로 두 건 모두 위치를 2~3번 다시 잡았다.
가로(1280×720)와 세로(1080×1920) 두 벌을 뽑는다.
6. 검수
프레임을 여러 개 뽑아 가로로 이어붙여 한 번에 본다.
for t in 15 20 50; do ffmpeg -ss $t -i c1.mp4 -frames:v 1 /tmp/f$t.jpg; done
magick /tmp/f15.jpg /tmp/f20.jpg /tmp/f50.jpg -resize x680 +append /tmp/pv.jpg
확인 항목 — 자막이 후크를 덮지 않는가 / 파형이 자막을 가리지 않는가 / 어두워서 얼굴이 안 보이지 않는가 / 화면 밖으로 넘치지 않는가
7. ⚠️ 발행 전 반드시
클라이언트 동의를 받는다. 자문 계약서 제11조에 절차가 있다 — 건별로 공개 범위(구체 수치까지 쓸지)·실명 여부·사용처를 함께 정하고, 언제든 철회 가능.
얼굴이 나오는 클립은 특히 그렇다.
그리고 매출 수치는 카드에 박지 않는다. 발언이 전사 기반이라 부정확할 수 있고, 동의 범위를 벗어날 수 있다. *"노력은 줄고 수입은 늘었습니다"*처럼 정성 표현으로 간다.
주의
- ffmpeg 빌드에 libass가 없으면 자막을 못 굽는다. 맥미니 ffmpeg가 최소 빌드라 안 된다. 전사는 맥미니(빠름), 렌더는 로컬로 나눈다
- 한글 파일명을
while read로 돌리면 인코딩이 깨진다. 번호로 루프를 돌고 나중에 이름을 붙인다 - 전사 오류 교정 사전을 만들어 자막 생성 시 일괄 치환한다
관련: advisory-minutes · measured-ui-callouts · macmini-offload
Signals
- GitHub stars
- 365
- Forks
- 90
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
testimonial-clips- Source
- github.com/bam-bam-2/solo-skills