Skip to menu

본문시작



Views 982 Votes 0 Comment 1
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

정말 기본적인 내용인데 의외로 많은 분들이 모르시는 것 같아 소개합니다.

 

코덱에 대한 내용은 무척이나 방대하기 때문에 이 글에서는 비디오 코덱 중 우리가 실질적으로 거의 대부분 쓰게 되는 H.264 계열과 HEVC 계열만을 설명하겠습니다.

 

우선 개념을 분명히 하기 위해 말씀드리자면, 우리가 흔히 HEVC이니 H.264니 하고 부르는 것들은 동영상의 비디오 데이터 스트림의 압축(인코딩) 및 압축 해제(디코딩)에 대한 스펙 기준일 뿐이며, 이를 각각의 기준에 맞게 실제 알고리듬으로 구현한 것들은 또 따로 있다는 것입니다. 그 두 개를 모두 '코덱'이라는 이름으로 같이 부르고 있으니 혼동이 생기는 것인데, 전자를 '코덱 계열(family)', 후자를 '구현된 코덱(implementation)'이라고 생각하면 좀더 분명해질 것 같습니다. ('코덱 계열'은 '코딩 양식(coding format)'이라고도 합니다.)

 

코덱 중 H.264, HEVC 계열의 구현 코덱들을 정리한 표는 다음과 같습니다.

 

<H.264, HEVC 계열 코덱들의 종류와 특징>

(구현된 코덱들은 이보다 훨씬 많으나 우리에게 친숙하고 실제 사용할 가능성이 높은 것만 나열했습니다.)

 

이중 CPU를 연산 담당 단위로 하는 것을 소프트웨어 코덱, 그래픽 카드(GPU와 그래픽 카드의 video encoding/decoding engine)를 연산 담당 단위로 하는 것을 하드웨어 코덱이라고 하는데, 인코딩에서 화질은 소프트웨어 코덱, 속도는 하드웨어 코덱이 훨씬 낫다고 생각하시면 됩니다. 왜냐면 소프트웨어 코덱은 프로그램 업데이트로 알고리듬을 끊임없이 개선해서 더 나은 화질을 구현할 수 있는 데 반해 하드웨어 코덱은 이미 이식된 알고리듬을 빠른 속도로 수행하는 그래픽 카드의 칩들에만 의존하기 때문입니다. 그래서 하드웨어 코덱들은 하드웨어의 한계로 구현하지 못하는 특성들이 있어 일반적으로 소프트웨어 코덱에 비해 화질이 떨어지는 것입니다.

 

H.264와 HEVC에 대해 보다 자세한 내용이 궁금하신 분들은 위키백과나 나무위키를 참조하시기 바랍니다. (영문 위키백과 강추)

 

 

■ 반드시 알아야 할 코덱 관련 용어들

 

○ 비트레이트(bitrate)

  • 압축(인코딩)과 관련해 가장 중요한 특성 중 하나로, 데이터 스트림이 초당 얼마만큼의 비트(bit)인가 하는 것
  • FFmpeg에서는 bps(bits per second) 단위로, 샤나인코더 빠른 설정에서는 kbps(kilobits per second) 단위로 측정
  • 고정된 비트수만 가지면 고정 비트레이트(CBR: constant bitrate), 시간마다 다른 비트레이트를 가지면 가변 비트레이트(VBR: variable bitrate)라고 하며, 전체 데이터 스트림의 평균적인 비트레이트는 평균 비트레이트(ABR: average bitrate)라고 함
  • 비트레이트(kbps) x 재생 시간 길이(초) = 용량(kilobits)이므로 용량과 직접적인 연관이 있음

 

○ CRF(constant rate factor)

  • 퀄리티 모드 인코딩에서 퀄리티(우리 눈으로 인식하는 화질)를 결정하는 값
  • 작을수록 퀄리티가 높음
  • FFmpeg의 하드웨어 인코더에서는 완전히 독립적인 퀄리티 모드 인코딩이 불가능하며, 대신 비트레이트 모드에 추가적인 옵션을 적용하여 이를 흉내내고 있는 수준임
  • rigaya의 NVEnc에서는 "--vbrhq 0 --vbr-quality <float>" 옵션을 통해 소프트웨어 인코더의 crf 모드를 어느 정도 구현하고 있음

 

