기본 인코딩

동영상 압축의 기본사항

이 섹션에서는 프레임 크기, 기본 비트 전송률 제어 및 품질을 비롯한 VP9 인코딩의 기본 옵션을 다룹니다.

동영상 압축이 처음이라면 이 동영상에서 동영상 압축의 필요성과 작동 방식을 자세히 알아보세요.

간단한 인코딩

다음 FFmpeg 명령어는 입력 파일을 Opus Audio가 있는 VP9 동영상으로 변환합니다. 이는 기본 설정을 사용하는 가장 간단한 인코딩입니다.

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

이 FFmpeg 인코딩은 다음과 같은 명령줄 매개변수를 사용합니다.

FFmpeg
-i <filename> 입력 파일 이름을 지정합니다.
-c:v libvpx-vp9 FFmpeg에게 VP9 동영상 생성을 요청합니다.
-c:a libopus FFmpeg에 Opus 오디오를 만들도록 지시합니다.
output.webm 출력 파일 이름을 지정합니다.

FFmpeg는 사용하는 출력 파일 이름에서 만들 파일의 유형을 추론합니다. 이 예에서는 FFmpeg가 output.webm를 요청했기 때문에 WebM 파일을 출력합니다.

해결 방법

모든 동영상에는 프레임 크기 (픽셀 너비 및 높이를 나타냄)가 있습니다. 다음 FFmpeg 명령줄 매개변수를 사용하여 VP9 인코딩의 출력 동영상 프레임 크기를 제어할 수 있습니다.

FFmpeg
-vf scale=<width>x<height> 프레임 너비 및 높이

예를 들어, 다음 FFmpeg 명령어는 640x480 VP9 WebM 동영상을 출력합니다.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

해상도가 낮을수록 품질이 낮지만, 해상도가 높을수록 더 많은 대역폭과 디코딩에 더 많은 처리 성능이 필요하며, 기존 기기에서는 지원되지 않을 수 있습니다. VP9의 경우 640x480은 다양한 모바일 및 웹 기기에 안전한 해상도로 간주됩니다.

비트 전송률 (비트 전송률)

VP9은 여러 가지 비트 전송률 모드를 지원합니다.

모드
Constant Quantizer (Q) 고정된 퀀타이저 값을 지정할 수 있습니다. 비트 전송률은 경우에 따라 다릅니다.
제한된 품질 (CQ) 최고 품질 수준을 설정할 수 있습니다. 화질은 비트 전송률 매개변수 내에서 다를 수 있습니다.
가변 비트 전송률 (VBR) 비트 전송률에 대한 제약조건 내에서 시간 경과에 따라 품질과 비트 전송률의 균형을 맞춥니다.
상수 비트 전송률 (CBR) 품질이 다양한 상태에서 비트 전송률을 일정하게 유지하기 위해 시도합니다.

파일 기반 동영상 (실시간 스트리밍 아님)에는 CQ 모드가 권장됩니다. 다음 FFmpeg 명령줄 매개변수는 CQ 모드에 사용됩니다.

FFmpeg
-b:v <arg> 타겟 비트 전송률 (예: 500k)을 설정합니다.
-minrate <arg>
-maxrate <arg>
최소 비트 전송률 및 최대 비트 전송률을 설정합니다.
-crf <arg> 최대 품질 수준을 설정합니다. 유효한 값은 0~63이며, 숫자가 작을수록 품질이 높습니다.

예를 들어, 다음 FFmpeg 명령어는 CQ 모드를 사용하여 중간 품질의 640x480 동영상 파일을 만들며, 평균 비트 전송률은 750kbps와 최대 화질은 33으로 제한됩니다.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

비트 전송률은 달성하려는 화질과 동영상의 해상도에 따라 달라집니다. 다양한 해상도의 비트 전송률에 관한 전체 권장사항은 여기에서 확인할 수 있습니다.

화질 및 속도 설정

동영상 압축은 출력 품질과 이를 만드는 데 걸리는 시간 사이의 절충안입니다. 일반적으로 인코딩에 더 많은 시간을 허용하여 항상 품질을 높일 수 있지만 가능한 최고 품질을 얻는 데 필요한 시간은 비실용적일 수 있습니다.

VP9은 품질과 속도 간의 균형을 유지하기 위한 여러 가지 설정을 제공합니다.

  • 화질 설정은 인코더가 동영상을 압축하는 데 필요한 접근 방식을 지정합니다. 실시간, 양호, 실시간 모드를 사용할 수 있습니다.

  • 스레딩 설정을 통해 인코더가 여러 CPU 스레드를 사용하여 동영상을 인코딩할 수 있습니다. 이러한 설정은 품질을 약간 저하시킬 수 있지만 인코딩 및 디코딩 속도를 크게 향상할 수 있습니다.

이러한 두 가지 유형의 설정은 여러 명령줄 매개변수에 의해 제어됩니다.

FFmpeg
-threads 인코딩 중에 사용할 스레드 수를 나타냅니다.
-quality good, best 또는 realtime로 설정할 수 있음
-speed 이 매개변수는 품질이 good로 설정되는지 또는 realtime으로 설정되었는지에 따라 의미가 다릅니다. 속도 설정 0-4goodbest의 VoD에 적용되며 0의 품질이 가장 높고 4는 가장 낮습니다. Realtime 유효한 값은 5-8이며, 숫자가 작을수록 품질이 높습니다.
-tile-columns Tail을 사용하면 동영상을 직사각형 영역으로 분할하여 인코딩과 디코딩을 멀티스레딩할 수 있습니다. 타일 수는 항상 2의 제곱입니다. 0= 타일 1개, 1=2, 2=4, 3=8, 4=16, 5=32

다음 FFmpeg 명령어를 사용하면 화질이 '##39;good&#39'로, 속도가 0 (고화질)으로 설정된 640x480 파일이 생성됩니다.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -quality good -speed 0 -crf 33 -c:v libvpx-vp9 -c:a libopus \
  output.webm

화질과 속도 설정 선택 항목은 해상도와 사용 가능한 처리 성능에 따라 달라질 수 있습니다. 다음 섹션에서 전체 권장사항을 확인할 수 있습니다.