4.3 프록시, 썸네일, 스프라이트, 타임코드 번인
MAM 화면에 필요한 프록시 영상, 구간별 썸네일, 포스터 이미지, 스프라이트 시트, 타임코드 번인 영상을 FFmpeg로 만드는 방법과 주의점을 설명합니다.
#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초 뒤의 장면입니다.

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프레임째로 맞습니다).
주의할 점이 세 가지 있습니다.
fontfile을 명시하세요. Windows에서 지정하지 않으면Fontconfig error: Cannot load default config file이라는 오류가 출력됩니다(이번 테스트에서는 대체 글꼴로 만들어졌지만 환경에 따라 실패할 수 있습니다). 경로의:는\:로 이스케이프해야 합니다.rate를 정확히 지정하세요. 분수(30000/1001)를 그대로 넣어야 합니다.- 드롭 프레임은 별도 처리가 필요합니다. 위 예의
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에 열람이 되는 것을 확인했습니다. 규격과 도구 문서는 개정될 수 있으므로 적용하기 전에 최신 판을 확인하세요.