홈 › 4장 FFmpeg 실전 변환

4.3 프록시, 썸네일, 스프라이트, 타임코드 번인

MAM 화면에 필요한 프록시 영상, 구간별 썸네일, 포스터 이미지, 스프라이트 시트, 타임코드 번인 영상을 FFmpeg로 만드는 방법과 주의점을 설명합니다.

최종 수정 2026-10-28 · 읽는 시간 약 5분 · 운영 프리즘(Prism) · 편집 원칙

#MAM 화면에 필요한 파생물

원본 하나에서 여러 파생물(derivatives) 을 만들어 두면 검색과 미리보기 화면이 빨라집니다.

파생물 용도 형식
프록시 브라우저에서 재생·구간 지정 MP4 H.264 + AAC (2장 참고)
포스터 검색 결과 목록의 대표 이미지 JPEG 1장
썸네일 타임라인 위의 장면 미리보기 JPEG 다수
스프라이트 시트 재생 막대에 마우스를 올릴 때 보이는 미리보기 JPEG 1장(여러 컷 타일링)
번인 프록시 타임코드를 화면에 입힌 검수용 영상 MP4

#포스터(대표 이미지)

ffmpeg -ss 6 -i qc.mp4 -frames:v 1 -vf scale=640:-2 -q:v 2 poster.jpg
  • -frames:v 1: 한 프레임만 출력합니다.
  • -q:v 2: JPEG 품질(1~31, 낮을수록 고화질).
  • scale=640:-2: 가로 640, 세로는 비율에 맞추되 짝수로 만듭니다.

#일정 간격 썸네일

# 2초에 1장, 가로 320
ffmpeg -i qc.mp4 -vf "fps=1/2,scale=320:-2" -q:v 3 th/t_%03d.jpg

8초짜리 영상에서 fps=1/2로 4장이 만들어졌습니다. 파일명 패턴 %03d가 번호를 붙입니다.

#직접 확인: 시간 표시를 넣은 컨택트 시트

썸네일에 시간을 같이 새기면 검수자가 한 장만 보고도 구간을 짚을 수 있습니다. 30초 영상에서 2초마다 1컷을 뽑아 5×3으로 묶었습니다.

ffmpeg -i input.mp4 -vf "scale=256:-1,drawtext=fontfile=arial.ttf:text='%{pts\:hms}':x=6:y=h-26:fontsize=20:fontcolor=white:box=1:[email protected],select='isnan(prev_selected_t)+gte(t-prev_selected_t,2)',tile=5x3:padding=4:margin=4:color=0x202020" -fps_mode passthrough -frames:v 1 -q:v 4 sheet.jpg

select는 프레임의 시각(PTS)을 바꾸지 않으므로 drawtext를 select의 앞에 두든 뒤에 두든 결과 이미지가 같았습니다(두 순서로 만든 시트의 파일 해시가 동일). 글자에 찍히는 시간은 원본의 재생 시간입니다. 반면 fps=1/2를 앞에 쓰면 글자는 fps가 다시 매긴 0, 2, 4초로 찍히지만 실제 프레임은 위의 경고처럼 약 1초 뒤의 장면입니다.

2초 간격으로 뽑은 15컷에 시간이 새겨진 5x3 컨택트 시트
2초 간격 15컷의 컨택트 시트(합성 프랙탈 영상). 각 컷 왼쪽 아래에 원본 영상의 재생 시간이 표시됩니다.

fontfile은 실행 환경의 글꼴 경로로 바꿔야 합니다. 윈도우에서는 경로의 :를 이스케이프하고 따옴표로 감싸거나(fontfile='C\:/Windows/Fonts/arial.ttf', 아래 타임코드 번인 예), 작업 폴더에 글꼴 파일을 복사해 상대 경로로 지정하면 됩니다.

#스프라이트 시트

여러 썸네일을 한 장에 타일로 묶으면 요청 수가 줄어 재생 막대 미리보기가 빨라집니다.

ffmpeg -i qc.mp4 -vf "fps=1,scale=160:-2,tile=4x2" -frames:v 1 -q:v 3 sprite.jpg

8초 영상에서 fps=1로 8컷을 만들어 4×2 타일로 묶었고(앞의 경고처럼 컷의 실제 시각은 번호 기준 시각에서 약 0.5초 어긋납니다. 미리보기용으로는 충분합니다), 결과 이미지 크기는 640×180(160×90 컷 8개)이었습니다. 웹 플레이어는 이 이미지를 background-position으로 잘라 보여 줍니다. 긴 영상은 한 장이 너무 커지므로 50~100컷 단위로 나눠 여러 장을 만듭니다.

#타임코드 번인

검수용으로 타임코드를 화면에 새긴 영상을 만들 수 있습니다.

ffmpeg -i input.mxf -t 1 -vf "scale=640:-2,drawtext=fontfile='C\:/Windows/Fonts/arial.ttf':timecode='01\:00\:00\:00':rate=30000/1001:fontcolor=white:fontsize=28:box=1:[email protected]:x=10:y=10" \
  -c:v libx264 -pix_fmt yuv420p -an tcburn.mp4

0.5초 지점의 프레임을 추출해 확인했더니 화면에 01:00:00:15가 표시되었습니다(29.97fps에서 0.5초는 15프레임째로 맞습니다).

주의할 점이 세 가지 있습니다.

  1. fontfile을 명시하세요. Windows에서 지정하지 않으면 Fontconfig error: Cannot load default config file이라는 오류가 출력됩니다(이번 테스트에서는 대체 글꼴로 만들어졌지만 환경에 따라 실패할 수 있습니다). 경로의 :는 \:로 이스케이프해야 합니다.
  2. rate를 정확히 지정하세요. 분수(30000/1001)를 그대로 넣어야 합니다.
  3. 드롭 프레임은 별도 처리가 필요합니다. 위 예의 timecode는 :(NDF)만 사용하고, 드롭 프레임 소스는 ; 구분자를 사용해 01\:00\:00\;00처럼 지정해야 합니다. 소재의 DF 여부를 분석 결과에서 읽어 맞춰야 합니다.

#프록시 생성 파이프라인에 통합하기

한 번의 디코딩으로 여러 출력을 만들면 효율적입니다. FFmpeg는 하나의 입력에서 여러 출력을 지원합니다.

ffmpeg -i input.mxf \
  -map 0:v:0 -map 0:a:0 -vf "yadif,scale=-2:360" -c:v libx264 -crf 28 -g 30 -c:a aac -b:a 96k -movflags +faststart proxy.mp4 \
  -map 0:v:0 -vf "fps=1/10,scale=320:-2" -q:v 3 th/t_%04d.jpg

원본을 한 번만 읽고 디코딩한 뒤, 프록시 MP4와 10초 간격 썸네일을 동시에 만듭니다. 대용량 소재에서는 이 방식이 파일을 따로 두 번 읽는 것보다 훨씬 효율적입니다.

#정리

  • 포스터, 썸네일, 스프라이트, 번인 영상은 모두 FFmpeg 필터(scale, fps, tile, drawtext)로 만들 수 있습니다.
  • 썸네일의 시각은 fps 필터로 뽑으면 번호로 계산할 수 없습니다. select로 뽑고 실제 PTS를 기록하세요. 스프라이트는 요청 수를 줄이는 용도입니다.
  • 타임코드 번인은 폰트 경로, 정확한 프레임레이트, 드롭 프레임 구분자를 신경 써야 합니다.

#참고 자료

링크는 2026-10-28에 열람이 되는 것을 확인했습니다. 규격과 도구 문서는 개정될 수 있으므로 적용하기 전에 최신 판을 확인하세요.