7.3 사례 3 - 인터레이스 여부를 잘못 판단했을 때
플래그와 실제 내용이 다른 경우를 idet 필터로 구별하는 방법, 디인터레이스 오적용과 누락의 증상, 자동 판정 규칙과 예외 처리를 재현 실험으로 설명합니다.
#증상
- 변환한 영상에서 움직이는 물체의 가장자리에 빗살 무늬가 보인다(디인터레이스 누락).
- 반대로 정지 화면이나 자막이 흐릿하고 해상도가 떨어져 보인다(프로그레시브에 디인터레이스를 적용).
- 어떤 소재는 괜찮고 어떤 소재만 문제가 생긴다.
#원인: 메타데이터(플래그)와 실제 내용이 다를 수 있다
인터레이스 여부는 두 곳에서 알 수 있습니다.
| 정보 | 출처 | 의미 |
|---|---|---|
| 플래그 | 컨테이너/스트림 헤더(MediaInfo Scan type, FFprobe field_order) |
파일이 "그렇다고 선언한 것" |
| 실제 내용 | 프레임의 화소 분석 | 영상이 실제로 그런가 |
둘이 다른 경우가 있습니다. 예를 들어 프로그레시브로 제작한 영상을 방송 장비 규격에 맞추려고 인터레이스 플래그를 붙여서 인코딩하거나, 반대로 인터레이스 영상에 프로그레시브 플래그가 붙어 있는 경우입니다. 플래그만 믿고 변환하면 위 증상이 나옵니다.
#재현: idet 필터로 실제 내용 판별
FFmpeg의 idet 필터는 프레임을 분석해서 TFF(상단 필드 우선), BFF(하단 필드 우선), Progressive로 분류해 통계를 보여 줍니다.
ffmpeg -hide_banner -nostats -i input.mp4 -vf idet -f null - 2>&1 | grep "Multi frame detection"
세 종류의 파일을 분석했습니다.
| 파일 | 플래그 | idet 결과(Multi frame detection) |
|---|---|---|
진짜 인터레이스(60fps 프로그레시브를 interlace 필터로 인터레이스화) |
인터레이스 | TFF: 90, BFF: 0, Progressive: 0 |
| 일반 H.264 프록시 | 프로그레시브 | Progressive: 150 |
| 테스트 MXF(인터레이스 플래그를 붙인 프로그레시브 내용) | 인터레이스(tt) |
Progressive: 150 |
세 번째가 핵심입니다. 플래그는 인터레이스인데, 내용은 프로그레시브입니다. 이 파일에 yadif를 적용하면 멀쩡한 프레임을 불필요하게 뭉개게 됩니다. 반대 경우(진짜 인터레이스인데 프로그레시브 플래그)에는 디인터레이스를 건너뛰어 빗살 무늬가 남습니다.
(idet는 출력에 같은 항목이 두 번 나옵니다. 첫 번째는 필터 초기화용으로 0이고, 마지막 블록이 실제 결과입니다.)
#자동 판정 규칙
분석 단계에서 플래그와 idet 결과를 모두 보고 정책을 정합니다.
| 플래그 | idet 우세 결과 | 판정 | 처리 |
|---|---|---|---|
| 인터레이스 | TFF/BFF | 정상 | 디인터레이스(필드 순서 지정) |
| 인터레이스 | Progressive | 오표기 | 디인터레이스 건너뜀, 로그에 기록 |
| 프로그레시브 | Progressive | 정상 | 그대로 |
| 프로그레시브 | TFF/BFF | 오표기 | 디인터레이스 적용, 로그에 기록 |
| 어느 쪽이든 | Undetermined가 많음 | 판정 불가 | 샘플을 사람이 확인 |
# 분석: 3초 샘플로 빠르게 (전체를 돌릴 필요 없음)
ffmpeg -hide_banner -nostats -ss 30 -t 3 -i input.mxf -vf idet -f null - 2>&1 | grep "Multi frame detection"
- 샘플링: 전체를 분석하면 오래 걸리므로 앞·중간·뒤 구간에서 몇 초씩만 분석합니다. 단, 편집으로 이어 붙인 소재는 구간마다 다를 수 있습니다(인터레이스와 프로그레시브가 섞임). 혼합이 의심되면 샘플을 늘립니다.
- 임계값: 한 가지 결과가 압도적(예: 95% 이상)일 때만 확정하고, 아니면 사람이 확인합니다.
- 필드 순서(TFF/BFF)도
idet결과를 참고해yadif의parity옵션을 지정하거나 자동 감지(-1)를 씁니다. 필드 순서를 틀리면 움직임이 앞뒤로 떨리는 증상이 나옵니다.
#증상으로 거꾸로 찾기
| 증상 | 의심 | 확인 |
|---|---|---|
| 가장자리에 빗살 무늬 | 인터레이스인데 디인터레이스 안 함 | idet에서 TFF/BFF가 우세한가 |
| 정지 화면이 흐리고 윤곽이 번짐 | 프로그레시브인데 디인터레이스 적용 | idet에서 Progressive가 우세한가 |
| 움직임이 앞뒤로 떨림(저더) | 필드 순서 오류 | TFF/BFF 구분과 yadif parity |
| 프레임레이트가 두 배로 늘어남 | yadif=1(send_field) 사용 |
필터 모드(5장 4편) |
| 일부 구간만 문제 | 인터레이스/프로그레시브 혼합 소재 | 구간별 idet |
#재발 방지
- 인제스트 분석에서 플래그와
idet결과를 모두 저장한다(정규화 레코드에scan_flag,scan_detected). - 불일치 건은 자동 처리하지 말고 경고를 남긴다. 반복적으로 불일치하는 입수처가 있다면 그곳의 설정 문제일 수 있다.
- 변환 프로파일에서 디인터레이스를 무조건 적용하지 않고 분석 결과에 따라 적용한다.
#정리
- 플래그는 "선언"이고 실제 내용은 다를 수 있으므로,
idet로 내용을 확인합니다. - 플래그와 내용이 다르면 오표기로 판정해 로그에 남기고, 판정 불가는 사람이 확인합니다.
- 디인터레이스는 소스 분석 결과에 따라 적용하고, 필드 순서와 모드도 함께 검증합니다.
#참고 자료
링크는 2026-10-28에 열람이 되는 것을 확인했습니다. 규격과 도구 문서는 개정될 수 있으므로 적용하기 전에 최신 판을 확인하세요.