Communitygithub.com

거친 편집 (Rough Cut)

사용자가 이미 선택된 자료를 기계적으로 다듬을 때 사용합니다. 예: "mach den Rohschnitt", "bau den Rohschnitt", "schneid die Ähms raus", "nimm die Füllwörter raus", "entferne die Pausen", "kürz die Pausen", "schneid die Versprecher raus", "mach den Radioschnitt", "straff das", "build the rough cut", "cut the fillers", "remove the ums", "tighten the pauses", "trim the dead air", "cut the retakes", "radio edit". 스토리 블록을 project.json에서 활성화된 세그먼트로 변환합니다. 콘텐츠 선택(컷-스토리)은 하지 않습니다.

거친 편집 (Rough Cut)란 무엇인가요?

이 스킬은 비디오/오디오 편집의 '거친 편집(rough cut)' 단계를 자동화합니다. 기계적인 다듬기 작업(무음, 필러 단어, 재촬영 부분 제거 및 스플라이스 위생 처리)을 수행하며, 모든 작업은 되돌릴 수 있고 각 결정의 출처(provenance)를 기록합니다. 사용자가 미리 선택한 스토리 블록을 기반으로 작동하며, 편집 결정은 개별 프레임 단위로 스냅되어 A/V 동기화 드리프트를 방지합니다. 주로 Claude Code, Cursor, Codex와 같은 AI 에이전트 플랫폼에서 사용되며, `cut-story`가 먼저 실행되어야 합니다. 독일어 음성의 특성을 고려하여 어조 입자(예: doch, eben, halt)는 자동 제거하지 않고 플래그만 표시하는 등 언어학적으로 세심한 기본값을 제공합니다. 최종 산출물은 각 세그먼트의 활성화 여부, 순서, 출처가 포함된 JSON 구조이며, 사용자가 쉽게 검토하고 조정할 수 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/businessbaum/vedit/tree/HEAD/.agents/skills/cut-rough

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

cut-rough

기계적 다듬기: 무음, 필러 단어, 재촬영, 스플라이스 위생. 여기의 모든 것은 되돌릴 수 있으며 모든 결정에는 출처(provenance)가 기록됩니다.

인수 $project는 슬러그(slug)이며, 전체 요청은 $ARGUMENTS에 있습니다. 빈 $-플레이스홀더는 스킬이 슬래시 명령이 아닌 자동으로 트리거되었음을 의미합니다: 세션 컨텍스트의 PIPELINE_STATE에서 프로젝트를 가져와서 선택한 프로젝트를 말하십시오. 동사 이름은 빌드 계약을 따릅니다. python engine/ve.py --help가 충돌 시 우선합니다.

전제 조건과 그 엄격함의 이유

먼저 cut-story를 실행하십시오. story.blocks가 없으면 그렇게 말하고 진행하지 말고 cut-story를 제안하십시오 - 버려질 자료에 대한 기계적 절단은 아무도 듣지 않을 재촬영 및 필러 탐지에 시간을 낭비합니다.

사용자가 명시적으로 모든 자료에 대해 기계적 패스를 원할 경우("einfach nur die Ähms raus"), 이는 정당합니다. 실행하고, 콘텐츠 선택이 발생하지 않았음을 말하십시오.

프레임 규칙

컷 포인트는 전체 프레임으로 스냅됩니다. 이것은 단순히 정리하기 위함이 아닙니다 - 프레임 그리드에서 벗어난 컷 포인트는 concat 필터가 컷당 8.33ms의 A/V 드리프트를 축적하게 하여, 150컷에서 1250ms가 됩니다. 스냅된 경우, 동일한 150컷은 정확히 0샘플만큼 드리프트합니다.

in_frame  = floor(t_in  * fps + 0.5)    # 반올림 (0.5에서 올림) -> 동률은 나중으로
out_frame = ceil(t_out * fps - 0.5)    # 내림 (0.5에서 내림) -> 동률은 더 이르게
if out_frame <= in_frame: out_frame = in_frame + 1

out은 배타적입니다 - ffmpeg는 trim=end를 엄격한 <로 구현하며, 반개방 [in, out)이 정확한 연결을 가능하게 합니다. OUT 반올림을 잘못하면 모든 세그먼트가 한 프레임이 되고, 200컷에서 6.7초의 드리프트와 청취 가능한 동기화 손상이 발생합니다.

이 산술을 수동으로 수행하지 마십시오. vedit/timebase.py가 이를 담당합니다: snap_in / snap_out.

단계 1 - 패스 실행

python engine/ve.py cut $project

