[개발 일지] 영상 자막 제거 구조를 다시 짠 이유: 5분 작업을 5.6초로 줄인 클린 프레임 복원

영상 자막 제거 5분 작업을 5.6초로 줄인 클린 프레임 복원

한 줄 요약: 3초짜리 1080×1920 영상도 5분 넘게 걸리던 자막 제거 처리를 전체 프레임 방식에서 ROI·JPEG·클린 프레임 복원 구조로 바꾸자 90프레임 기준 약 5.6초까지 줄었습니다.

실제 개발 기록 기반 기술 해설 · 영상 내용과 하드웨어에 따라 처리시간은 달라질 수 있습니다.

왜 처음 방식은 느렸나

초기 구현은 모든 프레임을 PNG로 저장하고 전체 화면에 옵티컬플로를 계산했습니다. 무손실 프레임의 디스크 입출력과 전체 해상도 연산이 겹치면서 실제로 바꿔야 하는 자막 영역보다 훨씬 많은 데이터를 처리했습니다. 3초 세로 영상도 5분 이상 걸려 실제 사용이 어려웠습니다.

프로젝트명이 익명화된 실제 자막 영상편집 화면
실제 개발 화면입니다. 앱명은 블러 처리했으며 기능 화면은 그대로 유지했습니다.

ROI와 클린 프레임을 사용한 이유

ROI는 화면 전체가 아니라 자막이 있는 관심 영역만 처리하는 방식입니다. 프레임 저장 형식도 중간 계산에 필요한 품질을 유지하면서 JPEG로 바꿔 입출력 부담을 줄였습니다. 가장 큰 변화는 자막이 없는 가까운 프레임을 찾아 깨끗한 픽셀을 가져오는 클린 프레임 복원이었습니다.

자막 뒤 배경이 다른 시점에도 존재한다면 주변 픽셀을 추측해 칠하는 것보다 실제 배경을 가져오는 편이 자연스럽습니다. 움직임이 큰 장면이나 배경이 계속 가려진 장면에서는 잘못된 복원이 생길 수 있으므로 안전 게이트를 두고 신뢰도가 낮으면 자동 적용하지 않도록 했습니다.

클린 프레임 복원 전후 구조 인포그래픽
전체 프레임 처리와 ROI·클린 프레임 방식의 차이를 실제 측정값과 함께 정리했습니다.

왜 Telea와 Navier-Stokes를 채택하지 않았나

두 인페인팅 방식은 글자 자체를 흐리거나 줄이는 데는 효과가 있었습니다. 그러나 제품 윤곽과 손처럼 경계가 중요한 영역까지 함께 뭉개지는 결과가 나왔습니다. “자막이 덜 보인다”는 기준만 통과하고 원본 내용이 손상되면 실제 편집 기능으로 사용할 수 없습니다.

현재 구조의 한계

  • 자막이 화면을 오래 가려 깨끗한 배경 프레임이 없으면 복원이 어렵습니다.
  • 카메라 이동과 피사체 움직임이 크면 프레임 정렬 오차가 생길 수 있습니다.
  • 약 5.6초는 90프레임 테스트의 한 결과이며 모든 영상의 보장값이 아닙니다.

그래서 이 기능은 “항상 지우는 자동화”보다 성공 가능성을 판단하고 조건이 맞을 때만 적용하는 보조 도구로 설계하는 편이 안전합니다.

공식 문서로 보는 인페인팅과 JPEG의 성격

이 글의 구조 변경은 두 가지 기술 선택에 기대고 있습니다. 하나는 인페인팅 방식(Telea, Navier-Stokes)을 쓰지 않은 것이고, 다른 하나는 중간 프레임을 PNG에서 JPEG로 바꾼 것입니다. 각각 OpenCV 프로젝트 문서와 MDN 문서(2026년 10월 18일 기준)에 적힌 내용을 옮겨 둡니다.

OpenCV 인페인팅 문서가 설명하는 것

OpenCV의 인페인팅 튜토리얼은 오래된 사진의 작은 얼룩이나 획 같은 손상을 이웃 픽셀로 채워 주변과 어울리게 하는 기법으로 소개합니다. 마스크는 입력 이미지와 같은 크기이고, 0이 아닌 픽셀이 채울 영역입니다. Telea 방식(cv.INPAINT_TELEA)은 2004년 논문에 기반한 Fast Marching Method로, 영역의 가장자리에서 안쪽으로 들어가며 주변의 알려진 픽셀의 가중 평균으로 채웁니다. Navier-Stokes 방식(cv.INPAINT_NS)은 2001년 Bertalmio, Bertozzi, Sapiro의 논문에 기반하며 유체역학과 편미분방정식을 이용해 가장자리를 알 수 없는 영역으로 이어 간 뒤 색을 채웁니다.

두 방식 모두 “주변 픽셀로 추정해서 채운다”는 원리입니다. 이 글에서 제품 윤곽과 손처럼 경계가 중요한 영역이 뭉개진 이유를 이해하는 단서가 되지만, 문서가 그런 결과를 직접 언급하는 것은 아닙니다. 그 부분은 이 글의 시험 결과이며, 문서는 어디까지나 방식의 원리를 설명합니다. 반대로 클린 프레임 복원은 다른 시점에 실제로 존재하는 배경 픽셀을 가져오는 방식이라 추정에 덜 의존합니다.

MDN이 설명하는 JPEG와 PNG

MDN의 이미지 형식 안내에 따르면 JPEG는 손실 압축이며 이산 코사인 변환에 기반하고 사진에 특히 유용합니다. PNG는 무손실 압축이어서 스크린샷, 도표, 로고처럼 정확한 재현이 필요한 경우에 권장됩니다. 같은 문서는 선명함이 필요한 도표나 차트에 손실 압축을 적용하면 만족스럽지 않은 결과가 나올 수 있다고도 경고합니다. 또 JPEG에는 알파 채널(투명도)이 없습니다.

자막 제거에 쓰는 영상 프레임은 대부분 사진과 같은 자연 이미지라 JPEG가 맞는 선택일 수 있습니다. 다만 압축으로 세부가 달라질 수 있다는 점은 감수해야 하므로, 이 글에서도 속도 개선 수치(90프레임 기준 약 5.6초)를 모든 영상의 보장값으로 쓰지 않습니다.

선택공식 문서에 적힌 성격이 글에서의 의미
Telea가장자리에서 안쪽으로, 주변 픽셀 가중 평균추정으로 채우므로 경계가 중요한 영역에는 부담
Navier-Stokes가장자리를 이어 가며 색을 채움마찬가지로 추정 기반
JPEG 프레임손실 압축, 사진에 유용입출력 부담을 줄이는 대신 세부 손실 가능
PNG 프레임무손실 압축초기 방식에서 쓴 저장 형식

확인 자료

기준일: 2026-10-18