코덱

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

1. 개요

COder and DECoder

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

고용량의 미디어 파일 크기를 획기적으로 줄일 수 있게 하여, 파일 저장과 스트리밍을 수월하게 했으며, 역으로 보다 고화질의 영상을 즐길 수 있게 하였다.

소프트웨어 코덱과 이를 물리적으로 구현하여 효율을 높인 하드웨어 코덱이 있으며, 알고리즘 발달과 CPU 성능 개선으로 여러 고사양의 코덱이 개발되어 왔다.

2. 상세

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

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

초창기에는 코덱 춘추전국시대였다. 듣도보도 못한 코덱도 많았고, 모르는 코덱으로 저장된 미디어파일은 재생을 못하는 경우도 많았다. (그 당시에는 주로 VHSVCD등의 매체와 전용 플레이어로 영상을 감상했다.) 그럼에도 인터넷과 파일공유가 발전하면서 해결책이 하나 둘 나오기 시작했다.

  • "통합코덱"은 코덱을 하나하나 설치하는 것이 귀찮은 사람들을 위한 코덱 모음집이다. 당시에는 필수 프로그램이었지만, 불필요한 코덱으로 인한 용량낭비, 중복코덱, 코덱 버전 충돌 및 시스템 크러시, 애드웨어 삽입 등으로 인한 문제로 현재는 추천하지 않게 되었다.
  • "내장코덱"은 몇몇 동영상 플레이어가 자주 쓰는 코덱을 안에 포함하고 재생시켜주는 방식이다. 코덱을 설치하지 않아도 동영상이 재생되기 때문에 코덱에 대한 이해가 부족한 유저들로부터 "유능한 플레이어"로 칭송을 받았다. 곰플레이어는 그 선두주자이며 이 덕분에 여전히 많은 사람들이 Windows Media Player 대신 곰플레이어를 설치해서 쓴다. 현재는 이를 따르는 KMPlayer, 다음 팟플레이어등의 다양한 미디어 플레이어들이 있으니 취향에 따라 설치하여 쓰면 된다. 덧붙여 이러한 플레이어들은 내장 코덱에 없는 코덱으로 인코딩된 영상을 재생하려 하면, 영상을 분석하여 필요한 코덱을 찾아서 깔도록 해 주기도 한다.
  • "FFmpeg"는 현재 쓸만한 코덱의 통합코덱이며, 상위 미디어 플레이어의 내장코덱 그 자체이며, 사실상 표준코덱이다(...) LAVFiltersFFmpeg의 디코딩 기능만 떼온 재생전용(특허문제에서 자유롭다) 코덱이다. 이 코덱으로 거의 모든 영상이 재생되며, 그렇지 않다면 퀵타임(.mov)코덱과 리얼 플레이어(.rm) 코덱만 추가로 설치하면 모든 영상이 재생된다 카더라.

코덱의 역사는 MPEG 역사와 궤를 같이 한다. (위에서 언급한 FFmpeg 이름에서 알 수 있다.)

  • 초창기 코덱의 춘추전국시대에는 다양한 코덱이 존재했다. 그 중 MPEG-1 Audio Layer 3 (MP3)가 현재까지 이어져 내려오고 있다.
  • MPEG-2 Part.2 시대. DVD로 정리되며, 코덱의 대세가 일단락 되었다. WMV가 유명하다.
  • MPEG-4 Part.2 시대. 인터넷(스트리밍)에서 급격한 발전이 있었으나, MS의 독점적 행태(ASF, MS MPEG4)에 반기를 들면서 DivX, DiviX의 독점에 반기를 들면서 Xvid(DivX를 뒤집었다)가 등장한다. 그러거나 말거나 어둠의 세계에서는 "대 P2P 시대"가 열린다(...)
  • MPEG-4 Part.10/H.264(AVC) 시대. MPEG(미디어)그룹과 ITU(통신)그룹의 연합하여 코덱을 발전시켰다. 그래서 같은 코덱인데 이름이 두개다(...) 아이폰, Blu-ray Disc 이후부터 사람들에게 친숙해졌다. 이어서 MPEG-H Part.2(H.265 HEVC, HEIC, UHD)가 나온다.