평면화된 단어 목록에 대해 4번의 패스를 수행한 후 스냅합니다:

  1. 무음 계층화. min_gap 미만의 간격은 절대 컷되지 않습니다. 그 이상에서는 유지되는 일시정지가 앞 단어의 구두점에 따라 조정됩니다: .?! x1.5 (최소 0.40초), ,;: x1.0, 중간절 x0.7 (최소 0.20초), 주제 변경 x2.0 (최소 0.60초). 균일한 일시정지 길이는 기계 편집의 가장 눈에 띄는 신호입니다 - 귀는 마침표 후에 더 긴 숨을 기대합니다.
  2. 필러 계층화. 아래 참조.
  3. 재촬영 감지. 이후 테이크가 이전 테이크를 대체하는 반복 n-gram.
  4. 스플라이스 위생. 패딩, 크로스페이드, 제로-크로싱 스냅, 컷 밀도 제한.

단계 2 - 필러 계층과 자동화해서는 안 되는 것

  • 계층 A - 비어휘적 (äh ähm hm mh uh um er): 자동 제거. 아무도 원하지 않습니다.
  • 계층 B - 어휘적 필러 (weißt du, sozusagen, quasi, im Prinzip, you know, I mean): 가드와 함께 자동 제거 - 문장 시작이 아니고, 제거 시 min_clip 미만의 조각이 남지 않을 때.
  • 계층 C - 양상 입자: also halt eben ja mal doch schon eigentlich genau, 그리고 영어 like just well right so basically actually. 플래그만. 절대 자동 제거하지 않음.

계층 C는 자동 편집기가 독일어 음성을 망치는 부분입니다. doch, eben, halt 및 ja는 태도와 담화 구조를 전달합니다. 이를 제거하면 화자가 더 간결해 보이지 않고 번역처럼 들립니다. 사용자가 어쨌든 제거를 요청하면 실행하십시오 - 하지만 한 번 그 비용에 대해 말하고, 그 후에는 언급하지 마십시오.

탐지 신호 순서: 어휘 일치, 그 다음 duration/char >= 0.12 s, 그 다음 측면 간격 >= 0.10 s, 그 다음 주변 음성 대비 6dB 이내의 에너지.

필러 신호로 WhisperX score를 절대 사용하지 마십시오. 이는 정렬을 측정하는 것이지 망설임을 측정하는 것이 아닙니다. 낮은 점수는 희귀 단어와 고유 명사에 집중됩니다 - 필러의 반대입니다. 타임스탬프 신뢰도 플래그로만 사용하십시오: score < 0.35는 패딩을 60ms 늘리고 해당 단어 내 컷을 금지합니다.

단계 3 - 기본값과 그 상태

매개변수기본값비고
pad_in0.08 초/p t k b d g/ 앞의 파열음 폐쇄
pad_out0.10 초/t k s/ 방출음이 정렬기의 end를 지나감
keep_pause0.18 초 최소무음 대신 남겨진 숨 간격
min_gap0.55 초이 미만이면 절대 컷하지 않음
min_removal0.20 초더 짧은 제거는 스플라이스 가치가 없음
max_cut_density1.5초당 1개점프컷 피로
min_clip0.35 초더 짧은 유지 클립은 이웃에 병합
크로스페이드20ms (최소 10, 최대 40)동일 테이크 curve=tri, 테이크 간 qsin
제로-크로싱 검색+/-5ms (240 샘플)오디오 전용, 비디오는 절대 이동하지 않음

이것들은 연구에서 도출된 것이지 지각 테스트를 거친 것이 아닙니다. project.json에 "calibrated": false가 있는 한, 컷을 변호할 때마다 그렇게 말하십시오. 보정되지 않은 임계값을 조정된 것으로 제시하지 마십시오. 세션 훅이 이러한 이유로 매 세션마다 이 플래그를 표시합니다.

제로-크로싱 스냅을 이해하는 것이 중요합니다: 제로-크로싱이 아닌 지점에서의 하드 컷은 신호의 자연 최대값보다 29.5배 큰 샘플 계단을 생성합니다 - 청취 가능한 클릭입니다. 제로-크로싱 스냅과 20ms 크로스페이드 모두 이를 기준으로 되돌립니다. 둘 다 사용하십시오. 스냅은 오디오만 이동하며 비디오는 이동하지 않습니다. 서브프레임 비디오 이동은 표현할 수 없습니다.

단계 4 - J/L 컷

4-12 프레임이 유용한 범위입니다. 기본값 6.

