mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-05-19 13:02:30

코덱

1. 개요2. 상세3. 인코딩 설정 옵션4. 오디오 코덱5. 비디오 코덱6. 비교개념: 컨테이너 확장자

1. 개요

COder and DECoder

음성 또는 영상의 신호를 디지털 신호로 변환하는 코더와 그 반대로 변환시켜 주는 디코더를 통틀어 부르는 용어이다.

2. 상세

고용량의 미디어 파일 크기를 획기적으로 줄일 수 있게 하여, 파일 저장과 스트리밍을 수월하게 했으며, 역으로 보다 고화질의 영상을 즐길 수 있게 하였다. 소프트웨어 코덱과 이를 물리적으로 구현하여 효율을 높인 하드웨어 코덱이 있으며, 알고리즘 발달과 CPU 성능 개선으로 여러 고사양의 코덱이 개발되어 왔다.

영상 신호를 디지털 신호로 변환하는 것을 코딩( 인코딩), 디지털 신호를 영상으로 변환하는 것을 디코딩이라고 한다. 일반적으로 0과 1로 부호화-복호화 하는 것을 모두 인코딩-디코딩이라 하지만, 멀티미디어(소리, 정지영상, 동영상) 영역 그중에서도 비디오 영역에서 크고 아름다운 임팩트를 발휘하기에 코덱 동영상 인코딩 (+디코딩)에서 주로 쓰이는 용어가 되었다.

멀티미디어들은 아날로그 신호들이다. 이것을 디지털로 부호화 하기 위해서는 샘플링을 하는데, 이를 조밀하게 하면 원래 신호와 거의 똑같게 구현할 수 있지만, 용량은 기하급수적으로 늘어나게 된다. 다행히도 아날로그 신호는 Sin 함수 등등으로 계산하여 구현할 수 있고, 사람이 인지하지 못하는 것은 가비지로 처리할 수 있는 등의 특성이 있어, 용량을 줄일 수 있는 여지가 매우 컸다. 이에 따라 다양한 압축 알고리즘들이 개발되었고 코덱이란 이름으로, 자세히는 손실 압축 포맷, 무손실 압축 포맷, 무손실 무압축 포맷 종류로 상황과 필요에 따라 발전되었다.

초창기에는 코덱 춘추전국시대였다. 듣도보도 못한 코덱도 많았고, 모르는 코덱으로 저장된 미디어 파일은 재생을 못하는 경우도 많았다.[1] 그럼에도 인터넷과 파일공유가 발전하면서 해결책이 하나 둘 나오기 시작했다.
코덱의 역사는 MPEG 역사와 궤를 같이 한다. 위에서 언급한 FFmpeg 이름에서 알 수 있다.
이정도를 알면 코덱 역사의 기본 뼈대를 안다고 해도 된다. 조금 더 나아가 MPEG의 대항마 오픈소스 진영 ( FLAC, VP9, AV1) 정도만 더 알면 좋다. 상세한 내용은 별도 목차 참고.

같은 영상이라도 코덱의 차이에 따라 재구성된 화질이 달라진다. 이 때문에 돈 들여서 컴퓨터에 직접 장착하는 하드웨어 디코더를 달거나, 소프트웨어 코덱이라고 하더라도 유료 코덱을 사서 쓰던 시절도 있었다. CPU나 GPU의 성능이 부족하던 1990년대 중반까지는 소프트웨어 디코딩이 거의 불가능하여, 데스크탑 PC에 필수적으로 하드웨어 디코더를 달아야만 동영상을 볼 수 있었다.[2] TV같은 경우는 화질 향상을 위해 다양한 후처리 과정이 이루어지는데, 이를 위해 자체 하드웨어 디코더를 쓴다. TV에서 영상을 직접 재생하면 컴퓨터에서 재생할 때 보다 화질이 좋아보이는 이유.

스마트폰 기준으로 최근 주요 코덱의 하드웨어 디코더가 보급된 시기를 간략히 정리하면 다음과 같다. 상세내용은 각 문서 참고.

3. 인코딩 설정 옵션

