토킹헤드 클립 리뷰
토킹헤드 촬영 영상을 수동으로 검토하지 않고도 승인된 선택 클립으로 변환합니다. 에이전트가 전사, 정렬 및 제안을 수행하고, 사용자는 한 페이지에서 승인합니다. 그런 다음 에이전트가 정확히 승인된 대로 어셈블합니다.
전사는 로컬 머신에 유지됩니다. 원본 비디오는 절대 수정되지 않습니다.
엄격한 규칙
- 원본 비디오를 수정, 이동 또는 재내보내지 마십시오. 모든 것은 in/out 포인트와 파생 파일로 처리됩니다.
- 사용자의 푸티지를 삭제하거나 휴지통을 비우지 마십시오. 디스크 공간이 부족하면 알리고 사용자가 직접 처리하도록 하십시오.
- 스크래치 폴더에서 작업하십시오. 미리보기, 포스터, 리뷰 페이지 및 선택 클립만 미디어 옆에 배치합니다.
- 문구를 새로 만들지 마십시오. 클립 텍스트는 전사본에서 가져옵니다. 선택적 문구 수정은
--fix로 전달되는 JSON 맵에 있습니다(references/term-corrections.example.json참조). 예제 파일을 적용하지 마십시오. - 카메라에서 말한 사실(시간, 숫자, "10분 전" 등)을 선택하기 전에 실제 녹화와 비교하여 확인하십시오.
- 유지된 구간에 모니터 시선, 마이크 충격음, 클릭 또는 호흡 소리가 없어야 합니다. 재편집 후에는 선택 클립뿐만 아니라 시선 분석(5단계)을 다시 실행하고 모든 편집 지점을 청취하십시오. 소음은 음소거하거나 잘라내되, 그 옆에 있는 단어는 자르지 마십시오.
- 추가 촬영 또는 재녹음된 라인은 메인 테이크의 톤, 레벨 및 공간(동일한 마이크, 게인, 거리, EQ 및 노이즈 제거)과 일치해야 합니다. 음이 뭉개지거나 상자 안에서 말하는 것처럼 들릴 라인은 플래그를 표시하고 제품에 포함시키지 마십시오.
- 사용자를 위해 작성하는 모든 내용에 줄표(em dash 대신 하이픈)를 사용하십시오.
- 단어 경계는 엄격한 제한입니다. 프롬프트에서 빡빡한 컷이나 시선 트림을 요청하더라도 마찬가지입니다. 클립은 Whisper의 단어 시간 주변에 0.15s 프리롤과 0.25s 테일을 가지며(Whisper의 단어 경계는 종종 빠르거나 늦음), 이웃 단어와 겹치지 않도록 고정됩니다. 일시 중지 및 시선 트림은 단어 사이의 간격 내에서만 자르고 각 단어 옆에 최소 0.1s를 유지합니다. 시선 이탈이 말하는 단어와 겹치면 단어를 유지하고 플래그를 표시하고(
away_words, 스트링아웃에서 빨간색 테두리) 절대 자르지 마십시오. 에지 트림에는 자체 트리밍 스크립트를 작성하는 대신build_review.py --gaze-trim을 사용하십시오. 수동으로 설정한exact_spans도 단어 경계로 다시 밀려납니다.
설정 (머신당 한 번)
scripts/check_deps.sh를 실행하십시오. ffmpeg, ffprobe, python3 및 하나의 Whisper 백엔드가 필요합니다. Swift는 시선 분석 단계에 선택 사항입니다. 설치 단계: references/setup.md.
레이아웃
WORK/ 스크래치 폴더, 예: ./talk/
tx/<take>.wav|json|txt 16 kHz 모노 오디오, 단어가 포함된 Whisper JSON, 읽기 가능한 전사본
picks.json 비트 + 후보 (에이전트가 편집)
picks_resolved.json 단어 정확도 스팬, 텍스트, 지속 시간 (생성됨)
pose.json 시선 이탈 간격 (선택 사항, macOS)
REVIEW/ 미디어 옆, 예: ./review/
previews/<take>.mp4 540p H.264 페이지용 복사본
posters/<beat>-<i>.jpg
"<Title> - take review.html"
"<Title> - picks stringout (540p).mp4"
SELECTS/ selects.json, selects.csv, selects.edl, selects.mp4
에피소드 이름은 작품명을 따서 지정하십시오(예: launch-01). 테이크 키는 짧게 유지(A, B, C)하고 picks.json에서 파일 이름에 매핑하십시오.
단계
- 인벤토리.
ffprobe로 각 테이크(지속 시간, 크기, fps, 회전)를 검사합니다. 전화기 영상은 종종 가변 프레임 속도이거나 세로 방향입니다. 미리보기 및 렌더링은 이를 정규화합니다. 어떤 파일이 편집할 등급 내보내기 파일이고 어떤 파일이 무시할 카메라 원본인지 물어보십시오. - 전사.
python3 scripts/transcribe.py --out WORK/tx TAKE...를 실행하십시오. Whisper 패키지가 기본python3에 없으면check_deps.sh에서 보고한 인터프리터를 사용하십시오. 파일이 아직 내보내기 중이면 백그라운드에서--watch FOLDER --expect N을 사용하십시오. 각 파일이 30초 동안 성장을 멈출 때까지 기다립니다. Apple Silicon의 권장 모델:mlx-community/whisper-large-v3-turbo, 단어 타임스탬프,condition_on_previous_text끄기. 음성이 영어가 아니면--lang을 설정하십시오. - 선택 초안 작성.
- 모드 (a), 하나의 스크립트에 대한 여러 테이크:
WORK/script.txt에 한 줄 또는 한 줄에 하나의 토킹 포인트를 작성합니다(id | name | text형식으로 ID를 원하는 경우).python3 scripts/segment.py takes --tx WORK/tx --script WORK/script.txt --out WORK/picks.json A=take-a B=take-b ...를 실행하십시오. 각 테이크에서 각 라인의 모든 시도를 찾고(퍼지 단어-윈도우 매칭, 재시작은 별도의 후보로 나타남) 가장 유창한 것을 미리 선택합니다. - 모드 (b), 하나의 긴 영상:
python3 scripts/segment.py single --tx WORK/tx --out WORK/picks.json A=long-take는 1.2초 이상의 일시 중지 및 문장 끝에서 잘라 4-40초 클립으로 만듭니다. - 그런 다음
.txt전사본을 직접 읽으십시오. in/out 포인트를 수정하고, 재시작 및 결함에 대해cut: [[a,b]]를 추가하고, 비트를 병합 또는 분할하고, 후보마다 실제why(깔끔함, 재시작, 잘못된 단어, 화면 녹화와 일치)를 작성하십시오. 일치하는 화면 녹화와 함께 촬영된 테이크를 선호하십시오. 자동 점수는 동점일 때만 사용됩니다.
- 모드 (a), 하나의 스크립트에 대한 여러 테이크:
- 페이지 빌드.
python3 scripts/build_review.py --work WORK --media SRC --out REVIEW --title "launch-01" --stringout을 실행하십시오. 스팬은 0.6초 이상의 단어 간격에서 분할되고silencedetect -35dB / 0.35s로 조정됩니다. 후보에keep_pauses: true를 추가하면 이를 건너뜁니다. 패딩 플래그:--pre 0.15 --tail 0.25 --guard 0.1. 실제 구문 맵이 있는 경우에만--fix path/to/corrections.json을 전달하십시오. HTML을 브라우저에서 엽니다. 비디오는 클릭 시 로드되므로 페이지가 빠르게 열립니다. - 선택 사항, macOS: 시선 분석.
python3 scripts/gaze.py --work WORK --review REVIEW를 실행한 다음,--stringout --gaze-trim과 함께 4단계를 다시 실행하십시오. 시선 이탈 프레임은 스트링아웃에서 빨간색 테두리로 표시됩니다. 나중에 화면 푸티지로 덮고 오디오는 유지하십시오. - 인간 검토. 사용자에게 해야 할 일을 알려주십시오: 재생, Use/Skip, 메모, "Save decisions (JSON)".
<slug>-decisions.json을 다운로드합니다. "Copy as text"는 대체 방법입니다. 건드리지 않은 카드는 제안을 유지합니다. - 메모 적용. 결정 JSON을 읽으십시오. 모든 메모를
picks.json편집(cut,in/out,audio_only: true,grade: "eq=gamma=1.28:brightness=0.03",optional: true)으로 변환하십시오. 먼저 백업을 유지하십시오(cp picks.json picks.before-notes.json). 4단계를 다시 실행하고 각 메모와 수행한 작업을 요약하십시오. - 어셈블.
python3 scripts/assemble.py --work WORK --media SRC --decisions /path/to/<slug>-decisions.json --out SELECTS --render를 실행하십시오. 프레임 정확한 전체 해상도selects.mp4, CMX3600selects.edl(Premiere, Resolve, Final Cut에서 가져오기 가능),selects.csv및 시선 이탈 범위와 메모가 포함된selects.json을 얻을 수 있습니다. - 검증. 모든 편집 지점을 청취하십시오(잘린 첫 번째 또는 마지막 음절, 시선, 소음 없음).
ffprobe로 렌더링 지속 시간을selects.json의 합계와 비교하고 연락처 시트를 만드십시오:ffmpeg -i selects.mp4 -vf "fps=1/6,scale=180:-1,tile=10x3" -frames:v 1 sheet.jpg. 보고 길이, 변경된 사항 및 여전히 사용자가 필요로 하는 사항을 확인하십시오.
picks.json 형식
{"episode":"launch-01","mode":"takes","takes":{"A":"take-a","B":"take-b"},
"beats":[{"id":"01a","name":"Hook","script":"...","cands":[
{"take":"B","in":0.82,"out":21.2,"pick":true,"why":"Clean, matches the screen.","cut":[[51.4,53.82]],
"note":"","audio_only":false,"grade":null,"optional":false,"signals":{"dur":20.1,"wpm":162,"fillers":0,"repeats":0}}]}]}
팁
- 모든 단어 타이밍을 전사 JSON으로 스팟 체크하십시오. 메모 주변의
word@start-end덤프가 컷을 배치하는 가장 빠른 방법입니다. - ffmpeg에
drawtext가 없으면 텍스트 대신drawbox또는hue로 프레임을 표시하십시오. - 큰 렌더링: 먼저 사용 가능한 디스크를 확인하십시오. 4K 테이크는 빠르게 공간을 차지합니다.