양쪽이 동일한 source_id를 공유하고 어느 쪽도 B-롤 또는 전체 프레임 오버레이로 덮이지 않은 J/L 컷은 거부하십시오. 보이는 입에서 J-컷이 아닌 경우, 이는 립싱크 오류이며 편집이 아닌 기술적 결함으로 읽힙니다.

단계 5 - 세그먼트 쓰기

세그먼트는 src_in_frames (포함) 및 src_out_frames (배타적)를 유일한 권위자로 하여 segments[]에 기록됩니다. 모든 세그먼트에 필수:

  • enabled - 거부된 자료는 이유와 함께 false이며, 절대 제거되지 않습니다. 모든 자동 결정은 하나의 부울 값을 뒤집어 되돌릴 수 있어야 합니다. 이것이 공격적인 기본값을 안전하게 만드는 속성입니다.
  • order - 명시적 출력 순서, 활성화된 세그먼트에 대해 밀집.
  • provenance - stage (스토리 수준 드롭의 경우 content, silence, filler, retake), rule, confidence, applied_by, 및 트리거한 측정값 (original_gap_s). 출처는 사용자가 "모든 계층-B 제거 취소"를 할 수 있게 합니다.
  • word_range 및 비정규화된 text. 텍스트는 읽기 전용이며 절대 권위가 없습니다 - word_range와 충돌하면 단어 범위가 우선합니다.

타임라인 위치는 파생되며, 절대 저장되지 않습니다. 로드 시 활성화된 세그먼트의 누적 합계로 _computed에 기록됩니다. _computed를 수동으로 작성하지 마십시오.

stage를 "rough_cut"으로 설정하십시오.

단계 6 - 스크립트가 아닌 편집자처럼 보고

보고: 소스 지속 시간, 컷 지속 시간, 제거 비율, 컷 수, 컷 밀도 (분당 컷 수), 및 출처 규칙별 수. 그런 다음 과도한 컷으로 읽히는 것을 플래그하십시오: 1.5초당 하나 이상의 컷이 있는 구간, min_clip에 가까운 유지 클립, 및 플래그만 표시되고 남겨진 계층-C 필러의 수.

세 가지 다음 단계를 제안하십시오: 섹션 미리보기, 임계값 조정, 또는 그래픽/자막으로 이동.

실패 모드

증상원인해결책
모든 세그먼트가 1프레임OUT이 내림 대신 올림됨snap_out 사용; 인라인 수학 절대 금지
스플라이스에서 청취 가능한 클릭제로-크로싱 스냅 생략스냅 및 20ms 크로스페이드
음성이 잘리고 숨가쁘게 들림균일하게 유지된 일시정지구두점 조정 테이블 적용
화자가 로봇 같고 독일어답지 않게 들림계층 C 제거됨계층 C는 플래그 전용; 출처로 복원
컷이 단어 중간에 위치전사가 계층 3(BPE 토큰)임재전사; 토큰 타임스탬프는 컷할 수 없음
비디오 전체에서 A/V 드리프트 증가컷 포인트가 프레임에 스냅되지 않음모든 컷 포인트 스냅 후 QC 검사(a) 재실행

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

businessbaum/vedit

This skill should be used when the user asks for subtitles or on-screen text of what is being said - "brenn die Untertitel ein", "mach Untertitel", "Untertitel drauf", "leg Untertitel drüber", "brenn die Subs ein", "mach die Captions", "Wort für Wort Untertitel", "Karaoke-Untertitel", "korrigier den Untertitel-Text", "burn in the captions", "add subtitles", "burn the subs", "word-by-word captions", "fix a caption typo". Covers ASS generation, the pixel-width grouping rule for German, the font table, and burn-in through libass.

businessbaum/vedit

This skill should be used when the user asks to decide what the video is actually about before any mechanical cutting - "bau die Story", "was soll ins Video", "was kann raus", "welche Themen bleiben", "kürz das auf 6 Minuten", "mach daraus ein kurzes Video", "wo ist der Hook", "sortier die Themen", "worum geht es hier eigentlich", "build the story", "decide what stays", "structure this", "cut this down to N minutes", "find the hook", "reorder the topics". This is the CONTENT-selection pass that writes the "story" block in project.json; it runs after transcribe and before cut-rough.

businessbaum/vedit

This skill should be used when the user asks for the finished video file - "exportier das", "render das fertig", "mach das final", "renderte das Video", "mach den Endexport", "bau das Video zusammen", "mach es fertig für YouTube", "gib mir die MP4", "export the final", "render the final cut", "make the master", "export for TikTok", "give me the mp4". Covers segment rendering with the cache, guarded concat, the one-pass audio, loudness normalisation and the single mux.

관련 스킬