VOD 권장 설정
목적
이 섹션에서는 파일 기반 인코딩 (즉, 실시간 아님)을 실행할 때 VP9 인코딩 설정을 위한 권장사항을 제공합니다.
이 추천은 다음 목표를 위해 설계되었습니다.
- 품질과 인코딩 속도 간의 균형
- 합리적인 품질을 달성하기 위한 최소 비트 전송률
- 다양한 콘텐츠 유형을 수용하기 위한 설정
다음 권장사항은 권장되지 않습니다.
- 주소 실시간 인코딩
- 특정 콘텐츠 유형 (예: 움직임이 많은 스포츠 영상)에 맞게 최적화
- 특정 기기 또는 네트워크 요구사항 설정
단일 해상도 인코딩
VP9은 낮은 해상도부터 4K까지 다양한 프레임 크기를 지원합니다. 프레임 크기가 클수록 화질이 향상되지만 제공하기 위해서는 더 많은 대역폭이 필요하며, 디코딩하는 데 더 많은 처리 성능이 필요합니다.
단일 해상도를 만드는 경우 640x480을 사용하면 다양한 웹 기기와 휴대기기에 안전하게 사용할 수 있습니다. 다음 FFmpeg 명령줄 매개변수를 사용하면 750kbps의 단일 해상도 파일을 만들 수 있습니다.
-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
-c:v libvpx-vp9 -c:a libopus output.webm
다중 해상도 인코딩
여러 해상도를 타겟팅하거나 전송 네트워크에 다양한 대역폭이 있는 경우 여러 해상도를 만드는 것이 좋습니다. 이 경우 플레이어는 뷰어로 전송되는 해상도를 제어할 수 있습니다.
다중 해상도 동영상 인코딩은 적응형 비트 전송률 스트리밍에 자주 사용됩니다. 여기서 동영상 플레이어는 사용자의 대역폭에 따라 실시간으로 해상도 간에 전환합니다. 예를 들어 Shaka Player를 사용하면 각 VP9 인코딩이 별도의 파일에 있고 DASH 매니페스트가 각 인코딩에 관한 정보를 제공하는 다중 해상도 인코딩을 재생할 수 있습니다.
적응형 스트리밍 형식의 동영상 패키징에 관한 자세한 내용은 Shaka Packager를 참고하세요. 이 가이드에서는 여러 해상도에서 VP9의 인코딩 설정에 중점을 둡니다.
권장 설정
아래의 모든 설정은 다양한 해상도의 개별 파일에 사용할 수 있으며 적응형 스트리밍에 적합한 포괄적인 세트를 제공합니다. 640x480 버전에는 두 가지 버전, 즉 저품질 버전 (LQ)과 다른 품질 (MQ)이 있습니다.
비트 전송률
주문형 보기를 위해 VP9 파일을 인코딩할 때 제한 품질 (CQ) 모드를 사용하는 것이 좋습니다. 이 인코딩 모드를 사용하면 타겟 평균 비트 전송률을 지정하는 동시에 동영상의 최대 품질과 최소 비트 전송률을 모두 제어할 수 있습니다.
다음 비트 전송률이 웹 및 모바일 배포의 기준으로 제시됩니다. 이러한 권장사항은 소비자 웹 및 모바일 배포에 적합한 동영상 품질을 달성하는 비트 전송률을 최소화합니다. 따라서 합당한 품질을 달성할 수 있는 비트 전송률 권장사항이라고 생각하면 됩니다.
위의 예에서는 최소 비트 전송률이 타겟 비트 전송률의 50%, 타겟 비트 전송률의 최대 145% 로 설정된 것이 좋습니다.
프레임 크기/프레임 속도 | 목표 비트 전송률 (VOD, kbps) | 최소 비트 전송률 (50%) | 최대 비트 전송률 (145%) |
---|---|---|---|
320x240p @ 24,25,30 | 150 | 75 | 218 |
24,25,30에서 640x360p | 276 | 138 | 400 |
24,25,30에서 640x480p | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1280x720p @ 24,25,30 | 1024 | 512 | 1485 |
1280x720p @ 50,60 | 1800 | 900 | 2610 |
1920x1080p @ 24,25,30 | 1800 | 900 | 2610 |
1920x1080p @ 50,60 | 3,000 | 1,500 | 4350 |
2560x1440p @ 24,25,30 | 6000 | 3,000 | 8700 |
2560x1440p @ 50,60 | 9000 | 4500 | 13050 |
3840x2160p @ 24,25,30 | 12000 | 6000 | 17400 |
3840x2160p @ 50,60 | 18000 | 9000 | 26100 |
FFmpeg에서는 다음 명령어로 비트 전송률을 제어할 수 있습니다.
FFmpeg | |
---|---|
-b:v <arg> |
비트 전송률 설정 (예: 500k) |
-minrate <arg> -maxrate <arg> |
최소 비트 전송률 및 최대 비트 전송률을 설정합니다. |
예를 들어 640x480 콘텐츠를 인코딩할 때는 명령줄 -b:v 750k -minrate 375 -maxrate 1088
을 사용할 수 있습니다.
품질
CQ 모드에서는 최대 화질 레벨도 설정합니다. 파일 기반 VP9 인코딩에는 다음과 같은 품질 수준이 권장됩니다.
프레임 높이 | 타겟 품질 (CQ) |
---|---|
240 | 37 |
360 | 36 |
480 | 34 (LQ) 또는 33 (MQ) |
720 | 32 |
1080 | 31 |
1440 | 24 |
2160 | 15 |
FFmpeg에서는 -crf
명령어를 사용하여 화질을 설정합니다. 예를 들어 품질을 33으로 설정하려면 -crf 33
명령어를 사용합니다.
다중 패스 인코딩 및 인코딩 속도
파일 기반 인코딩을 사용하면 속도를 유연하게 할 수 있습니다. 동일한 머티리얼에 여러 번의 패스를 실행하여 품질을 높이고 각 패스의 속도를 선택할 수도 있습니다.
FFmpeg에서 VP9 파일을 인코딩할 때는 -quality
매개변수를 good
로 설정한 다음 -speed
매개변수를 사용하여 아래 표에 따라 첫 번째 및 두 번째 패스의 속도를 설정하는 것이 좋습니다. 이렇게 하면 인코딩 시간과 출력 품질 사이에 적절한 균형을 유지할 수 있습니다.
프레임 높이 | 속도 (첫 번째 통과) | 속도 (두 번째 패스) |
---|---|---|
240 | 4 | 1 |
360 | 4 | 1 |
480 | 4 | 1 |
720 | 4 | 2 |
1080 | 4 | 2 |
1440 | 4 | 2 |
2160 | 4 | 2 |
예를 들어 FFmpeg의 첫 번째 패스 인코딩 문자열에는 -quality good -speed 4
가 포함될 수 있습니다.
키프레임 간격
키프레임 간에 최대 240프레임의 동영상 (30fps 콘텐츠의 경우 8초)을 허용하는 것이 좋습니다. 키프레임은 독립적이고 동영상 프레임으로 충분합니다. 다른 프레임에 의존하여 렌더링하지 않지만 다른 프레임 유형보다 큰 경향이 있습니다. 웹 및 모바일 재생의 경우 키프레임을 넉넉하게 배치하면 인코더가 품질을 최대화할 수 있는 최적의 키프레임 배치를 선택할 수 있습니다.
FFmpeg 키프레임 간격은 -g
명령어로 제어되며 프레임 수를 나타냅니다. 240프레임의 경우 -g 240
입니다.
타일 조정 및 스레딩 추천
타일 시점을 사용하면 동영상 프레임을 여러 열로 분할하면 품질을 약간 저하할 수 있지만 인코딩 성능은 가속화됩니다. 타일의 너비는 256픽셀 이상이어야 하므로 사용할 수 있는 타일 수에는 제한이 있습니다.
타일 수와 출력 프레임 해상도에 따라 더 많은 CPU 스레드가 유용할 수 있습니다. 일반적으로 출력 프레임 크기가 매우 작은 경우 여러 스레드로 값이 제한됩니다.
다음 설정은 타일 해상도 및 다양한 해상도의 스레딩에 권장됩니다.
프레임 크기 | 타일 열 수 | 스레드 수 |
---|---|---|
320x240 | 1(-tile-columns 0 ) |
2 |
640x360 | 2(-tile-columns 1 ) |
4 |
640x480 | 2 (-tile-columns 1 ) |
4 |
1280x720 | 4 (-tile-columns 2 ) |
8 |
1920x1080 | 4 (-tile-columns 2 ) |
8 |
2560x1440 | 8 (-tile-columns 3 ) |
16 |
3840x2160 | 8 (-tile-columns 3 ) |
16 |
FFmpeg에서 타일 수는 -tile-columns
매개변수와 -threads
로 스레드 수를 조절합니다. 예를 들어 640x480 인코딩은 명령줄 -tile-columns 2 -threads 4
을 사용합니다.
FFmpeg 명령줄
위의 권장사항을 함께 고려하여 다음 FFmpeg 명령어를 사용하여 VP9 콘텐츠를 인코딩할 수 있습니다.
첫 번째 패스와 두 번째 패스 명령은 함께 체인됩니다. FFmpeg가 첫 번째 패스 통계 파일을 출력 동영상으로 덮어쓸 것을 요구하는 경우 두 번째 패스 명령어에서 -y
인수는 quot;Yes"에 답변합니다.
또한 최대 1280x720 출력을 타겟팅하는 인코딩에 1080p 소스가 사용됩니다. 4K 소스는 더 큰 출력에 사용됩니다.
320x240 (초당 24, 25 또는 30프레임)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 1 -speed 4 tos-320x240.webm && \ ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 2 -speed 1 -y tos-320x240.webm
- 입력 파일: tears_of_steel_1080p.webm(1920x800, 544.88MB)
- 출력 파일: tos-320x240.webm(320x240, 21.73MB)
640x360 (초당 24, 25 또는 30프레임)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-640x360.webm
- 입력 파일: tears_of_steel_1080p.webm(1920x800, 544.88MB)
- 출력 파일: tos-640x360.webm(640x360, 31.53MB)
640x480 (저화질, 24, 25 또는 30fps
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-640x480-low.webm
- 입력 파일: tears_of_steel_1080p.webm(1920x800, 544.88MB)
- 출력 파일: tos-640x480-low.webm (640x480, 51.18MB)
640x480 (중간 품질, 24, 25 또는 30fps
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-640x480-medium.webm
- 입력 파일: tears_of_steel_1080p.webm(1920x800, 544.88MB)
- 출력 파일: tos-640x480-medium.webm(640x480, 69.27MB)
1280x720 (초당 24, 25 또는 30프레임)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-1280x720-24-30fps.webm
- 입력 파일: tears_of_steel_1080p.webm(1920x800, 544.88MB)
- 출력 파일: tos-1280x720-24-30fps.webm(1280x720, 98.2MB)
1280x720 (초당 50 또는 60프레임)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4-y tos-1280x720-50-60fps.webm
- 입력 파일: tears_of_steel_1080p.webm(1920x800, 544.88MB)
- 출력 파일: tos-1280x720-50-60fps.webm(1280x720, 157.1MB)
1920x1080 (초당 24, 25 또는 30프레임)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm
- 입력 파일: tearsofsteel_4k.mov(3840x1714, 6.76GB)
- 출력 파일: tos-1920x1080-24-30fps.webm(1920x1080, 151.51MB)
1920x1080 (초당 50 또는 60프레임)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm
- 입력 파일: tearsofsteel_4k.mov(3840x1714, 6.76GB)
- 출력 파일: tos-1920x1080-50-60fps.webm(1920x1080, 238.18MB)
2560x1440 (초당 24, 25 또는 30프레임)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm
- 입력 파일: tearsofsteel_4k.mov(3840x1714, 6.76GB)
- 출력 파일: tos-2560x1440-24-30fps.webm 2560x1440, 533.54MB)
2560x1440 (초당 50 또는 60프레임)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm
- 입력 파일: tearsofsteel_4k.mov(3840x1714, 6.76GB)
- 출력 파일: tos-2560x1440-50-60fps.webm 2560x1440, 664.04MB)
3840x2160 (초당 24, 25 또는 30프레임)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm
- 입력 파일: tearsofsteel_4k.mov(3840x1714, 6.76GB)
- 출력 파일: tos-3840x2160-24-30fps.webm 3840x2160, 1.03GB)
3840x2160 (초당 50 또는 60프레임)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
-quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -y tos-3840x2160-50-60fps.webm
- 입력 파일: tearsofsteel_4k.mov(3840x1714, 6.76GB)
- 출력 파일: tos-3840x2160-50-60fps.webm 3840x2160, 1.56GB)