이정도를 알면 코덱 역사의 기본 뼈대를 안다고 해도 된다. 조금 더 나아가 MPEG의 대항마 오픈소스 진영 (FLAC, VP9, AV1) 정도만 더 알면 좋다. 상세한 내용은 별도 목차 참고.

같은 영상이라도 코덱의 차이에 따라 재구성된 화질이 달라진다. 이 때문에 돈 들여서 컴퓨터에 직접 장착하는 하드웨어 코덱을 달기도 하며, 소프트웨어 코덱이라고 하더라도 유료 코덱을 사서 쓰는 경우도 있다. CPU나 GPU의 성능이 부족하던 1990년대에는 소프트웨어 코덱이 거의 불가능하여 데스크탑 PC에 필수적으로 하드웨어 코덱을 달아야만 동영상을 볼 수 있었다.[1] TV같은 경우는 화질로 승부하기 때문에 고급 코덱을 써야 하는 경우가 많으므로, 자체 하드웨어 코덱을 쓴다. 스마트 TV와 같이 TV에서 직접 재생이 가능할 경우 TV에서 영상을 재생하면 컴퓨터에서보다 더욱 좋은 화질로 영상을 시청하는게 가능하다고 한다. 휴대기기 같은 경우는 저전력을 위해서 하드웨어 코덱이 들어간다. 주어진 코덱 외의 영상을 비순정 플레이어 소프트웨어 코덱으로 시청하면 배터리가 빨리 닳기도 한다. 그나마 이를 구현하는 AP가 없는 휴대기기(PMP)는 영상 저장시 별도 인코딩을 강요하기도 한다. 소프트웨어 코덱을 돌릴 수 있는 컴퓨터(랩탑, 데스크탑)도 별도의 그래픽카드에 좋은 스트리밍 작업을 위해서, 혹은 초고화질의 동영상을 재생하기 위해서 등의 이유로 하드웨어 코덱이 들어가기도 한다.

3. 설정 옵션