○ 양자화(quantization)

  • 인코딩 시 손실 압축을 하기 위해 계량화하는 과정
  • 손실 기준을 정하는 매개변수를 퀀타이저(quantizer) 또는 QP(quantization parameter)라고 함
  • 퀀타이저가 작을수록 퀄리티가 높음 (퀀타이저 0은 무손실 압축)

 

○ 프레임 레이트(frame rate)

  • 1초에 재생되는 프레임(사진) 수
  • 고정된 숫자의 프레임이 재생되면 고정 프레임 레이트(CFR: constant frame rate), 반대의 경우를 가변 프레임 레이트(VFR: variable frame rate)라고 함
  • 가변 프레임 레이트는 비교적 최근에 도입된 것으로, 재생기기와 컨테이너 양식에 따라 지원되지 않을 수 있음

 

○ 인터레이스(interlace)

  • 하나의 프레임을 가로줄 기준으로 홀수별, 짝수별로 따로 두 개로 나눈 것, 각각을 필드(field)라고 함
  • 한 번에 하나의 프레임을 보여주는 프로그레시브(progressive) 방식과 대조되는 개념
  • 과거 CRT 모니터 시절 주사 방식의 특성을 고려하면서 대역폭 절약을 위해 도입된 방식으로, RGB 모니터를 쓰는 현재에는 적합하지 않으나 방송용이나 영상이 담기는 미디어에 따라(DVD, Blu-ray disc) 쓰이는 경우가 있음
  • 인터레이스된 두 개의 필드를 하나의 프레임으로 복원하는 것을 디인터레이싱(deinterlacing)이라고 함

 

○ I 프레임(I-frame, intra-coded frame)

  • 압축/압축 해제를 위해 다른 프레임들을 참조하지 않는 독자적인 프레임

 

○ P 프레임(P-frame, predictive-coded frame)

  • 압축/압축 해제를 위해 일정한 수의 선행 프레임들을 참조하는 프레임
  • 참조하는 프레임과의 움직임 차이만이 기록
  • 미디어인포에서 보여주는 H.264의 'Ref Frames' 정보가 이 P 프레임이 참조하는 선행 프레임들의 갯수

 

○ B 프레임(B-frame, bipredictive-coded frame)

  • 압축/압축 해제를 위해 일정한 수의 앞과 뒤 프레임들을 참조하는 프레임
  • P 프레임처럼 참조하는 프레임과의 움직임 차이만이 기록

 

○ GOP(group of pictures)

  • 하나의 I 프레임과 이에 연관되는 다른 프레임들의 묶음

닫힌 GOP(closed GOP): GOP 내의 프레임들이 다른 GOP의 프레임들을 참조하지 못하는 GOP (닫힌 GOP의 I 프레임을 '키프레임(또는 IDR 프레임)'이라고 함)

열린 GOP(open GOP): GOP 내의 프레임들이 다른 GOP(대개 선행 GOP) 내의 프레임들을 참조하는 GOP (압축 효율이 증가하는 대신 인코딩/디코딩 시의 복잡도 증가)

  • H.264의 경우 닫힌 GOP가 기본값이며, HEVC의 경우 열린 GOP가 기본값 (HEVC의 모든 GOP가 열려 있다는 의미는 아니고, 열린 GOP를 허용한다는 의미)
  • H.264의 경우 설정된 연속된 B 프레임 수가 2고 GOP 크기가 12라면 (M=3, N=12), IBBPBBPBBPBP(또는 B)와 같이 프레임들이 구성
  • H.264 계열과 HEVC 계열의 코덱들은 인코더가 GOP 크기 또는 키프레임의 간격을 원본에 따라 탄력적으로 결정할 수 있음(min-keyint, keyint 옵션)

 

○ 프로파일(profile)

  • 코덱이 갖춰야 할 특성들 모음
  • 효율(압축률)과 관련이 있으며, 효율이 좋은 프로파일일수록 연산이 오래 걸림
  • 일종의 '압축과 관련된 특성들의 제약(features constraint)'이므로, 인코딩 당시의 한계 상황(실시간 인코딩, CPU의 한계)이나 디코딩을 하게 될 재생기기가 지원하지 않는 특성들을 고려해야 할 경우를 제외하고는 인코딩할 때 설정하지 않아도 무방
  • 인코더 특정 고유 옵션의 설정값을 변경하는 방식으로 제약을 가함

 

