침묵 제거 (파이프라인 에이전트 1)
자동화된 편집의 첫 번째 단계입니다. 원시 녹화 영상 + 단어 수준의 자막을 입력받아 오직 침묵만을 제거합니다: 첫 단어 이전과 마지막 단어 이후의 데드 에어, 그리고 임계값보다 긴 단어 사이의 일시 정지를 자연스러운 호흡(full stop은 아님)으로 줄입니다. 화자의 말 자체는 그대로 유지합니다. 말실수, 재시도, 더듬거림은 cut-mistakes 에이전트(Agent 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 | off | 실제로 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 | 편집된 타임라인에 맞게 재시간 조정된 단어들 (Agent 2 + 비트에 전달) |
<stem>.silence-decisions.md | 사람이 읽을 수 있는 요약 + 가장 긴 일시 정지 정보 |
<stem>.silence-filter.txt | ffmpeg 필터그래프 (--video 사용 시에만 생성) |
<video-stem>.silenced.mp4 | 편집된 영상 (--apply 사용 시에만 생성) |
표준 출력으로 출력되는 JSON 요약에는 removed, removedPct, 범위 개수, 출력 경로가 포함되어 있어, 마스터 워크플로우에서 로깅 및 체이닝에 유용합니다.
튜닝 참고 사항
- YouTube 화면 녹화 기본값(
--gap 0.55)은 일반적인 녹화 영상에서 약 15-20%의 순수 침묵을 제거합니다. 더 빠르고 강력한 편집을 원하면--gap을 낮추고, 더 자연스러운 호흡 공간을 유지하려면--gap을 높이세요. - 문장 경계에서 편집이 너무 과격하다고 느껴지면 문장 종결 호흡 시간을 늘리거나
--gap을 높이세요.
다음 에이전트로 전달
<stem>.silence-transcript.json (그리고 렌더링된 silenced.mp4)를 cut-mistakes 에이전트에 전달하세요. 타임스탬프가 이미 편집된 타임라인에 맞춰져 있으므로, 다운스트림 비트 타이밍과 scripts/validate-beat-sync.mjs는 추가 조정 없이 정상 작동합니다.