묵음 제거 (파이프라인 에이전트 1)
자동 편집의 첫 번째 단계입니다. 원본 녹화와 단어 수준 트랜스크립트를 입력받아 묵음만 제거합니다: 첫 단어 전과 마지막 단어 후의 데드 에어, 그리고 임계값보다 긴 단어 간 일시 정지(자연스러운 호흡 길이로 줄이며, 절대 0갭으로 만들지 않음). 화자의 단어는 그대로 유지합니다. 잘못된 시작, 다시 시도, 말 더듬기는 컷-미스테이크 에이전트(에이전트 2)의 작업입니다.
이 에이전트는 결정론적이며 트랜스크립트 기반으로 작동하므로, 출력 파일(*.silence-transcript.json)은 다음 에이전트와 비트 동기화 검증 도구에 깔끔하게 전달됩니다.
사용 시기
- "묵음 제거", "일시 정지 다듬기", "데드 에어 제거", "영상 속도 조절"
- 마스터 편집 워크플로우의 첫 번째 단계, 트랜스크립션 직후.
사전 요구 사항
단어 수준 트랜스크립트 JSON 파일. ElevenLabs Scribe 형식({ words: [{ text, start, end, type }], audio_duration_secs }) 또는 일반 형식({ words: [{ text, start, end }] }) 모두 가능합니다. 워크스페이스 트랜스크라이버를 사용하여 생성하세요:
node scripts/transcribe-elevenlabs.mjs path/to/raw.mp4 # -> path/to/raw.json
사용법
# 1) 계획만 수립 — 컷 계산, EDL + 재시간 조정 트랜스크립트 작성 (비디오는 건드리지 않음)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--out-dir video-projects/<slug>/assets
# 2) 비디오와 함께 — ffmpeg 명령어도 작성 (렌더링은 아직 하지 않음)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --out-dir video-projects/<slug>/assets
# 3) 컷 비디오 렌더링 (로컬 ffmpeg, 재인코딩, A/V 동기화 유지)
# --apply 플래그를 추가하면 실제 ffmpeg 실행
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --apply \
--output video-projects/<slug>/assets/edited-silenced.mp4
옵션
| 플래그 | 기본값 | 의미 |
|---|---|---|
--video <path> | — | 원본 비디오 경로; ffmpeg 명령어/렌더링 활성화 |
--out-dir <dir> | 트랜스크립트 옆 | 출력 파일이 작성될 디렉터리 |
--output <path> | <video-stem>.silenced.mp4 | 컷 비디오 경로 |
--gap <s> | 0.55 | 제거 가능한 묵음으로 간주할 최소 일시 정지 시간 |
--head-pad <s> | 0.22 | 첫 단어 전에 유지할 묵음 길이 |
--tail-pad <s> | 0.34 | 마지막 단어 후에 유지할 묵음 길이 |
--apply | 꺼짐 | 실제 ffmpeg를 실행하여 컷 렌더링 |
결정 방식 (묵음 규칙)
--gap(0.55초) 미만의 일시 정지는 그대로 둡니다 — 자연스러운 말하기 리듬.- 다듬어진 일시 정지의 경우, 자연스러운 호흡이 유지되며 컨텍스트에 따라 길이가 조정됩니다: 긴 일시 정지(≥2초)는
0.24초, 문장 종결 부호(. ! ?) 뒤에는0.20초, 그 외에는0.14초. 유지되는 호흡은 이전 구문의 끝 부분에 약간 치우쳐 배치됩니다. - 앞/뒤 데드 에어는
--head-pad/--tail-pad길이로 다듬어집니다. - 삭제 범위는 병합되고, 유지 범위는 그 보완 집합이 됩니다. 컷은 ffmpeg
trim/atrim+concat필터그래프로 렌더링되며(*.silence-filter.txt스크립트로 작성되어-/filter_complex로 전달), 비디오와 오디오는 동기화가 유지됩니다.
출력물 (--out-dir에 작성)
| 파일 | 목적 |
|---|---|
<stem>.silence-edl.json | 유지/삭제 범위, 지속 시간, 매개변수 — 편집 결정 목록 |
<stem>.silence-transcript.json | 편집된 타임라인에 맞춰 재시간 조정된 단어들 (에이전트 2 + 비트 동기화에 사용) |
<stem>.silence-decisions.md | 사람이 읽을 수 있는 요약 + 가장 큰 일시 정지 정보 |
<stem>.silence-filter.txt | ffmpeg 필터그래프 (--video 옵션 사용 시에만) |
<video-stem>.silenced.mp4 | 컷 비디오 (--apply 옵션 사용 시에만) |
stdout으로 출력되는 JSON 요약에는 removed, removedPct, 범위 개수, 출력 경로가 포함되어 있어 마스터 워크플로우에서 로깅 및 체이닝에 유용합니다.
튜닝 노트
- 토킹헤드 YouTube 기본값(
--gap 0.55)은 일반적인 원본 테이크에서 약 15-20%를 순수 묵음으로 제거합니다. 더 빠르고 간결한 컷을 원하면--gap을 낮추고, 자연스러운 호흡 공간을 더 유지하려면 높이세요. - 문장 경계에서 컷이 너무 공격적이라고 느껴지면 문장 끝 호흡 길이를 높이거나
--gap을 높이세요.
다음 에이전트로 전달
<stem>.silence-transcript.json(및 렌더링된 경우 silenced.mp4)를 컷-미스테이크 에이전트에 전달하세요. 타임스탬프가 이미 편집된 타임라인에 맞춰져 있으므로, 다운스트림 비트 타이밍과 scripts/validate-beat-sync.mjs 스크립트는 추가 조정 없이 작동합니다.