○ 레벨(level)

  • 해상도, 프레임 레이트, 최대 비트레이트 등 영상의 대역폭(bandwidth) 설정
  • 이 역시 일종의 한계값이므로 재생기기의 한계(버퍼 크기, 최대 비트레이트 등 대역폭 관련 한계)나 스트리밍 시 대역폭의 한계가 있는 상황이 아니라면 굳이 따로 설정할 필요 없음

 

○ 프리셋(preset)

  • 인코딩 시 인코더가 사용하게 될 인코더 고유 설정값들을 미리 묶어둔 것
  • 인코딩 시 반드시 설정해야 함 (ffmpeg에서는 설정하지 않을 경우 medium으로 자동적으로 설정됨)
  • 사용자가 인코더 고유 설정으로 따로 설정한 값들은 프리셋의 설정값보다 우선

 

○ 튠(tune)

  • 원본의 특성에 맞게 인코더의 몇몇 고유 설정값들을 사전 설정한 것
  • 프리셋보다 우선 순위가 높으나 사용자 설정보다는 떨어짐
  • 이 역시 일종의 추가 옵션이므로 특별한 목적이 아닌 한 인코딩 시 따로 설정할 필요 없음
Facebook Twitter Pinterest Kakao
  • ?
    papa 2020.02.19 14:05
    와 넘 감사합니다 궁금증이 확 해소되었어요

List of Articles
No. Subject Author Date Views Votes
Notice 사용 팁 게시판 이용 안내 Rina 2020.03.18 285 0
55 Mpegts 컴 플 렉 스 옵션 추가,건의 하 다 6462531 2020.04.01 24 0
54 다중 오디오 동영상 인코딩하기 1 file JKyle 2020.03.17 413 2
53 HEVC 코덱 설정->튜닝 옵션별 각 화질 비교 3 file 바봉이 2020.02.05 2397 0
52 H264(AMF), HEVC(AMF) 옵션 도움말 JKyle 2020.02.03 1057 0
51 H264(NVENC), HEVC(NVENC) 옵션 도움말 1 JKyle 2020.02.03 1117 0
50 필터 적용 사례: 로고/워터마크 제거 JKyle 2020.01.31 966 1
49 HDR 영상과 10비트 영상 JKyle 2020.01.29 649 1
48 색공간과 Bit Depth 3 JKyle 2020.01.28 289 1
47 샤나인코더 영상 사이즈 변경 옵션을 통한 FFmpeg 필터의 기초 이해 JKyle 2020.01.27 682 1
46 샤나인코더의 H264 설정과 FFmpeg의 x264 설정 이해 JKyle 2020.01.27 844 1
45 FFmpeg 명령어 구조와 샤나인코더 작동 방식 이해 JKyle 2020.01.26 355 0
44 [인포그래픽] 인코딩 작업 흐름과 자막 작업 1 JKyle 2020.01.25 348 0
43 [인포그래픽] 인코딩 작업의 흐름도 1 JKyle 2020.01.25 436 0
» [필독] 비디오 코덱과 기본 용어 (H.264, HEVC) 1 JKyle 2020.01.25 982 0
41 샤나인코더로 움짤 만들기 file JKyle 2019.09.08 1589 0
40 기록 보기에서 Consider increasing the value for the 'analyzeduration' and 'probesize' options 내용이 있을 때 해결법 4 Rina 2019.09.04 728 1
39 SRT SMI 자막 인코딩 이용시 한글 깨짐 자막변환 방법 file 나그네3 2019.03.14 4351 1
38 webm VP9 멀티스레드 활성화하는 방법, 속도 향상시키는 방법 마소리스 2018.09.25 2689 0
37 "비트레이트를 원본보다 높게 주면 원본보다 퀄리티가 나아질 수 있다"는 주장에 대해 5 JKyle 2018.09.19 8063 0
Board Pagination Prev 1 2 3 Next
/ 3