인코더에 따라 다르지만, 코덱을 사용하여 인코딩을 할 때, 보통 다음과 같은 것들을 고려하게 된다. 음원 음질은 상향평준화되어 코덱 옵션에 딱히 선택장애가 일어나지 않는다. 많은 고려사항들이 영상 옵션에 달려있다. 많은 동영상 인코더 FFmpeg 기반으로 만들어져 있기 때문에, FFmpeg 일반옵션의 명령어를 참고하면 인코더 기능의 존재를 파악하기 좋다. 이쪽은 인코더 기능의 의미를 이해하는데 도움이 되는 서술을 한다. 이외에도 각 코덱마다 개별적으로 설정할 수 있는 알고리즘 옵션들이 있고 자세한 설명은 생략한다, 이를 최적화한 값을 "프리셋"에 저장하여 사람들끼리 공유할 수도 있다.
사실, 인코딩을 위해 효율적인 설정을 연구하고, 좋은 하드웨어를 사느니 하드디스크를 하나 더 사는게 싸게 먹힌다는 것이 정설이다.

4. 오디오 코덱

🎵 오디오 코덱
{{{#!wiki style="margin: 0 -10px -5px; min-height: 26px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1.5px -13px"
<colbgcolor=#555> 손실
압축
<colbgcolor=#555><colcolor=#fff>일반 MP1 · MP2 · MP3 · mp3PRO · AAC · Musepack · WMA · Vorbis · Opus · USAC
음성 특화 AMR-NB · AMR-WB · AMR-WB+ · WMA Voice · Speex · Opus · Codec 2 · EVS · Lyra
다중채널 특화 AC-3 · SDDS · DTS · AC-4
블루투스 SBC · aptX · AAC · LDAC · SSC( Samsung Seamless Codec · Samsung Scalable Codec) · LC3
무손실 압축 FLAC · ALAC · APE · TAK · WMA Lossless · TTA · WavPack
무손실 무압축 PCM ( WAV · AIFF)
관련 문서: MIDI · DSD
관련 틀: 그래픽 · 오디오 · 비디오
}}}}}}}}} ||

5. 비디오 코덱

🎞️ 비디오 코덱 및 포맷
{{{#!wiki style="margin: 0 -10px -5px; min-height: 26px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1.5px -13px"
<colbgcolor=#555>
<colbgcolor=#555> MPEG-1 · MPEG-2 Part 2(H.262) · MPEG-4 Part.2 ( DivX · Xvid) · H.261 · H.262 · H.263 · H.264 · H.265 · H.266
기타 DV · WMV · Theora · VP8 · VP9 · AV1 · Apple ProRes · Bink · GoPro CineForm · Motion JPEG
컨테이너(확장자) ASF · AVI · BIK · FLV · MKV · MOV · MP4 · MPEG · OGG(OGV) · SKM · TS · WebM · WMV
관련 틀: 그래픽 · 오디오 · 비디오
}}}}}}}}} ||


용량 대비 화질 효율은 일반적으로 MPEG-2 < Theora < WMV 9, Xvid < VP8 < H.264 < VP9 < HEVC < AV1 < VVC 순이다.

최근에 나온 코덱일수록 비트레이트가 부족할 때 깍두기 현상은 줄어드는 대신 디테일은 버리는 경향이 크다. 압축 알고리즘을 개선하더라도 같은 비트레이트에 데이터가 유의미하게 많을 수는 없기 때문이다. 새로운 코덱이 나오더라도 기존영상들의 코덱을 금방 버리지는 않는 이유. 하지만 고 해상도로 갈 수록 디테일 생략이 눈에 덜 띄기 때문에 픽셀 추측 알고리즘을 개선하여 깍두기를 없애는게 대체적으로 효율적이다.
← 깍두기 증가 디테일 감소 →
MPEG-2 Theora Xvid, WMV 9 VP8 H.264 VP9 HEVC AV1

6. 비교개념: 컨테이너 확장자