인코더에 따라 다르지만, 코덱을 사용하여 인코딩을 할 때, 보통 다음과 같은 것들을 고려하게 된다. 음원 음질은 상향평준화되어 코덱 옵션에 딱히 선택장애가 일어나지 않는다. 많은 고려사항들이 영상 옵션에 달려있다.

  • 파일형식: 컨테이너 선택
  • 코덱: 비디오코덱, 오디오코덱 종류 선택
    • 퀄리티 기준, 비트레이트 기준 등 세부 설정이 있을 수 있다.
  • 샘플레이트(Sample rate): 음원 샘플링 빈도. 높을수록 고주파음을 담을 수 있고, 낮을수록 먹먹해진다. 용량관점에서는 아래 비트레이트와 유사하다.
    • 44100(Hz): 가청주파수의 2배, 48kHz: 고음질 음원, 8kHz: 저음질 사람 음성 위주 음원(전화, 무전기 등)
    • PCM(무압축) 음원 기준으로, 샘플레이트에 비트수를 곱하면 비트레이트가 되며, 시간을 곱하면 파일 용량이 된다.
  • 비트레이트(BPS, bit per sec): 시간당 처리하는 용량. 비트레이트가 높을수록 화질이 좋아지지만, 파일 용량이 높아지며, CPU에 부하가 걸릴 수 있으며, 네트워크 속도(QoS에 따라 버퍼링이 걸릴 수 있다.
    • 미디어 - MP3 128~320kbps, CD 1411kbps, 케이블방송 5Mbps, DVD 10Mbps, 지상파(HD) 20Mbps, 블루레이 40Mbps (근사치)
    • 네트워크 - 2G음성: 8kbps, 3G음성: 12.2kbps, 3G데이터: 3Mbps, 데이터 무제한 요금제 QoS: (400kbps, 1,3,5Mbps), LTE: 75Mbps(CAT따라 다름), 일반 인터넷:100Mbps, 기가 인터넷 0.5~1Gbps
    • VBR(가변비트레이트, 고용량이 필요한 시간구간에 많은 자원을 몰아줄 수 있어 효율 높음), CBR(고정비트레이트, 뒤로가기 등 탐색에 유리), 그 외 코덱에 따라 혼합형 등등이 있을 수 있다.
  • 프레임레이트(FPS): 1초에 보여지는 영상 프레임. 낮으면 화면이 뚝뚝 끊긴다. 30fps 기준으로 움직임이 많으면 60fps, 정적이면 24fps(영화), 10~15fps(CCTV)를 쓴다. 같은 비트레이트(용량)라면 fps가 높을수록 fps에 자원이 더 배분되어 화질은 떨어질 수 있다.
  • 키프레임: 일정 시간당 저장되는 일종의 스틸컷 화면. 코덱은 이미지 모두를 저장하지 않고 변화되는 부분만 저장하며, 대략 10초 간격으로(변경가능) 띄엄띄엄 이미지를 저장하기 때문에 용량을 많이 줄일 수 있다. 키프레임 간격이 너무 길면 뒤로가기 할 때 이미지를 계산해 내느라 딜레이가 걸린다. 같은 비트레이트(용량)라면 키프레임이 많을수록 여기에 자원이 더 배분되어 화질은 떨어질 수 있다.
  • 영상 사이즈: 영상 해상도. 높을수록 선명한 화면(큰화면)을 보여주지만 적절 비트레이트(용량)를 선택하지 않으면 화질이 떨어질 수 있다. UHD, HD 외에도 타깃 재생기기에 따라 적절히 선택한다.
  • 인코딩 시간: 화질을 포기하고 시간을 선택하거나(생방송), 시간을 버리고 화질을 선택하거나(DVD 등), 그 중간 적정선을 선택할 수 있다.
    • 일반적으로 최신 코덱이 인코딩 시간이 길다. 최신 컴퓨터 성능을 믿고 CPU를 갈군다.
    • OpenCL, GPGPU 등의 하드웨어 가속: 일반적으로 인코딩은 CPU(똑똑하다)가 관여한다. 그러나 GPU(머릿수가 많다)의 도움을 받아 시간을 현저하게 줄일 수 있다. 그 결과물은 조별과제 같아서 아직 많은 기술개발이 필요하다(...)
    • 1pass, 2pass: 이미지를 분석하여 효율적인 인코딩을 할 수 있으나, 시간이 두배 걸린다.
    • Direct Stream: 인코딩을 하지 않고, 그대로 저장하는 옵션. 인코딩을 하지 않고 파일변환을 하기 때문에 아주 빠르다. 미디어를 자르기만 한다던가, (메타데이터 관리를 위해) 컨테이너만 바꾼다던가 할 때 쓴다. "스트림 복사" 등 다른 이름으로 불리기도 한다.
    • 녹화: 재생하는 시간만큼 미디어 저장시간이 걸린다(...)

이외에도 각 코덱마다 개별적으로 설정할 수 있는 알고리즘 옵션들이 있고 자세한 설명은 생략한다, 이를 최적화한 값을 "프리셋"에 저장하여 사람들끼리 공유할 수도 있다.

사실, 인코딩을 위해 효율적인 설정을 연구하고, 좋은 하드웨어를 사느니 하드디스크를 하나 더 사는게 싸게 먹힌다는 것이 정설이다.

4. 오디오 코덱

오디오 코덱

손실 압축

일반

MP1, MP2, MP3, mp3PRO, AAC, Musepack, WMA (Standard/Pro), Vorbis, Opus

음성 특화

AMR-NB, AMR-WB, WMA Voice, Speex, Opus

다중채널 특화

AC-3, SDDS, DTS

블루투스

SBC, aptX, AAC, LDAC

무손실 압축

FLAC, ALAC(애플 무손실), APE(Monkey's Audio), TAK, WMA Lossless

무손실 무압축

PCM(WAV, AIFF)

  • 음성특화: 사람 음성 영역대 외의 소리를 잘라내어 용량을 줄일 수 있다. 음성 용량을 낮추고 빠른 압축이 가능하면 원격회의시 지연율을 낮출 수 있다.
  • 다중채널 특화: 5.1채널 영화관 용도. mp3가 스테레오 2채널만 지원해서 발생한 카테고리이다.
  • 블루투스 특화: 저전력 저압축 저지연(버퍼링)의 빠른처리가 필요하다.
  • MP3: 손실 압축 포맷 음원의 사실상 표준
  • AAC: MP3의 후신 이지만 mp3가 자리를 비켜주지 않는다. iTunes나 동영상의 오디오 코덱으로 활용되기 시작했다.
  • WMA: MS의 오디오 컨테이너/코덱이므로, 스마트폰에서 재생을 보장할 수 없다. MS의 스마트폰 장사가 망했다
  • Vorbis: 오픈소스. 로열티 없는 mp3라는 강점이 있었는데, mp3 특허가 만료되었다(...)
  • FLAC: 오픈소스. 무손실 압축 포맷이기 때문에 mp3 대신 사용된다.
  • Opus: 오픈소스. VoIP용 코덱의 끝판왕.
  • AC3: 돌비의 오디오 코덱. 동영상에서 5.1채널 오디오를 담을 수 있기 때문에 mp3 대신 사용된다.
  • AMR-WB: 낮은 대역폭에 목소리만 집중한 오디오 코덱.
  • 기타: TwinVQ, QDesign, G.7xx, Wavpack, TTA, OptimFROG

5. 비디오 코덱

비디오 포맷

3GP, AVCHD , AVI, FLV, H.26x, SKM, mkv, MOV, MP4, MPEG, MXF

  • H.26x: ITU(통신연합)[2]MPEG(동영상 전문가 그룹)[3]의 연합. [4]
    • H.262: HDTV, DVD, 캠코더에서 활용. 화질에 강하며 압축률이 낮아 용량이 큰 편이지만, 적은 컴퓨터 리소스로도 편집이 수월하다.
    • H.263: 스트리밍을 강화하였다. 저해상도(영상통화,화상회의)는 h.263으로, 고해상도(MS-ASF, DivX, XviD)는 MPEG4, 혹은 그 개조버전으로 통용되었다.
    • H.264: 블루레이, 아이폰 이후 스마트폰에서 활용. 현재 가장 널리 쓰인다.
    • H.265: UHD에서 널리 쓰일 예정이다.
  • WMV - MS 전용 코덱이었다.
  • Theora
  • VP8
  • VP9 - Google이 서포트하는 코덱
  • AV1: 여러 회사에서 연합해 개발한 코덱이다.
  • 통합코덱 시절의 춘추전국시대 코덱들
    • Intel Indeo
    • CinePak
    • Realmedia
  • 기타
    • Dirac
    • Daala
    • 시네폼: 고프로 코덱
    • ProRes: 애플
    • DNxHD: AVID
    • NETVC
    • XVC - 2017년 말 발표된 코덱으로, 당시 VP9/HEVC보다 효율이 높았으며 2018년 중반까지는 AV1보다 효율이 높았다. 하지만 AV1 인코더/디코더의 발전으로 속도와 화질 모두 AV1에 뒤처지게 되었으며, 2020년 VVC 발표 이후에는 완전히 쓸모없어질 예정이다.

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

최근에 나온 코덱일수록 비트레이트가 부족할 때 깍두기 현상은 줄어드는 대신 디테일은 버리는 경향이 크다.

← 깍두기 증가

디테일 감소 →

MPEG-2

Theora

Xvid, WMV 9

VP8

H.264

VP9

HEVC

AV1

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

세 줄 요약.

  • 코덱: 미디어파일 압축방식. 코덱에 따라 용량과 화질이 좌우되며 재생이 불가능할 수 있음.
  • 컨테이너: 코덱으로 압축된 미디어 + 코덱이름 제목 아티스트 날짜등의 메타데이터 (...라고 하면 얼추 맞음)
  • 확장자: 텍스트 꼬리표. 수정해도 파일 본질은 안바뀜. 코덱명의 확장자(aac)와 컨테이너명의 확장자(m4a) 등 다양한 확장자 존재함.

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

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

음악은 과거에는 소리만 나면 되기 때문에 소리정보만 담고 적당한 이름의 확장자(wav)를 사용했었다. 이용해야 할 코덱을 지정해야 한다면 코덱명(mp3)을 확장자로 사용하면 되었다. 따라서 컨테이너 개념이 희박했다.

  • mp3가 널리 보급되면서 "음악제목 아티스트명 앨범명 장르" 등을 기록하고자 하는 요구가 발생했는데, 이에 따라 mp3는 컨테이너로 마개조 되었다(...) 어떤 앱은 mp3에 ID3 방식의 메타데이터를 삽입했고, 어떤 앱은 APE 방식의 메타데이터를 삽입했고, 어떤 앱은 메타데이터가 있음에도 읽을 수 없었고, 어떤 파일은 각 메타데이터마다 다른 내용이 들어있는 등 혼파망이 발생했다. 메타데이터를 파일 끝에 삽입하여 파일을 전부 읽은 후에나 노래 제목을 보여주는 상황도 있었고, 이를 개선하기 위해 파일 앞에 노래 제목을 기록하게 되었으나, 옛날에 만든 mp3 플레이어는 노래제목을 소리정보로 이해하고 연주하려 하는 (혹은 에러를 내뿜는) 웃픈 상황도 발생했다. 사람들은 표준화된 컨테이너의 필요성을 깨닫게 되나, mp3는 2019년까지도 음원의 사실상 표준 지위에서 내려오지 않았다(...) 어떤 메타데이터를 읽을지 몰라서 다 집어넣었어
  • m4a는 mp4 컨테이너를 사용하여 mp3와 같은 문제를 갖지 않는다. m4a 속 오디오 코덱인 aac로 이루어진 *.aac 파일은 메타데이터를 갖지 않는 거의 순수한 음악 파일로 존재한다.
  • ogg 컨테이너는 vorbis comment라는 메타데이터 방식을 이용하지만, 사람들은 flac 코덱명 확장자의 파일을 주로 쓴다. 무손실음원을 구별할 수 있는 필요성에 의한 현상인데, flac 메타데이터와 ogg 메타데이터 중 선택적으로 하나만 읽을 수 있는 앱이 다수 존재하는 듯 하다(...) 현실은 시궁창

사진은 JPG 이후 큰 발전이 없었다가 디지털카메라가 EXIF를 저장하면서, 아이폰이 HEIC를 스마트폰에서 사용하면서 분위기 전환이 된다.

  • jpg는 단순 이미지 정보만 담은 역사와 전통의 구버전이고, EXIF JPEG는 메타데이터를 포함한 jpg 컨테이너이다. 확장자는 둘다 jpg다.
  • bmp, gif, png는 컨테이너라기보다는 순수 이미지파일로 '취급'된다. 메타데이터를 넣은 무손실압축 이미지는 tiff 컨테이너를 쓰는 경향이 있다.
  • HEIC은 다름아닌 HEVC의 스틸컷을 담은 이미지 파일(컨테이너)이다.


  1. [1] 93년 당시엔 GPU란 게 3차원 그래픽 폴리곤 표시하기에도 버거웠고 CPU도 마찬가지 상황이라 MPEG1으로 인코딩된 비디오 CD를 재생하기 위해 ISA 슬롯에 비싼 하드웨어 디코더 카드를 사서 달았다. 이후 MPEG2로 인코딩된 DVD 동영상 재생을 위해 PCI 슬롯에 꽂는 디코더가 출시되었으나 CPU 성능 향상으로 소프트웨어 코덱이 보편화되자 사장되었다.
  2. [2] 저대역 통신망에서 동영상 스트리밍 요구가 강함
  3. [3] 저용량 고화질 요구가 강함
  4. [4] 혹은 같은 기술에 이름을 따로 붙이는 자존심 싸움
  5. [5] 확장자를 바꾸면 코덱이 바뀌는 줄로 오해하기 좋다.

최종 확인 버전:

cc by-nc-sa 2.0 kr

Contents from Namu Wiki

Contact - 미러 (Namu)는 나무 위키의 표가 깨지는게 안타까워 만들어진 사이트입니다. (26.41ms)