최신 업데이트:2025-05-26 18:21:23
비디오 트랜스코딩 기능은 오브젝트 스토리지에 저장된 영상 파일을 원본 포맷에서 다양한 대상 포맷으로 변환합니다. 이 서비스는 비디오 비트레이트, 해상도, 인코딩 방식 등을 유연하게 조정할 수 있도록 지원합니다. 이를 통해 다양한 기기에서 동영상 콘텐츠가 정상적으로 재생되어 모든 사용자가 최적화된 시청 경험을 누릴 수 있습니다.
CDNetworks 영상 트랜스코딩 서비스는 다음과 같은 파일 형식과 인코딩 표준을 지원합니다:
| 카테고리 | 지원 항목 |
|---|---|
| 비디오 포맷 | MP4, FLV, HLS (m3u8), DASH (mpd), TS, MKV, MOV, WMV, AVI, VP8, VP9, RealVideo, Windows Media Video |
| 오디오 포맷 | AAC, AC-3, MP1, MP2, MP3, PCM, RealAudio, Windows Media Audio (WMA), OGG |
| 인코딩 포맷 | H.266 (VVC), H.265 (HEVC), H.264 (AVC), H.263, MPEG |
다음과 같은 시나리오에서 live streaming transcoding을 사용할 수 있습니다:
비디오 트랜스코딩 작업은 요청 시 fops(파일 작업) 파라미터를 설정하여 정의합니다. fops 파라미터는 일련의 명령어와 하위 파라미터로 구성되며, 슬래시(/)로 연결되어 구분됩니다.
일반적인 구조는 다음과 같습니다:
<op>/<Format_value>[/param1/<value1>/param2/<value2>...]|saveas/<Urlsafe_Base64_Encoded_Save_Path>
예를 들어, 일반적으로 사용되는 일부 파라미터를 포함한 좀 더 자세한 구조는 다음과 같습니다:
<op>/<Format>
/r/<value>
/ab/<value>
/vb/<value>
/vcodec/<value>
/acodec/<value>
/s/<value>
/autoscale/<value>
/autofill/<value>
/GOPInterval/<value>
/rotate/<value>
/an/<value>
/vn/<value>
/moovToFront/<value>
/sar/<value>
/preset/<value>
|saveas/<Urlsafe_Base64_Encode(bucket:savedfilename)>
주요 사항:
op: 작업 유형입니다. 비디오 live streaming transcoding의 경우, 이 값은 avthumb로 고정되어 있습니다.Format: 출력 비디오의 대상 포맷(예: mp4, flv)을 나타냅니다.|saveas/...: 필수 항목입니다. 변환된 파일의 저장 위치(버킷)와 파일명을 URL-안전 Base64 인코딩을 통해 지정합니다.아래 표는 비디오 live streaming transcoding에서 지원하는 매개변수 및 그 설명을 나열합니다:
| Parameter | Required | Description |
|---|---|---|
op |
Yes | 작업 유형입니다. 비디오 트랜스코딩 작업의 경우 avthumb로 설정하십시오. |
format |
Yes | 출력 대상 포맷을 지정합니다. 지원하는 포맷: mp4, flv, m3u8 (HLS), mpd (DASH) 등. |
r |
No | 비디오 프레임 레이트(fps)입니다. 일반 값: 24, 25, 30.참고: 동적 프레임 레이트 캡처는 지원하지 않습니다. |
ab |
No | 오디오 비트레이트, 단위는 비트/초 (bit/s)입니다. 일반적인 값: 64k, 128k, 192k, 256k, 320k (예: 128k는 128 kbps). |
vb |
No | 비디오 비트레이트, 단위는 비트/초 (bit/s)입니다. 동적 비트레이트를 지원합니다. 일반적인 값: 128k, 1.25m, 5m (예: 128k는 128 kbps, 1.25m는 1.25 Mbps를 의미). |
vbRatio |
No | 계수로 표현된 비디오 비트레이트입니다. 출력 비디오 비트레이트는 입력 비디오 비트레이트에 이 계수를 곱한 값으로 결정됩니다. 값의 범위는 (0, 15]이며, 소수점 값을 지원합니다. 참고: 값이 0이거나 15를 초과하면 오류가 반환됩니다. vbRatio로 계산된 비디오 비트레이트가 50 Mbps를 초과하면 비정상적으로 간주되어 해당 파라미터는 적용되지 않습니다. vbRatio와 vb가 모두 설정된 경우 vbRatio가 우선 적용됩니다. |
vcodec |
No | 비디오 인코딩 방식을 지정합니다. 지정하지 않으면 시스템이 원본 인코딩 방식을 유지하려고 시도합니다. 옵션: • libx264 - H.264• libvpx - VP8 및 VP9 (구글 코덱)• libxvid - MPEG-4• libws265 - H.265• vvc - H.266 |
acodec |
No | 오디오 인코딩 방식을 지정합니다. 지정하지 않으면 시스템이 원본 인코딩 방식을 유지하려고 시도합니다. MP3, AAC, OGG 등 다양한 인코딩 방식을 지원합니다. |
s |
아니오 | 출력 비디오 해상도를 widthxheight 형식(예: 1920x1080) 또는 미리 설정된 값으로 지정합니다.가로 x 세로 모드: 정확한 가로/세로 크기를 설정합니다. 가로와 세로를 모두 지정하면 트랜스코더가 이 값을 그대로 사용합니다. 참고: 설정한 해상도의 종횡비가 원본과 다를 경우(예: autoscale 또는 autofill 미사용 시) 영상이 눌리거나 늘어날 수 있습니다.가로 또는 세로 모드: 한쪽 값만 입력(예: 1280x 또는 x720) 시, 트랜스코더가 원본 종횡비를 유지하면서 다른 값을 자동 계산합니다. 예를 들어, 원본이 1920x1080일 때 1280x를 지정하면, 출력 해상도는 1280x720이 됩니다. |
autoscale |
아니오 | s 파라미터와 함께 사용하여 종횡비 처리 방식을 제어합니다:• 0 (기본값): s 파라미터에서 지정된 해상도대로 엄격하게 처리하여, 영상이 늘어나거나 줄어들 수 있습니다.• 1: 원본의 종횡비를 유지한 채로 s 값 이내에 맞춰 스케일링하며, 출력 비디오는 지정한 가로/세로 크기를 넘지 않습니다. |
autofill |
아니오 | s 파라미터와 함께 사용하여 비디오 출력 크기와 채우기를 제어합니다:• 1: 목표 종횡비가 원본 비디오와 다른 경우, 원본 비디오의 종횡비를 유지한 채 s 파라미터로 지정된 크기에 맞게 스케일링합니다. 빈 영역에는 검은색 막대(레터박스 또는 필러박스)가 추가되어 출력이 최종 해상도(s값)와 일치하도록 합니다. |
GOPInterval |
아니오 | 키프레임(I-프레임) 간의 시간 간격을 밀리초(ms) 단위로 설정합니다. 참고: 이 파라미터는 g 파라미터(키프레임 간 프레임 수 설정)와 상충하므로, 두 파라미터를 함께 사용할 수 없습니다. |
rotate |
아니오 | 시계 방향 회전 각도를 지정합니다. 옵션은 90, 180, 270 또는 auto(비디오 메타데이터를 기반으로 자동 감지 및 보정)입니다. 기본값은 회전 미적용입니다. |
an |
아니오 | 오디오 스트림 비활성화: • 0 (기본값): 오디오 스트림을 유지합니다.• 1: 오디오 스트림을 제거합니다. 출력 비디오는 오디오를 포함하지 않습니다. |
vn |
아니오 | 비디오 스트림 비활성화: • 0 (기본값): 비디오 스트림을 유지합니다.• 1: 비디오 스트림을 제거하며, 출력 파일에는 오디오 스트림(존재 시)만 남습니다. |
moovToFront |
아니오 | MP4 파일에서 moov 원자(메타데이터)의 위치를 제어합니다:• 0 (기본값): 메타데이터를 파일 끝에 유지합니다.• 1: 메타데이터를 파일의 시작 부분으로 이동합니다. 이를 통해 재생 플레이어가 초기화 정보를 더 빨리 참조할 수 있어 일반적으로 동영상 스트리밍 시작이 빨라집니다. |
sar |
아니오 | 샘플 종횡비(Sample Aspect Ratio). 특정 픽셀 종횡비(예: 1:1, 1:2)를 설정합니다. 이 파라미터는 최종 표시 종횡비에 영향을 미치며, 보통 s(해상도) 파라미터에 의해 암시되는 종횡비보다 우선 적용됩니다. 예를 들어 해상도가 720x720이고 SAR이 1:2라면, 표시 시 픽셀이 세로로 늘어나 실제 표시 해상도(또는 인식 해상도)는 720x1440이 됩니다. |
/crf/<value> |
아니오 | 일정 비트율 계수(Constant Rate Factor, CRF). 장면의 복잡도에 따라 출력 비트 전송률이 동적으로 조정되어 일정한 시각적 품질을 유지합니다. 단순 장면은 더 낮은 비트 전송률, 복잡한 장면은 더 높은 비트 전송률을 가지며, 보통 0~51(H.264/H.265 기준)의 값을 사용합니다. 값이 작을수록 품질이 높고 파일 크기는 커지며, 값이 클수록 품질은 낮고 파일은 작아집니다. 권장 사용 범위는 [18, 28]입니다. |
level |
아니요 | H.264/H.265 인코딩 레벨을 설정합니다. 레벨은 디코더 제약 조건(예: 최대 해상도, 프레임 속도, 비트레이트)을 정의합니다. 값 예시는 10(레벨 1.0)에서 51(레벨 5.1)까지입니다. 이 파라미터는 비디오 코덱이 libx264일 때만 적용됩니다. |
pix_fmt |
아니요 | 픽셀 포맷을 설정합니다. 예시: yuv420p, yuv422p, yuv444p. yuv420p(YUV 4:2:0)은 웹 비디오 스트리밍에서 가장 일반적으로 사용되는 포맷으로, 좋은 호환성과 압축률을 제공합니다. |
vprofile |
아니요 | 비디오 인코딩 프로파일을 설정합니다. 예시: baseline, main, high, high10, high422, high444(주로 H.264/H.265 용). 프로파일은 사용되는 인코딩 도구 집합을 정의해 압축 효율 및 호환성에 영향을 줍니다. |
maxrate |
아니요 | 동적 비트레이트의 최대 비트레이트 한계입니다. kbit/s(예: 1000k) 또는 Mbit/s(예: 8M; 'M’은 반드시 대문자여야 함)로 지정합니다.참고: 이 파라미터를 사용할 경우, 반드시 bufsize 파라미터도 지정해야 합니다. |
bufsize |
아니요 | 인코더 버퍼 크기입니다. maxrate와 함께 사용하며, kbit/s(예: 1000k) 또는 Mbit/s(예: 8M; 'M’은 반드시 대문자여야 함)로 지정합니다. 디코더가 비디오 스트림을 검증하는 데 필요한 버퍼 크기를 정의합니다. |
seiKeep |
아니요 | 트랜스코딩 중 SEI(Supplemental Enhancement Information) 정보를 보존할지 여부를 결정합니다. • 0(기본값): SEI를 보존하지 않음.• 1: SEI를 보존함.참고: 리믹스(즉, 재인코딩 없이 컨테이너 포맷만 변경)만 수행하는 경우, SEI 정보는 기본적으로 보존됩니다. |
preset |
아니요 | (주로 HLS용) 프리셋 이름을 지정합니다. 프리셋이란 최적화된 트랜스코딩 파라미터 그룹의 사전 설정입니다. 프리셋 이름을 사용하면 해당 파라미터 그룹이 적용됩니다. 요청에 특정 파라미터를 추가하여 프리셋 내 개별 설정을 재정의할 수도 있습니다. 아래 "HLS 프리셋"에서 자세한 내용을 확인하세요. |
saveas |
예 | 트랜스코딩된 파일의 저장 위치(bucket)와 파일명을 정의합니다. URL-safe Base64 인코딩을 사용하며, 형식은 Urlsafe_Base64_Encode(bucket:savedfilename)입니다. |
참고 사항:
HLS(m3u8) 트랜스코딩 구성을 간소화하기 위해 일련의 사전 설정이 제공됩니다. 각 사전 설정은 최적화된 파라미터 조합을 의미합니다.
| 유형 | 사전 설정 이름 | 설명 |
|---|---|---|
| 오디오 | audio_32k |
오디오 비트레이트: 32 kbps |
| 오디오 | audio_48k |
오디오 비트레이트: 48 kbps |
| 오디오 | audio_64k |
오디오 비트레이트: 64 kbps |
| 비디오 | video_16x9_150k |
비트레이트: 150 kbps, 화면비: 16:9, 해상도: 약 400x224 |
| 비디오 | video_16x9_240k |
비트레이트: 240 kbps, 화면비: 16:9, 해상도: 약 400x224 |
| 비디오 | video_16x9_440k |
비트레이트: 440 kbps, 화면비: 16:9, 해상도: 약 400x224 |
| 비디오 | video_16x9_640k |
비트레이트: 640 kbps, 화면비: 16:9, 해상도: 약 400x224 |
| 비디오 | video_4x3_150k |
비트레이트: 150 kbps, 화면비: 4:3, 해상도: 약 400x300 |
| 비디오 | video_4x3_240k |
비트레이트: 240 kbps, 화면비: 4:3, 해상도: 약 400x300 |
| 비디오 | video_4x3_440k |
비트레이트: 440 kbps, 화면비: 4:3, 해상도: 약 400x300 |
| 비디오 | video_4x3_640k |
비트레이트: 640 kbps, 화면비: 4:3, 해상도: 약 400x300 |
| 비디오 | video_150k |
비트레이트: 150 kbps, 원본 비율 유지, 너비는 400px 기준일 수 있음 |
| 비디오 | video_240k |
비트레이트: 240 kbps, 원본 비율 유지, 너비는 400px 기준일 수 있음 |
| 비디오 | video_440k |
비트레이트: 440 kbps, 원본 비율 유지, 너비는 400px 기준일 수 있음 |
| 비디오 | video_640k |
비트레이트: 640 kbps, 원본 비율 유지, 너비는 400px 기준일 수 있음 |
| 비디오 | video_1000k |
비트레이트: 1000 kbps, 원본 비율 유지 |
| 비디오 | video_1500k |
비트레이트: 1500 kbps, 원본 비율 유지 |
참고: 프리셋의 해상도는 원본 비디오의 특성에 따라 비율 유지를 위해 조정될 수 있습니다.
이 예시는 Object Storage 버킷 vod-wcs-test001에 위치한 test.mp4라는 비디오를 FLV 포맷으로 live streaming transcoding 하는 방법을 보여줍니다. 비디오 비트레이트는 128k로 설정됩니다. 변환된 파일은 test_file.flv로 명명되어 동일한 버킷에 저장됩니다.
파라미터 조합 (fops):
avthumb/flv/vb/128k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test_file.flv)
의사 코드 요청 (curl):
curl -v -X POST \
--data "bucket=Urlsafe_Base64_Encode(vod-wcs-test001)&key=Urlsafe_Base64_Encode(test.mp4)&fops=Urlsafe_Base64_Encode(avthumb/flv/vb/128k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test_file.flv))&force=1&separate=1" \
--header "Authorization: AccessKey:EncodeSign" \
--url "<http://mgrDomain/fops>"
실제 요청(Base64 인코딩됨):
curl -v -X POST \
-d "bucket=dm9kLXdjcy10ZXN0MDAx&key=dGVzdC5tcDQ=&fops=YXZ0aHVtYi9mbHYvdmIvMTI4a3xzYXZlYXMvZG05a0xYZGpjeTEwWlhOME1EQXhPblJsYzNSZlptbHNaUzVtYkhZPQ==&force=1&separate=1" \
-H "Authorization: AccessKey:EncodeSign" \
--url "<http://mgrDomain/fops>"
이 예시는 오브젝트 스토리지 버킷 vod-wcs-test001에 저장된 test.mp4 동영상을 HLS 포맷으로 변환하며, .m3u8 매니페스트 파일과 관련 .ts 세그먼트를 생성합니다. 이 예시에서는 video_16x9_150k 프리셋을 사용합니다. 해당 프리셋에는 일반적으로 다음과 같은 파라미터가 포함되어 있습니다:
주요 트랜스코딩된 .m3u8 파일은 test.m3u8으로 명명되어 동일한 버킷에 저장됩니다.
파라미터 조합 (fops):
avthumb/m3u8/preset/video_16x9_150k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test.m3u8)
의사 코드 요청 (curl):
curl -v -X POST \
--data "bucket=Urlsafe_Base64_Encode(vod-wcs-test001)&key=Urlsafe_Base64_Encode(test.mp4)&fops=Urlsafe_Base64_Encode(avthumb/m3u8/preset/video_16x9_150k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test.m3u8))&force=1&separate=1" \
--header "Authorization: AccessKey:EncodeSign" \
--url "<http://mgrDomain/fops>"
실제 요청(Base64 인코딩됨):
curl -v -X POST \
-d "bucket=dm9kLXdjcy10ZXN0MDAx&key=dGVzdC5tcDQ=&fops=YXZ0aHVtYi9tM3U4L3ByZXNldC92aWRlb18xNng5XzE1MGt8c2F2ZWFzL2RtOWtMWGRqY3kxMFpYTjBNREF4T25SbGMzUXViVE4xT0E9PQ==&force=1&separate=1" \
-H "Authorization: AccessKey:EncodeSign" \
--url "<http://mgrDomain/fops>"