Appearance
개요
Transcoder는 S3에 업로드된 원본 비디오를 여러 해상도 프리셋으로 변환하고, 최종 결과물을 HLS 스트림으로 배포하는 내부 처리 파이프라인이에요.
작업 생성 Lambda는 DynamoDB에 작업을 저장하고 Step Functions 실행을 시작해요.
Probe, 청크 변환, Finalize 단계가 순서대로 실행되고, 작업이 끝나면 요청에서 지정한 SQS queue로 결과 메시지를 보내요.
최종 출력 위치에는 master.m3u8, variant playlist, .ts segment가 생성돼요.
구성 요소
| 구성 요소 | 역할 |
|---|---|
| Lambda | 작업 생성, 작업 취소, HTTP 작업 조회를 처리해요. |
| Step Functions | Probe, Transcode, Finalize 단계를 오케스트레이션해요. |
| DynamoDB | 작업 상태, 실행 계획, 결과 정보를 저장해요. |
| S3 | 원본 파일, 내부 청크 산출물, 최종 HLS 결과물을 저장해요. |
| SQS | 성공 또는 실패 결과 메시지를 전달해요. |
| ffmpeg/ffprobe | 원본 분석, 청크 변환, HLS 패키징을 수행해요. |
인코딩 프리셋
MaxEncodingPreset은 생성할 최대 출력 프리셋이에요.
요청한 프리셋 이하의 출력만 생성되고, 원본보다 큰 출력이나 같은 해상도와 FPS로 중복되는 variant는 생성되지 않아요.
| 값 | 기준 해상도 | 픽셀 수 | CRF |
|---|---|---|---|
UHD | 3840x2160 | 8,294,400 | 26 |
QHD | 2560x1440 | 3,686,400 | 24 |
FHD | 1920x1080 | 2,073,600 | 23 |
HD | 1280x720 | 921,600 | 20 |
SD | 854x480 | 409,920 | 20 |
입력 제한
Probe 단계에서 원본 비디오를 분석한 뒤 입력 제한을 검증해요.
| 제한 | 값 |
|---|---|
| 최대 길이 | 14,400초 |
| 최대 해상도 | 3840x2160 |
| 최소 해상도 변 | 360px |
| 최대 프레임레이트 | 120fps |
| 출력 최대 프레임레이트 | 60fps |
| 허용 화면비 | 0.25 이상 4 이하 |
출력 구조
작업이 성공하면 요청의 Output.Bucket과 Output.Prefix 아래에 HLS 파일이 업로드돼요.
text
{Output.Prefix}/master.m3u8
{Output.Prefix}/{Preset}.m3u8
{Output.Prefix}/{Preset}/seg_00000.ts
{Output.Prefix}/{Preset}/seg_00001.ts