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번의 패스를 수행한 후 스냅합니다:
- 무음 계층화.
min_gap미만의 간격은 절대 컷되지 않습니다. 그 이상에서는 유지되는 일시정지가 앞 단어의 구두점에 따라 조정됩니다:.?!x1.5 (최소 0.40초),,;:x1.0, 중간절 x0.7 (최소 0.20초), 주제 변경 x2.0 (최소 0.60초). 균일한 일시정지 길이는 기계 편집의 가장 눈에 띄는 신호입니다 - 귀는 마침표 후에 더 긴 숨을 기대합니다. - 필러 계층화. 아래 참조.
- 재촬영 감지. 이후 테이크가 이전 테이크를 대체하는 반복 n-gram.
- 스플라이스 위생. 패딩, 크로스페이드, 제로-크로싱 스냅, 컷 밀도 제한.
단계 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_in | 0.08 초 | /p t k b d g/ 앞의 파열음 폐쇄 |
pad_out | 0.10 초 | /t k s/ 방출음이 정렬기의 end를 지나감 |
keep_pause | 0.18 초 최소 | 무음 대신 남겨진 숨 간격 |
min_gap | 0.55 초 | 이 미만이면 절대 컷하지 않음 |
min_removal | 0.20 초 | 더 짧은 제거는 스플라이스 가치가 없음 |
max_cut_density | 1.5초당 1개 | 점프컷 피로 |
min_clip | 0.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) 재실행 |