자동 영상 제작의 시간 계약 폐쇄: 16개 실행에서 본 캡션·오디오·프레임 드리프트
자동 영상 제작 파이프라인은 편집 문장, 음성 합성 뒤의 밀리초 구간, visual beat 인덱스, 렌더 프레임이라는 서로 다른 시계를 연결한다. 본 연구는 동일 워크플로의 익명화된 16개 실행과 126개 장면에서 편집·오디오 캡션 수, 오디오 시간 유효성, beat coverage, 장면 길이, 프레임 산술, validator와 렌더 artifact를 교차 측정했다. 편집 캡션 1,006개는 오디오 단계에서 1,128개가 되었고, 14개 실행과 102개 장면에서 캡션 수 드리프트가 관찰됐다. 프레임 수 산술은 16개 모두 닫혔지만 최종 오디오 캡션에 대한 스크립트 beat coverage는 7개에서만 유효했으며, 렌더 파일이 있는 14개 중 7개도 이 조건을 통과하지 못했다. 이에 편집 의미 E, 오디오 media time A, 시각 beat B, 렌더 프레임 F, 변환 계보 P를 논리곱으로 검증하는 Temporal Contract Closure를 제안한다. 결과는 파일 존재와 정확한 프레임 수가 필요할 수는 있어도 시간 계약의 충분조건은 아니며, TTS 이후 오디오 타임라인을 권위로 삼아 beat와 프레임을 재생성하고 provenance를 함께 닫아야 함을 보여 준다.
문제 정의와 기여
자동 영상 제작에서는 하나의 ‘시간’이 존재하지 않는다. 편집자가 정한 문장 단위, 음성 합성 뒤 얻은 밀리초 구간, 시각 beat가 참조하는 캡션 인덱스, 렌더러가 소비하는 프레임 번호가 서로 다른 시계다. 각 시계가 자기 내부에서 유효해도 시계 사이의 사상이 끊기면 자막은 읽히지만 화면 전환이 늦고, 프레임 수는 맞지만 장면 의미는 다른 문장에 묶일 수 있다. WebVTT와 TTML2가 cue 시간과 타임베이스를 명시적으로 구분하는 이유도 timed text가 단순 문자열 배열이 아니기 때문이다. [[cite:webvtt,ttml2]]
같은 워크플로 계보의 선행 연구는 역할, visual beat, 오디오 시간, 템플릿, 부정 테스트, 렌더 QA를 단계별 증거로 분리한 Video Contract Evidence Chain 을 제안했다. 그러나 그 연구는 최종 렌더나 픽셀·프레임 QA를 수행하지 않았고 완료 실행 코퍼스도 분석하지 않았다. 이번 개정판은 그 공백을 직접 겨냥한다. 익명화된 16개 실행·126개 장면을 재계산하고, 편집 캡션에서 오디오 캡션, beat 범위, 프레임 수, 산출물 존재까지의 결합 폐쇄를 측정한다. [[cite:priorPaper,measurement]]
핵심 결과는 간단하다. 16개 실행 모두에서 오디오 길이와 fps로부터 계산한 프레임 수는 산술적으로 닫혔지만, 최종 오디오 캡션에 대해 스크립트 beat 범위가 유효한 실행은 7개뿐이었다. 14개 렌더 산출물 중 7개도 이 beat coverage 조건을 통과하지 못했다. 따라서 ‘파일이 존재한다’와 ‘프레임 수가 맞다’는 신호는 필요조건일 수 있어도 시간 계약의 충분조건은 아니다. [[cite:measurement,renderCore]]
표준과 관련 연구
WebVTT는 cue의 종료 시각이 시작보다 뒤여야 하며 시작 시각의 순서를 규정하지만, 여러 cue의 시간 겹침 자체는 허용한다. TTML2는 시간 표현을 media, SMPTE, clock 타임베이스와 연결한다. EBU-TT-D는 자막 저작 때의 명목 프레임률과 재생·표시 프레임률이 다를 수 있으므로 begin/end가 표시 fps가 아니라 media time을 따라야 한다고 명시한다. 이 세 문서는 ‘비겹침’이나 ‘프레임 일치’를 보편 규칙으로 만들지 말고, 먼저 어떤 타임베이스와 사용 맥락을 검증하는지 선언해야 함을 보여 준다. [[cite:webvtt,ttml2,ebu3380]]
자막 품질 연구도 텍스트 정확도 하나로는 부족하다고 본다. SubER는 문자열 편집거리와 함께 자막 분절과 시간 겹침을 결합해 서로 다른 자막 수와 구간을 비교한다. 줄 분절 실험에서는 비통사적 분절이 인지 부하를 높였지만 이해도 차이는 관찰되지 않았다. 즉 캡션 개수 변화는 중요한 경고 신호지만, 개수 동일성은 문법적 경계나 의미적 적합성의 증명이 아니다. [[cite:suber,segmentation]]
음성 인식의 발화 타임스탬프와 단어 경계도 동일하지 않다. WhisperX는 장시간 오디오에서 슬라이딩 윈도우 타임스탬프가 누적 드리프트할 수 있음을 지적하고 VAD와 음소 강제 정렬을 결합한다. MFA 3.0의 최신 다언어 벤치마크는 작은 평균 경계 오차를 보고하지만 모델·언어·도메인 적합성에 조건부다. 따라서 자동 생성 파이프라인은 ‘타임스탬프가 있다’를 ‘정렬이 검증됐다’로 승격해서는 안 된다. [[cite:whisperx,mfa2026]]
사람의 읽기 속도도 단일 상한으로 환원되지 않는다. 74명에게 12·16·20 cps 자막을 보여 준 실험에서는 이해도 차이가 없었고, 선호는 음성 언어 이해와 텍스트 축약 여부에 따라 달라졌다. 이 결과는 본 감사의 6.8초 초과 캡션 수를 품질 경고로 사용할 수는 있어도 보편적 인간 가독성 실패로 단정할 수 없게 한다. [[cite:fastSubtitles]]
마지막으로 시간 값은 계보 없이 재현되지 않는다. PROV-DM은 entity, activity, agent와 파생 관계를 분리하고, CWLProv는 도구 버전·매개변수·중간산출물을 계층적 실행 묶음으로 남긴다. 영상 런타임에서도 Remotion은 미디어 길이와 fps로 durationInFrames를 계산하며, FFmpeg의 setpts·asetpts·fps 필터는 영상과 오디오의 표시 타임스탬프 및 프레임 샘플링을 서로 다르게 바꿀 수 있다. 권위 시간축을 선언하지 않은 파이프라인에서는 같은 숫자가 서로 다른 의미를 가질 수 있다. [[cite:provdm,cwlprov,remotionMetadata,ffmpegFilters]]
자료와 방법
코퍼스는 동일한 자동 영상 제작 워크스페이스에서 편집 스크립트, 실행 스크립트, 오디오 manifest, storyboard 네 산출물을 모두 가진 즉시 하위 실행만 포함했다. 16개 실행은 20 또는 24 fps였고, 모두 일본어 내레이션이었다. 실행 식별자는 run-001부터 run-016으로 치환했으며 주제, 내레이션, 파일명, 절대 경로는 측정 산출물과 논문에서 제거했다. 이 설계는 내용 비공개성을 보존하면서 artifact 간 구조 관계를 재계산하게 한다. [[cite:measurement]]
편집 캡션 수를 n(E s ), 최종 오디오 캡션 수를 n(A s )라 했다. 장면별 두 수가 다르면 ‘분절 수 드리프트’로 코딩했다. 이는 텍스트나 경계의 동일성을 검사하는 강한 분절 비교가 아니다. 수가 같은 장면에서도 문장 경계나 타임스탬프가 바뀔 수 있으므로, 본 지표는 변화의 하한으로 해석해야 한다. [[cite:timingCore,suber]]
D count (r) = 𝟙[∃s ∈ r : n(E s ) ≠ n(A s )]
오디오 시간 불변식 I A 는 각 캡션 경계가 유한하고 종료가 시작보다 뒤이며, 단일 내레이션이라는 이 파이프라인의 운영 조건에서 시작 시각이 단조 증가하고 서로 겹치지 않을 때 참이다. WebVTT가 겹침을 허용하므로 이 비겹침 조건은 범용 자막 유효성 규칙이 아니라 본 시스템의 단일 화자 계약이다. beat coverage I B 는 범위가 0에서 시작하고 공백·중복 없이 이어지며 마지막 오디오 캡션을 닫고 모든 인덱스가 범위 안일 때 참이다. [[cite:webvtt,renderCore]]
프레임 산술 I F 는 저장된 audio_duration_frames가 ⌈audio_duration_seconds × fps⌉와 같을 때 참이다. 장면 길이 폐쇄 I D 는 스크립트 장면 길이와 오디오 장면 길이의 차이가 한 프레임 이하일 때 참이다. 마지막으로 표적 테스트를 별도로 실행해 측정 코드가 의존한 타이밍 정렬과 렌더 계약의 현재 기대값을 확인했다. 27개 중 17개가 통과했고 타이밍 정렬 5개는 모두 통과했지만, 렌더 계약 기대값 10개가 실패했다. 이 수는 코퍼스 실패율이 아니라 소스-테스트 유지보수 신호로만 사용했다. [[cite:targetedTests]]
I F (s) = 𝟙[F stored = ⌈T audio · fps⌉], I D (s) = 𝟙[|T script − T audio | ≤ 1/fps]
결과
그림 1은 단일 성공률로 압축하면 사라지는 계층 차이를 보여 준다. 프레임 수 산술은 16개 모두 통과했고 렌더 artifact는 14개에 존재했다. 그러나 오디오 시간 불변식은 12개, 최종 스크립트 beat coverage는 7개, storyboard 원본 beat coverage는 3개, 한 프레임 이내 길이 폐쇄는 6개였다. 편집·오디오 캡션 수가 모든 장면에서 안정적인 실행은 2개뿐이었다. [[cite:measurement]]
분절 수 드리프트는 14/16 실행과 102/126 장면에서 나타났다. 전체 편집 캡션 1,006개는 오디오 캡션 1,128개가 되어 순증가가 122개였지만, 실행별 방향은 일정하지 않았다. 일부 실행은 음성 단계에서 더 잘게 쪼개졌고 다른 실행은 합쳐졌다. 따라서 전체 1.121배라는 평균만으로 특정 실행의 인덱스 사상을 보정할 수 없다. beat를 편집 캡션 인덱스에 고정한 채 오디오 캡션이 재분절되면, 같은 숫자 인덱스가 다른 발화를 가리킬 수 있다. [[cite:measurement,timingCore]]
가장 강한 음의 증거는 게이트 간 불일치다. 렌더된 14개 중 12개는 분절 수 드리프트가 있었고 7개는 최종 오디오 캡션에 대한 스크립트 beat coverage가 무효였다. validator 오류가 0인 8개 중에서도 4개는 이 coverage가 무효였다. 즉 현재 validator와 렌더 파일 존재 검사는 후단의 오디오 권위 시간축에 visual beat가 완전히 재바인딩됐는지를 충분히 묻지 않는다. [[cite:measurement,renderCore]]
오디오 캡션 1,128개 중 260개가 내부 경고선 6.8초를 넘었고 최대값은 83.928초였다. 렌더된 실행 14개 중 9개가 적어도 하나의 장시간 캡션을 포함했다. 이는 시간 단위가 과도하게 합쳐졌거나 음성 manifest 구조가 예상과 다를 가능성을 나타내지만, 곧바로 인간 가독성 실패를 뜻하지는 않는다. 속도·분절 효과가 언어, 축약, 음성 이해, 문법 경계에 따라 달라진다는 연구 때문에 본 결과는 ‘검토 필요’ 신호로만 해석한다. [[cite:measurement,fastSubtitles,segmentation]]
측정된 엄격 결합 조건—캡션 수 안정, 오디오 시간 유효, 스크립트와 storyboard 두 beat coverage 유효, 프레임·길이 폐쇄, validator 오류 0, 렌더 artifact 존재—을 모두 만족한 실행은 1/16이었다. 이 교집합은 품질 점수가 아니라 최소 구조 폐쇄의 보수적 하한이다. 강제 정렬 정확도, 실제 프레임 내용, 음성-입모양, 시청자 이해는 여전히 측정하지 않았으므로 ‘1개만 좋은 영상’이라고 읽어서는 안 된다. [[cite:measurement,whisperx]]
Temporal Contract Closure
본 연구는 선행 Evidence Chain을 실행 가능한 결합 게이트로 확장해 Temporal Contract Closure (TCC)를 제안한다. 핵심은 오디오 캡션 A를 TTS 이후의 권위 타임라인으로 선언하고, 편집 단위 E를 A에 안정적 ID로 매핑하며, visual beat B가 E의 위치가 아니라 A의 ID 또는 시간 구간을 참조하게 하는 것이다. 프레임 F는 A의 media time에서 파생되고, 각 변환은 provenance P에 입력 해시·코드 버전·매개변수·출력 해시와 함께 남는다. [[cite:provdm,cwlprov,remotionMetadata]]
TCC = I map (E→A) ∧ I A ∧ I B (B→A) ∧ I D ∧ I F (A→F) ∧ I P
TCC는 각 항을 평균하는 점수가 아니라 논리곱이다. 프레임 수가 맞으면 I F 하나가 참일 뿐이며, 렌더 파일이 생기면 산출 activity가 끝났다는 뜻일 뿐이다. 어떤 필수 항이 거짓이거나 계산 불가능하면 release-ready 상태를 보류한다. 다만 파이프라인의 사용 목적에 따라 겹침 정책, 오차 허용폭, 강제 정렬 수준은 프로파일로 명시해야 한다. 예컨대 다중 화자 WebVTT에서는 겹침이 합법이므로 I A 의 비겹침 항을 그대로 적용하면 안 된다. [[cite:webvtt,ebu3380]]
구현상 가장 작은 변화는 validator의 기준 artifact를 바꾸는 것이다. 스크립트 생성 직후가 아니라 오디오 정렬과 beat 재바인딩이 끝난 뒤 최종 오디오 manifest를 입력으로 coverage, 길이, 프레임, 계보 검사를 한 번에 수행해야 한다. 이때 FFmpeg나 Remotion 단계가 fps 또는 PTS를 바꾸면 이전 TCC 서명은 폐기하고 F와 P를 다시 계산해야 한다. [[cite:remotionMetadata,ffmpegFilters]]
논의
이번 결과는 자동 영상 제작의 실패가 한 번의 큰 오류보다 ‘각 층의 국소 성공’ 사이에서 생길 수 있음을 보여 준다. 편집 단계는 올바른 문장을 갖고, TTS 단계는 유효한 오디오 구간을 만들고, 렌더 단계는 정확한 프레임 수를 만들 수 있다. 그러나 편집 인덱스가 재분절된 오디오 인덱스로 번역되지 않으면 세 성공의 합이 전체 성공이 되지 않는다. 이것이 시간 계약을 논리곱으로 다뤄야 하는 이유다.
프레임률은 특히 오해하기 쉽다. EBU-TT-D는 저작·표시 fps가 달라도 자막은 media time을 따라야 한다고 하고, Remotion과 FFmpeg는 fps·PTS 변환이 프레임 샘플을 재배치할 수 있음을 보여 준다. 그러므로 20 fps 실행과 24 fps 실행을 비교할 때 프레임 번호를 직접 동일시하면 안 된다. 먼저 밀리초 또는 선언된 media time에서 폐쇄하고, 마지막에 명시적 양자화 규칙으로 프레임에 투영해야 한다. [[cite:ebu3380,remotionMetadata,ffmpegFilters]]
또한 구조 계약과 인간 경험을 분리해야 한다. 캡션 수 드리프트나 6.8초 초과 구간은 자동 검사를 촉발하는 데 유용하지만, 시청자가 실제로 읽지 못했다는 직접 증거가 아니다. 반대로 인간이 내용을 이해했다고 해서 artifact 계보가 재현 가능하거나 beat 인덱스가 맞다는 뜻도 아니다. SubER와 시선 연구가 보여 주듯 텍스트, 분절, 타이밍, 인지 부하는 관련되지만 동일한 결과변수가 아니다. [[cite:suber,fastSubtitles,segmentation]]
운영 측면에서 TCC는 실패 원인을 더 정확히 배치한다. I F 만 실패하면 양자화·fps 코드를, I B 가 실패하면 TTS 이후 재바인딩을, I P 가 실패하면 오래된 artifact나 버전 누락을 조사한다. 이는 하나의 ‘render failed’ 상태보다 복구 가능성이 높다. CWLProv가 실행 중간산출물과 매개변수를 함께 남길 때 비결정성을 발견한 것처럼, 영상 파이프라인도 최종 MP4만 보존해서는 변환 경계의 원인을 재현하기 어렵다. [[cite:cwlprov]]
한계와 위협
첫째, 코퍼스는 한 워크스페이스에서 발견된 16개 편의표본이며 모두 일본어다. 실행 시점, 코드 버전, 주제 난이도와 길이가 완전히 균형화되지 않았으므로 fps나 특정 구현 변경의 인과효과를 추정할 수 없다. 본 결과는 해당 artifact 계보에서 어떤 불일치가 존재했는지를 기술하며 다른 영상 생성 시스템의 빈도를 추정하지 않는다.
둘째, 분절 수 드리프트는 캡션 개수 차이를 사용한다. 수가 같아도 경계·문구·시간이 달라질 수 있고, 수가 달라도 E→A의 명시적 사상이 보존되면 시스템은 올바를 수 있다. 따라서 14/16은 재분절 가능성의 구조 경고이지 오류율이 아니다. 향후에는 안정 ID 기반 정렬, 텍스트 유사도, 단어 경계 오차를 함께 측정해야 한다. 강제 정렬 성능도 언어·도메인 모델에 조건부이므로 외부 벤치마크 수치를 그대로 이 코퍼스 정확도로 옮길 수 없다. [[cite:whisperx,mfa2026]]
셋째, MP4 존재만 확인했으며 실제 프레임, 오디오 파형, 자막 렌더링, 립싱크, 시청자 이해를 평가하지 않았다. 반대로 원본 주제와 내레이션을 의도적으로 제거했기 때문에 의미적 visual grounding도 검사할 수 없다. TCC는 지각 QA 전의 구조 게이트이지 품질의 완결된 정의가 아니다.
넷째, 6.8초 경고선은 내부 구현에서 선택한 공학 임계값이다. 사람 대상 연구는 더 빠른 자막도 조건에 따라 이해될 수 있고 비통사적 분절은 이해도보다 인지 부하에 먼저 나타날 수 있음을 보여 준다. 따라서 장시간 캡션 260개를 자동 실패로 코딩하지 않았다. [[cite:fastSubtitles,segmentation]]
다섯째, 표적 테스트 10개 실패에는 현 코드와 오래된 기대값 사이의 드리프트가 포함될 수 있다. 전체 테스트 실행은 누락된 패키지 경로·의존성 실패가 섞여 있어 본문 비율에서 제외했다. 논문은 코드를 고치지 않았고, 테스트 결과를 산출물 품질의 직접 측정으로 사용하지 않았다. [[cite:targetedTests]]
마지막으로 provenance P는 개념적으로 제안했지만 기존 실행에 완전한 입력 해시·도구 버전·변환 매개변수 묶음이 없어서 사후에 모두 복원하지 못했다. 따라서 1/16 엄격 결합 통과도 완전한 TCC 통과가 아니라 측정 가능한 여덟 조건의 교집합이다. 이후 실행부터 PROV 호환 bundle을 생성해야 I P 를 실제 게이트로 평가할 수 있다. [[cite:provdm,cwlprov]]
실행별 익명화 결과
표 6은 집계의 재계산을 가능하게 하는 최소 실행별 원장이다. ‘분절 수 변화’는 하나 이상의 장면에서 편집·오디오 캡션 수가 다름을 뜻한다. 길이 폐쇄는 모든 장면에서 스크립트와 오디오 길이 차이가 한 프레임 이하일 때만 ‘예’다. 실행 주제와 서사 내용은 포함하지 않았다. [[cite:measurement]]
결론
16개 자동 영상 실행의 실증 감사에서는 프레임 수 산술이 16개 모두 닫혔지만, 최종 오디오 캡션을 덮는 스크립트 beat 범위는 7개에서만 유효했다. 렌더 파일이 있는 14개 중 절반도 이 coverage 조건을 통과하지 못했다. 이 결과는 생성 성공, 산술 성공, 시간 계약 성공을 구분해야 함을 보여 준다.
Temporal Contract Closure는 편집 의미 E, 오디오 media time A, 시각 beat B, 렌더 프레임 F, 변환 계보 P를 한 권위 사슬로 묶는다. 가장 중요한 구현 원칙은 TTS 이후의 A를 권위 시간축으로 삼고, B와 F를 그 뒤에 재생성하며, 모든 변환의 입력·버전·매개변수를 P에 기록하는 것이다. 한 항이 실패하면 평균 점수로 상쇄하지 않고 공개 준비 주장을 보류한다.
이 개정판의 신규성은 더 많은 규칙을 제안하는 데 있지 않다. 선행 개념 논문이 남긴 ‘완료 실행과 프레임 QA 부재’라는 경계를 실제 16개 실행의 교차 artifact 측정으로 넘고, 파일 존재와 프레임 산술이 놓치는 구체적 반례를 수량화한 데 있다. 다음 검증은 안정 ID와 provenance bundle을 새 실행에 심고, 구조 TCC를 통과한 샘플에 대해 실제 프레임·오디오·시청자 QA를 수행하는 것이다. [[cite:priorPaper,measurement,provdm]]