먼저 세 줄로
- 사진에서 잘 듣던 센서 흔적이 영상 원본에서 0/5로 나왔습니다. 측정이 틀린 것이 아니라 흔적이 실제로 지워집니다.
- 색을 절반만 저장하고 프레임 사이를 압축하기 때문입니다. 화소 단위의 미세한 잔차가 그 과정에서 남지 않습니다.
- 오탐한 기준 하나는 지웠습니다. 판별력이 없는 값을 있는 것처럼 쓰면 결과가 그만큼 흐려집니다.
영상은 사진이 여러 장 이어진 것입니다. 그러니 사진에 쓰던 자를 그대로 대면 될 것 같습니다. 프레임을 떼어내 재면 되지 않겠습니까.
절반은 맞습니다. 프레임을 떼어내 비네팅과 색수차를 재는 것은 잘 됩니다. 그런데 사진에서 가장 잘 듣던 측정 하나가 영상에서는 전혀 듣지 않습니다. 재보고 알았습니다.
사진에서는 잘 듣는 측정
디지털 카메라의 센서는 색을 보지 못합니다. 밝기만 잽니다. 그래서 화소마다 색 필터를 얹습니다. 가장 흔한 배열이 베이어 배열입니다 — 2×2 칸에 초록 둘, 빨강 하나, 파랑 하나를 놓습니다. 초록이 두 개인 이유는 사람 눈이 초록에서 밝기를 가장 잘 보기 때문입니다.
결과적으로 각 화소는 자기 자리의 한 가지 색만 압니다. 나머지 두 색은 옆 화소에서 빌려 와 추정합니다. 이 추정을 디모자이킹이라 부르고, 아무리 잘해도 완전할 수 없습니다. 2×2 격자에서 어떤 색을 실제로 측정했고 어떤 색을 추정했는지에 따라 오차의 성질이 조금씩 달라지기 때문입니다.
그래서 실제 카메라 사진에서는 2×2 주기의 미세한 잔차가 남습니다. 화소 위치를 (0,0), (0,1), (1,0), (1,1)로 나눠 각 위상의 고주파 잔차를 따로 재면, 위상에 따라 값이 다릅니다. 센서를 거치지 않고 만들어진 그림에는 이런 위상 차이가 있을 이유가 없습니다. 그림은 처음부터 화소마다 세 색을 다 갖고 태어나기 때문입니다.
이 측정은 사진에서 잘 듣습니다. 실측에서 카메라 원본과 생성 이미지가 뚜렷하게 갈렸습니다.
영상에서는 0/5였습니다
같은 측정을 아이폰으로 찍은 영상에 댔습니다. 프레임 다섯 장을 떼어 각각 재고, 검출된 프레임을 셌습니다.
0/5였습니다. 아이폰 원본인데 센서 흔적이 한 프레임에서도 나오지 않았습니다. 측정 코드가 틀린 것이 아닙니다. 같은 코드가 사진에서는 잘 듣습니다.
이유는 두 가지입니다.
1. 색을 절반만 저장합니다
영상은 사진보다 데이터가 수백 배 많습니다. 그대로 저장할 수 없으니 사람이 덜 알아채는 것부터 버립니다. 가장 먼저 버리는 것이 색의 해상도입니다.
사람 눈은 밝기의 경계에는 예민하지만 색의 경계에는 둔합니다. 그래서 밝기(휘도)는 화소마다 저장하고, 색(색차)은 가로세로 절반으로 줄여 저장합니다. 이것을 4:2:0 크로마 서브샘플링이라 부릅니다. 화소 네 개가 색 하나를 나눠 갖습니다.
베이어 잔차는 2×2 격자의 색 오차입니다. 그 색을 2×2로 묶어 하나로 평균해 버리면, 잔차도 함께 평균돼 사라집니다. 지우려고 지운 것이 아니라, 색 해상도를 줄이는 과정이 정확히 그 크기의 신호를 지웁니다.
2. 대부분의 프레임은 차이만 저장합니다
영상 압축은 프레임을 통째로 저장하지 않습니다. 한 장을 온전히 저장한 뒤(키프레임), 다음 프레임들은 "직전 프레임에서 이 블록이 이만큼 움직였고 그 차이는 이렇다"만 적습니다.
이 방식은 화면을 블록으로 잘라 옮겨 붙입니다. 옮겨 붙인 블록은 원래 화소 격자와 위상이 어긋나 있고, 거기에 차이를 더하면 2×2 위상 정보는 뒤섞입니다. 프레임을 떼어 볼 때 우리가 보는 것은 센서가 만든 격자가 아니라 압축기가 재구성한 격자입니다.
그래서 이 측정은 영상에서 버렸습니다. 사진에서 되니 영상에서도 될 것이라는 가정이 틀렸습니다.
모아레는 더 나빴습니다
화면을 다시 찍은 사진을 잡으려고 만든 측정이 있습니다. 모니터의 화소 격자와 센서의 화소 격자가 겹치면 간섭 무늬가 생기고, 주파수 영역에서 규칙적인 봉우리로 나타납니다.
같은 검출기를 영상에 댔더니 아이폰 원본에서 5/5로 잡혔습니다. 전부 오탐입니다. 영상의 색 격자(4:2:0)와 압축 블록(8×8, 16×16)이 규칙적인 주기 신호라, 검출기가 그것을 모니터 격자로 봤습니다.
더 나쁜 점은 방향이 일정하지 않다는 것입니다. 메신저를 거친 실제 영상에서는 0/5로 한 번도 잡히지 않았습니다. 같은 실제 영상인데 하나는 5/5, 하나는 0/5입니다. 임계값을 옮겨서 해결될 문제가 아니라, 검출기가 보고 있는 것이 애초에 다른 신호였습니다.
다시 맞추려면 영상용 표본이 여럿 필요합니다. 지금은 없으므로 지웠습니다. 오탐하는 기준을 남겨 두면 결과 화면에 근거가 한 줄 늘어나는 것처럼 보이지만, 그 줄은 거짓입니다.
그래서 영상에서는 무엇이 남는가
세 가지가 남았습니다. 전부 실제 파일로 재서 갈리는 것을 확인한 것들입니다.
컨테이너 기록. 촬영기는 파일에 자기 흔적을 적습니다. 아이폰 MOV 네 개에서 다섯 건씩 나왔습니다 — 기기 이름, 촬영 위치, 노출과 자이로를 기록한 메타 트랙, 카메라 식별자, 시간대가 붙은 촬영 시각. 같은 영상이 메신저를 거치자 다섯 건 모두 사라지고 변환 도구 이름만 남았습니다.
프레임의 광학 흔적. 비네팅과 색수차는 프레임에서도 살아 있습니다. 색차를 줄이고 블록으로 옮겨 붙여도, 화면 전체에 걸친 밝기 기울기와 경계선의 색 어긋남은 그렇게 쉽게 지워지지 않습니다. 아이폰 영상에서 비네팅 4/5, 색수차 1/5이 나왔고, 편집으로 만들어진 영상에서는 다섯 프레임 모두 광학 흔적이 전무했습니다.
압축 이력. 변환 도구 이름과 어긋난 채 겹친 압축 격자입니다. 화면 녹화 파일에서는 메타데이터가 하나도 없었지만 겹친 격자가 두 프레임에서 나왔습니다.
남는 문제
컨테이너 기록이 가장 잘 갈리는데, 그것은 가장 쉽게 지워지는 값이기도 합니다. 메신저 한 번이면 끝입니다. 그래서 영상 검증은 사진보다 구조적으로 약합니다. 화소에 남는 증거가 사진보다 적기 때문입니다.
이 약함을 숫자로 가리지 않으려고, 기기 기록이 없는 영상에는 등급을 발급하지 않습니다. 메신저를 거친 실제 영상이 떨어진다는 뜻이고, 그런 파일이야말로 사람 심사가 필요한 경우입니다.
간단 검사는 대표 프레임 다섯 장을 측정합니다. 영상 전체를 재지 않으며, 측정한 범위는 결과에 표시합니다.