세 줄 요약.
과거에는 코덱으로 압축된 음악파일 그림파일 그 자체로 관리되었기 때문에 컨테이너란 개념이 희박했다. 파일(내부)의 헤더와 파일명의 확장자로 파일을 관리하면 충분했었다. 하지만 음악파일에 앨범명 아티스트명 등의 음악 외 정보를 기록해야 할 필요성 (ID3), 사진파일에 날짜 태그 위치 등의 이미지 외 정보를 기록해야 할 필요성 (EXIF), 동영상 파일에 음성과 자막정보 등의 움직이는 이미지 외 정보를 기록해야 할 필요성이 생기면서 컨테이너란 개념이 필요해졌다.

동영상은 애초에 영상과 소리가 함께 담겨야 하기 때문에 컨테이너 개념으로 파일이 이루어져 있다. 해당 컨테이너가 최신 코덱을 지원하는지 못하는지가 문제될 뿐, 다양한 코덱으로 압축된 미디어 바이너리를 품을 수 있게 구성되어 있다. (= 재생 못하는 코덱을 품을 수도 있다.) 이에 따라 같은 avi 확장자의 파일인데 재생되는 영상과 재생되지 못하는 영상이 나오는 것이다. 자막을 품을 수 없는 구버전의 컨테이너(avi)는 별도의 자막파일을 보유해야 하지만, 자막을 품을 수 있는 신버전의 컨테이너(mkv)는 자막파일이 없어도 자막이 보일 수 있다. 컨테이너가 버전업이 되어 컨테이너가 달라지면 구버전과 차이를 명시하기 위해 확장자를 바꾸기도 한다. (mpg → mp4)[8] 같은 컨테이너라도 파일을 읽어야 하는 앱을 달리 지정하기 위해 굳이 확장자를 바꿔 명시하기도 한다. (영상 mp4, m4v & 음악 m4a) 스트리밍(버퍼링), 비선형탐색(되감기) 등의 기능에 따라 컨테이너 내 영상저장방식이 달라지기도 하므로 이를 구분하기 위해 확장자를 명시하기도 한다. (asf, TS, mTS)

음악은 과거에는 소리만 나면 되기 때문에 소리정보만 담고 적당한 이름의 확장자(wav)를 사용했었다. 이용해야 할 코덱을 지정해야 한다면 코덱명(mp3)을 확장자로 사용하면 되었다. 따라서 컨테이너 개념이 희박했다.
사진은 JPG 이후 큰 발전이 없었다가 디지털카메라가 EXIF를 저장하면서, 아이폰이 HEIF를 사용하면서 분위기 전환이 된다.

[1] 그 당시에는 주로 VHS VCD 등의 매체와 전용 플레이어로 영상을 감상했다. [2] 90년대 중반까지는 GPU를 그래픽 렌더링 이외의 작업에 사용한다는 개념조차 없었고, CPU 성능도 충분하지 않아 MPEG1으로 인코딩된 비디오 CD를 재생하기 위해 ISA 슬롯에 비싼 하드웨어 디코더를 사서 달았다. 이후 MPEG2로 인코딩된 DVD 동영상 재생을 위해 PCI 슬롯에 꽂는 디코더가 출시되었으나 CPU 성능 향상으로 소프트웨어 코덱이 보편화되자 사장되었다. [3] 저대역 통신망에서 동영상 스트리밍 요구가 강함 [4] 저용량 고화질 요구가 강함 [5] 혹은 같은 기술에 이름을 따로 붙이는 자존심 싸움 [6] Base + Enhanced 컨셉으로 구성된 코덱. Base 툴은 특허가 만료된 기술로 구성되었고(MPEG4급 기술), Enhanced 툴은 최신(유료)기술들로 구성되어 이 두 조합으로 인코딩의 효율을 높인다. Base는 하드웨어 인코딩으로 빠르게, Enhanced는 소프트웨어로 유연하게 처리할 계획이 있는 듯 하다. [7] Base + Enhanced 컨셉으로 구성된 코덱. 기존 코덱(avc, hevc, vp9, av1)을 Base삼고, 이를 Enhanced 시키는 기술들로 구성되어 이 두 조합으로 인코딩의 효율을 높인다. Base는 하드웨어 인코딩으로 빠르게, Enhanced는 소프트웨어로 유연하게 처리할 계획이 있는 듯 하다. [8] 확장자를 바꾸면 코덱이 바뀌는 줄로 오해하기 좋다.