목록으로
업무 생산성 개선을 위한 AI 활용
강의 한 편에 일주일, 지금은 20분 — 자막을 받아쓰기가 아니라 정렬로 만들어 강의 57편을 제작한 기록
받아쓰기(STT) 대신 강제 정렬을 써서 한·영 혼용 자막 오류를 없애고, 강의 제작 주기를 주 1편에서 20분으로 줄인 자동화 파이프라인 기록입니다. 강의 57편 제작.
🤖 활용 AI 도구
Claude Code, stable-ts(Whisper large-v3), WhisperX, FFmpeg, OpenTimelineIO, ElevenLabs, Google Gemini TTS, HeyGen
① 어떤 상황에서 AI를 활용했나요?
AI 교육 영상을 만듭니다. 가장 오래 걸리는 건 촬영이 아니라 1차 편집, 그중에서도 자막이었습니다.
한국어 기술 강의의 문장은 이렇게 생겼습니다. "Claude Code를 실행하면 CLI가 뜨고, 거기서 MCP 서버를 붙일 수 있습니다." 한 문장에 한글과 영어 고유명사가 섞입니다. 자동 자막(STT)을 돌리면 여기서 반드시 깨집니다. Claude Code가 "클로드 코드"로 적히거나 "크라우드 코드"가 되고, CLI는 "씨엘아이"가 됩니다. 화면에 나가면 안 되는 글자들이라 결국 전수 수정해야 했고, 강의 한 편에 자막 줄이 수백 개입니다.
무음 제거도 같은 문제였습니다. 마침표 뒤의 쉼과 쉼표 뒤의 쉼은 남겨야 할 길이가 다른데 편집 프로그램의 자동 무음 제거는 그 구분을 못 합니다. 사람이 한 컷씩 판단해야 했습니다.
강의를 한두 편 만들 때는 견딜 만했지만, 시리즈가 쌓이면서 병목이 됐습니다.
② 어떤 AI를 어떻게 활용했나요?
핵심은 도구를 바꾼 게 아니라 문제를 다시 정의한 것입니다.
자동 자막이 틀리는 이유는 AI가 "무슨 말인지 알아맞히려" 하기 때문입니다. 그런데 저는 이미 대본을 가지고 있습니다. 알아맞힐 필요가 없습니다. 필요한 건 "이 글자가 몇 초에 나오는가"뿐입니다.
그래서 받아쓰기(STT) 대신 강제 정렬(forced alignment)을 씁니다. 음성과 대본을 함께 넣고 각 글자의 시각만 계산합니다. 화면에 찍히는 글자는 언제나 원본 대본 그대로여서, 받아쓰기 오류가 발생할 수 없는 구조입니다.
다만 정렬 엔진도 음성을 듣습니다. 음성은 "클로드 코드"라 발음하는데 대본에는 Claude Code라 적혀 있으니 짝지을 때 헷갈립니다. 그래서 파일을 두 벌 만듭니다.
- <강의>.align.txt : 음차본 ("클로드 코드를 실행하면 씨엘아이가 뜨고") → 정렬에만 사용
- <강의>.txt : 표기본 ("Claude Code를 실행하면 CLI가 뜨고") → 화면 자막 글자로 사용
두 파일은 문장·토큰 순서가 1:1로 대응합니다. 소리는 음차본에 맞추고, 글자는 표기본에서 가져옵니다.
사용 도구
- 강제 정렬: stable-ts (Whisper large-v3), WhisperX 대안 — 오픈소스
- 무음 감지: FFmpeg silencedetect — 오픈소스
- 타임라인 생성: OpenTimelineIO (FCP7 xmeml) — 오픈소스
- 음성 합성: ElevenLabs / Google Gemini TTS (강사 본인 음성)
- 아바타 영상: HeyGen (유료 라이선스)
- 파이프라인 설계·구현: Claude Code
마지막이 중요합니다. 이 자동화 자체를 AI로 만들었습니다. 먼저 "무엇을 만들 것인가"를 명세서(SPEC.md)로 쓰고, Claude Code에게 그 명세를 주어 구현하게 했습니다. AI를 결과물 생산에만 쓴 게 아니라 생산 설비를 만드는 데 썼습니다.
파이프라인은 6단계입니다. 1 무음감지 → 2 정렬 → 3 컷플랜 → 4 자막+검수 → 5 렌더 → (6) Premiere XML.
정렬은 한 번만 수행해 캐싱하고, 그 한 번의 결과가 자막과 컷 판단을 둘 다 구동합니다. 컷 규칙은 문장부호 맥락별로 다르게 적용되며, 모든 임계값은 설정 파일에 있습니다(하드코딩 금지를 설계 원칙으로 명문화).
③ 활용 결과 어떤 변화가 있었나요?
강의 한 편이 나오기까지: 일주일에 한 편 나올까 말까 → 20분.
제작 주기의 단위가 '주'에서 '분'으로 바뀌었습니다.
누적 실적 (2026년 9월 기준)
- 이 파이프라인으로 제작한 강의 57편
- 완성 산출물 83개, 자막(SRT) 97개
- 시리즈: 원론 25강, 총론 7강, 웹소설 5강, 클로드코드 계열, 중급·고급 등
예전 속도였다면 57주, 1년이 넘게 걸렸을 분량입니다.
그리고 단순히 빨라진 게 아닙니다. 주 1편이 한계일 때는 만들 수 있는 강의만 만들게 됩니다. 시리즈를 기획해도 완주할 수 있을지 알 수 없으니 애초에 짧게 잡습니다. 20분이 되자 25강짜리 시리즈를 계획하고 끝내는 일이 가능해졌습니다. 속도가 바뀌니 만들 수 있는 것의 종류가 바뀌었습니다.
질적으로는
- 자막 수정 작업 자체가 사라졌습니다. 사람이 볼 것은 정렬 신뢰도가 낮은 구간만 따로 모은 검수 목록뿐입니다. 전수 검사가 표적 검사가 됐습니다.
- 작업의 성격이 "자막을 만드는" 일에서 "규칙을 조정하는" 일로 바뀌었습니다. 컷이 붙었다 싶으면 설정값 한 줄 바꿔 3~5단계만 다시 돌립니다.
- 실패가 재현 가능해졌습니다. 단계별 중간 결과가 남아 정렬 문제인지 컷 규칙 문제인지 바로 가릅니다.
④ 나만의 방식 또는 개선 포인트는 무엇인가요?
1. 받아쓰기가 아니라 정렬. 자동 자막의 정확도를 높이려 한 게 아니라, 정확도가 필요 없는 구조로 바꿨습니다. 원본 대본이 있는데 AI에게 알아맞히기를 시킬 이유가 없습니다.
2. 음차/표기 분리. 한·영 혼용은 대개 후처리 치환으로 해결하려 하는데 후처리는 새 용어마다 깨집니다. 정렬용과 표기용 텍스트를 처음부터 두 벌로 분리해 문제가 생기지 않게 했습니다.
3. 한 번의 정렬로 자막과 컷을 둘 다 구동. 같은 정렬 결과를 공유하게 만들어 자막과 영상의 싱크가 구조적으로 어긋날 수 없습니다.
4. 문장부호 맥락별 차등 컷. 마침표 뒤의 쉼은 호흡이고 쉼표 뒤의 쉼은 군더더기라는 판단을 규칙으로 옮겼습니다.
5. 평탄화하지 않는 출력. 최종본으로 굳히지 않고 편집 가능한 타임라인으로 내보냅니다. 자동화가 사람의 판단을 대체하는 게 아니라 판단할 지점까지 데려다주는 구조입니다.
6. 유료 API 의존 금지를 설계 원칙으로. 핵심 공정은 전부 오픈소스이고, 유료 도구는 대체 가능한 부분에만 씁니다. 따라 하려는 사람에게 비용이 장벽이 되지 않도록 한 선택입니다.
⑤ 다른 사람도 따라 할 수 있나요?
이 항목을 목표로 삼고 만들었습니다. "해봤다"가 아니라 "넘겨줄 수 있다"입니다.
문서 3종
- SPEC.md — 무엇을 만들 것인가 (설계 원칙, 입출력 계약, 기술 선택 이유)
- README.md — 어떻게 쓰는가 (설치, 입력 배치, 실행, 권장 첫 실행 순서)
- CLAUDE.md — 작업 런북 (강의 한 편을 만드는 전체 절차와 분기)
따라 하기 쉽게 만든 장치
- 단계별 독립 실행. --stage 1-2, --stage 3-5처럼 필요한 구간만 돌립니다. 전체를 이해하지 못해도 한 단계씩 검증하며 들어올 수 있습니다.
- 중간 캐시. 무거운 정렬을 반복하지 않습니다.
- 위험 구간 우선 검증 순서를 문서화. "가장 먼저 1-2단계만 돌려 정렬 정확도부터 판정하라"고 적어, 진짜 위험한 곳이 어디인지 미리 알려 줍니다.
- 실패 모드까지 문서화. 10분 넘는 음성은 후반부 싱크가 밀린다 → 파트별 정렬로 우회. GPU 메모리 부족 → 5분 단위 자동 분할. 겪은 실패와 우회법을 그대로 적었습니다.
- 설정으로 분리. 모든 임계값이 설정 파일에 있어 코드를 읽지 않고도 자기 스타일에 맞출 수 있습니다.
- 확장 전제. 런북 첫머리에 "이 자동화를 베이스로 자기 강의 스타일에 맞게 확장한다"고 적혀 있습니다.
실제로 같은 방식으로 만든 다른 자동화(전자책 제작 툴킷)를 동료 배포용 독립 저장소로 분리해 넘긴 전례가 있습니다.
[책임 있는 활용을 위해 지킨 것]
- 사용 도구와 라이선스를 오픈소스/유료로 구분해 전부 명시했습니다.
- 합성 음성은 강사 본인 음성을 본인 동의 하에 사용했고, 아바타는 유료 라이선스 범위 안에서 썼습니다. 타인의 음성·초상을 무단 합성한 부분이 없습니다.
- 강의 대본은 전부 본인이 작성했습니다. 자막 글자가 원본 대본 그대로여서 출처가 명확합니다.
- 파이프라인이 다루는 데이터는 본인의 강의 음성과 대본뿐이며 제3자의 개인정보가 포함되지 않습니다.
- 강의 내용의 사실 주장은 별도 검증을 거칩니다. AI 생성 문장을 검증 없이 강의에 넣지 않는 것을 작업 규칙으로 둡니다.
- 이 파이프라인의 목적은 사람의 검수를 없애는 것이 아니라 검수할 지점을 좁히는 것입니다. 그래서 출력이 편집 가능한 형태로 나옵니다.
[맺으며]
실제로 바뀐 것은 도구가 아니라 질문이었습니다. "AI 자막의 정확도를 어떻게 올릴까"를 붙들고 있는 동안에는 답이 없었습니다. "나는 이미 대본을 가지고 있는데 왜 AI에게 알아맞히라고 하고 있지?"로 질문을 바꾸자 문제가 사라졌습니다.
AI를 잘 쓰는 일은 더 좋은 모델을 찾는 일이 아니라, AI에게 시키지 않아도 되는 일을 알아보는 일에 가깝다고 생각합니다.
AI 교육 영상을 만듭니다. 가장 오래 걸리는 건 촬영이 아니라 1차 편집, 그중에서도 자막이었습니다.
한국어 기술 강의의 문장은 이렇게 생겼습니다. "Claude Code를 실행하면 CLI가 뜨고, 거기서 MCP 서버를 붙일 수 있습니다." 한 문장에 한글과 영어 고유명사가 섞입니다. 자동 자막(STT)을 돌리면 여기서 반드시 깨집니다. Claude Code가 "클로드 코드"로 적히거나 "크라우드 코드"가 되고, CLI는 "씨엘아이"가 됩니다. 화면에 나가면 안 되는 글자들이라 결국 전수 수정해야 했고, 강의 한 편에 자막 줄이 수백 개입니다.
무음 제거도 같은 문제였습니다. 마침표 뒤의 쉼과 쉼표 뒤의 쉼은 남겨야 할 길이가 다른데 편집 프로그램의 자동 무음 제거는 그 구분을 못 합니다. 사람이 한 컷씩 판단해야 했습니다.
강의를 한두 편 만들 때는 견딜 만했지만, 시리즈가 쌓이면서 병목이 됐습니다.
② 어떤 AI를 어떻게 활용했나요?
핵심은 도구를 바꾼 게 아니라 문제를 다시 정의한 것입니다.
자동 자막이 틀리는 이유는 AI가 "무슨 말인지 알아맞히려" 하기 때문입니다. 그런데 저는 이미 대본을 가지고 있습니다. 알아맞힐 필요가 없습니다. 필요한 건 "이 글자가 몇 초에 나오는가"뿐입니다.
그래서 받아쓰기(STT) 대신 강제 정렬(forced alignment)을 씁니다. 음성과 대본을 함께 넣고 각 글자의 시각만 계산합니다. 화면에 찍히는 글자는 언제나 원본 대본 그대로여서, 받아쓰기 오류가 발생할 수 없는 구조입니다.
다만 정렬 엔진도 음성을 듣습니다. 음성은 "클로드 코드"라 발음하는데 대본에는 Claude Code라 적혀 있으니 짝지을 때 헷갈립니다. 그래서 파일을 두 벌 만듭니다.
- <강의>.align.txt : 음차본 ("클로드 코드를 실행하면 씨엘아이가 뜨고") → 정렬에만 사용
- <강의>.txt : 표기본 ("Claude Code를 실행하면 CLI가 뜨고") → 화면 자막 글자로 사용
두 파일은 문장·토큰 순서가 1:1로 대응합니다. 소리는 음차본에 맞추고, 글자는 표기본에서 가져옵니다.
사용 도구
- 강제 정렬: stable-ts (Whisper large-v3), WhisperX 대안 — 오픈소스
- 무음 감지: FFmpeg silencedetect — 오픈소스
- 타임라인 생성: OpenTimelineIO (FCP7 xmeml) — 오픈소스
- 음성 합성: ElevenLabs / Google Gemini TTS (강사 본인 음성)
- 아바타 영상: HeyGen (유료 라이선스)
- 파이프라인 설계·구현: Claude Code
마지막이 중요합니다. 이 자동화 자체를 AI로 만들었습니다. 먼저 "무엇을 만들 것인가"를 명세서(SPEC.md)로 쓰고, Claude Code에게 그 명세를 주어 구현하게 했습니다. AI를 결과물 생산에만 쓴 게 아니라 생산 설비를 만드는 데 썼습니다.
파이프라인은 6단계입니다. 1 무음감지 → 2 정렬 → 3 컷플랜 → 4 자막+검수 → 5 렌더 → (6) Premiere XML.
정렬은 한 번만 수행해 캐싱하고, 그 한 번의 결과가 자막과 컷 판단을 둘 다 구동합니다. 컷 규칙은 문장부호 맥락별로 다르게 적용되며, 모든 임계값은 설정 파일에 있습니다(하드코딩 금지를 설계 원칙으로 명문화).
③ 활용 결과 어떤 변화가 있었나요?
강의 한 편이 나오기까지: 일주일에 한 편 나올까 말까 → 20분.
제작 주기의 단위가 '주'에서 '분'으로 바뀌었습니다.
누적 실적 (2026년 9월 기준)
- 이 파이프라인으로 제작한 강의 57편
- 완성 산출물 83개, 자막(SRT) 97개
- 시리즈: 원론 25강, 총론 7강, 웹소설 5강, 클로드코드 계열, 중급·고급 등
예전 속도였다면 57주, 1년이 넘게 걸렸을 분량입니다.
그리고 단순히 빨라진 게 아닙니다. 주 1편이 한계일 때는 만들 수 있는 강의만 만들게 됩니다. 시리즈를 기획해도 완주할 수 있을지 알 수 없으니 애초에 짧게 잡습니다. 20분이 되자 25강짜리 시리즈를 계획하고 끝내는 일이 가능해졌습니다. 속도가 바뀌니 만들 수 있는 것의 종류가 바뀌었습니다.
질적으로는
- 자막 수정 작업 자체가 사라졌습니다. 사람이 볼 것은 정렬 신뢰도가 낮은 구간만 따로 모은 검수 목록뿐입니다. 전수 검사가 표적 검사가 됐습니다.
- 작업의 성격이 "자막을 만드는" 일에서 "규칙을 조정하는" 일로 바뀌었습니다. 컷이 붙었다 싶으면 설정값 한 줄 바꿔 3~5단계만 다시 돌립니다.
- 실패가 재현 가능해졌습니다. 단계별 중간 결과가 남아 정렬 문제인지 컷 규칙 문제인지 바로 가릅니다.
④ 나만의 방식 또는 개선 포인트는 무엇인가요?
1. 받아쓰기가 아니라 정렬. 자동 자막의 정확도를 높이려 한 게 아니라, 정확도가 필요 없는 구조로 바꿨습니다. 원본 대본이 있는데 AI에게 알아맞히기를 시킬 이유가 없습니다.
2. 음차/표기 분리. 한·영 혼용은 대개 후처리 치환으로 해결하려 하는데 후처리는 새 용어마다 깨집니다. 정렬용과 표기용 텍스트를 처음부터 두 벌로 분리해 문제가 생기지 않게 했습니다.
3. 한 번의 정렬로 자막과 컷을 둘 다 구동. 같은 정렬 결과를 공유하게 만들어 자막과 영상의 싱크가 구조적으로 어긋날 수 없습니다.
4. 문장부호 맥락별 차등 컷. 마침표 뒤의 쉼은 호흡이고 쉼표 뒤의 쉼은 군더더기라는 판단을 규칙으로 옮겼습니다.
5. 평탄화하지 않는 출력. 최종본으로 굳히지 않고 편집 가능한 타임라인으로 내보냅니다. 자동화가 사람의 판단을 대체하는 게 아니라 판단할 지점까지 데려다주는 구조입니다.
6. 유료 API 의존 금지를 설계 원칙으로. 핵심 공정은 전부 오픈소스이고, 유료 도구는 대체 가능한 부분에만 씁니다. 따라 하려는 사람에게 비용이 장벽이 되지 않도록 한 선택입니다.
⑤ 다른 사람도 따라 할 수 있나요?
이 항목을 목표로 삼고 만들었습니다. "해봤다"가 아니라 "넘겨줄 수 있다"입니다.
문서 3종
- SPEC.md — 무엇을 만들 것인가 (설계 원칙, 입출력 계약, 기술 선택 이유)
- README.md — 어떻게 쓰는가 (설치, 입력 배치, 실행, 권장 첫 실행 순서)
- CLAUDE.md — 작업 런북 (강의 한 편을 만드는 전체 절차와 분기)
따라 하기 쉽게 만든 장치
- 단계별 독립 실행. --stage 1-2, --stage 3-5처럼 필요한 구간만 돌립니다. 전체를 이해하지 못해도 한 단계씩 검증하며 들어올 수 있습니다.
- 중간 캐시. 무거운 정렬을 반복하지 않습니다.
- 위험 구간 우선 검증 순서를 문서화. "가장 먼저 1-2단계만 돌려 정렬 정확도부터 판정하라"고 적어, 진짜 위험한 곳이 어디인지 미리 알려 줍니다.
- 실패 모드까지 문서화. 10분 넘는 음성은 후반부 싱크가 밀린다 → 파트별 정렬로 우회. GPU 메모리 부족 → 5분 단위 자동 분할. 겪은 실패와 우회법을 그대로 적었습니다.
- 설정으로 분리. 모든 임계값이 설정 파일에 있어 코드를 읽지 않고도 자기 스타일에 맞출 수 있습니다.
- 확장 전제. 런북 첫머리에 "이 자동화를 베이스로 자기 강의 스타일에 맞게 확장한다"고 적혀 있습니다.
실제로 같은 방식으로 만든 다른 자동화(전자책 제작 툴킷)를 동료 배포용 독립 저장소로 분리해 넘긴 전례가 있습니다.
[책임 있는 활용을 위해 지킨 것]
- 사용 도구와 라이선스를 오픈소스/유료로 구분해 전부 명시했습니다.
- 합성 음성은 강사 본인 음성을 본인 동의 하에 사용했고, 아바타는 유료 라이선스 범위 안에서 썼습니다. 타인의 음성·초상을 무단 합성한 부분이 없습니다.
- 강의 대본은 전부 본인이 작성했습니다. 자막 글자가 원본 대본 그대로여서 출처가 명확합니다.
- 파이프라인이 다루는 데이터는 본인의 강의 음성과 대본뿐이며 제3자의 개인정보가 포함되지 않습니다.
- 강의 내용의 사실 주장은 별도 검증을 거칩니다. AI 생성 문장을 검증 없이 강의에 넣지 않는 것을 작업 규칙으로 둡니다.
- 이 파이프라인의 목적은 사람의 검수를 없애는 것이 아니라 검수할 지점을 좁히는 것입니다. 그래서 출력이 편집 가능한 형태로 나옵니다.
[맺으며]
실제로 바뀐 것은 도구가 아니라 질문이었습니다. "AI 자막의 정확도를 어떻게 올릴까"를 붙들고 있는 동안에는 답이 없었습니다. "나는 이미 대본을 가지고 있는데 왜 AI에게 알아맞히라고 하고 있지?"로 질문을 바꾸자 문제가 사라졌습니다.
AI를 잘 쓰는 일은 더 좋은 모델을 찾는 일이 아니라, AI에게 시키지 않아도 되는 일을 알아보는 일에 가깝다고 생각합니다.
📎 첨부파일 (1)
📄 AI활용사례_강의제작자동화_유예찬.pdf