Opus(오디오 코덱)

 


[image]
1. 개요
2. 개발 과정
3. 특징
4. 사양
4.1. SILK
4.2. CELT
5. 장점
6. 단점
6.1. 해결됨
7. 현황
8. 음질 평가
8.1. 음성 (SILK)
8.2. 음악 (CELT)
8.2.1. 고음질 한계
8.2.2. 대역폭 한계
8.2.2.1. 낙관론
8.2.2.2. 비관론
8.2.3. 모노 다운믹스 문제
8.2.4. 저 비트레이트 한계
8.3. 5.1/7.1채널


1. 개요


홈페이지
오픈소스, 로열티 없는 무료 손실 압축 포맷 오디오 코덱이다.

2. 개발 과정


2012년, IETF(Internet Engineering Task Force)에서 표준화하였고, Xiph.Org[1], Skype 및 여러 단체에서 개발에 지원해서 탄생했다. #

3. 특징


스펙도 완전히 공개되어 있다. RFC6716
Speex를 계승하는 코덱이며 VoIP 용도로 개발된 코덱이지만 음악의 저장이나 스트리밍에서도 탁월한 성능을 발휘한다.
Xiph 위키에서도 다음과 같이 서술되어 있다. #

(원문)

'''Does Opus make all those other lossy codecs obsolete?'''

Yes.

From a technical point of view (loss, delay, bitrates, ...) Opus renders Speex obsolete and should also replace Vorbis and the common proprietary codecs too (e.g. AAC, MP3, ...).

(한국어 번역)

'''Opus가 다른 모든 손실 코덱을 구식의 한물간 코덱으로 만들까요?'''

예.

기술적인 관점에서 (손실, 지연, 비트레이트 등) Opus는 Speex를 구식 코덱으로 만들고, Vorbis와 다른 독점 코덱(예: AAC, MP3 등)도 대체할 겁니다.

Opus의 주요 경쟁 코덱은 회사에서 쓰이는 영상회의, 인터넷 전화, 음성 채팅 등에 쓰이는 Speex, G.711, G.729 등의 VoIP용 코덱이다. 예를 들자면 엑스박스 라이브, 팀스피크, 구글 지도, Siri 등이 있다(이상 모두 Speex 코덱 적용). AMR-WB나 Vorbis, AAC, MP3 등과 비교되는 것은 개발하면서 이것저것 넣다 보니 코덱이 뛰어나서 여기저기 쓰임새가 있는 것일 뿐 주요 경쟁 상대는 아니다.
Opus 코덱의 우수성은 이 이미지 하나로 끝난다.
[image]

4. 사양


  • 지원 샘플링 레이트: 48 kHz
    • 특이하게 CD의 주파수인 44.1 kHz가 없다. 개발자의 주장에 의하면 44.1 kHz 음원을 48 kHz로 변환하는 과정에서 음질의 손실은 거의 없고, CDP 같은 경우가 아닌 대부분의 범용 플레이어가 스피커 등으로 소리를 출력하는 과정에서 44.1 kHz를 48 kHz나 그 이상으로 변환하여 출력하기 때문에 큰 의미가 없다고. 또한 44.1 kHz를 제외함으로써 코덱이 단순해지는 장점이 더 크다고 하였다. 윈도우도 사운드카드 설정을 특별히 바꾸지 않으면 기본이 48 kHz이고 안드로이드 폰도 최근에는 대부분 48 kHz를 기본 샘플링 주파수로 사용한다. 즉 44.1 kHz 음원은 디코딩 후 48 kHz로 리샘플링이 이루어지게 되는데 킷캣까지 기본 내장된 리샘플러의 성능은 그리 좋지 않다고 한다. #
  • 지원 주파수
약칭
기록 주파수
샘플링 주파수
NB (narrowband)
4 kHz
8 kHz
MB (medium-band)
6 kHz
12 kHz
WB (wideband)
8 kHz
16 kHz
SWB (super-wideband)
12 kHz
24 kHz
FB (fullband)
20 kHz
48 kHz
  • 기본적으로 20 kHz 이상의 신호는 기록하지 않는다. FB의 기록 주파수가 24 kHz가 아닌 20 kHz인 것이 그 이유. 또한 96 kHz나 24비트 같은 고음질 오디오도 지원하지 않는다. 이것도 개발자 주장으로는 '제대로 제작된' 48 kHz/16비트 음원이면 충분하다고. 사실 96/192 kHz 음원의 경우 재생능력이 안 되는 기기가 재생하면 가청주파수를 넘어선 초음파가 가청주파수 내의 음으로 바뀌어서 내용이 왜곡되는 문제가 있다. 이런 주파수를 유령주파수라고 부르기도 한다. 또한 이러한 떡밥은 골든이어스에서도 논의가 되었는데, 결론적으로 48kHz에 16bit면 인간의 능력에 비해 차고 넘친다고 이야기되고 있다.
  • 비트레이트에 따른 기본 기록 주파수(libopus 1.3.1 기준)
    • 5 ~ 8 kbps: 4 kHz
    • 9 ~ 12 kbps: 8 kHz
    • 13 ~ 2048 kbps: 20 kHz
    • set-ctl-int 옵션을 사용하면 기록 주파수를 강제 설정할 수 있다. set-ctl-int 4008=1001 옵션을 추가하면 NB (narrowband)로 인코딩되며, 1001 대신 1002, 1003, 1004, 1005를 입력하면 각각 MB, WB, SWB, FB로 인코딩된다.
  • 지원 채널 수: 1~255개
  • 지원 비트레이트: 5 ~ 2048 kbps. CBR(고정 비트레이트), CVBR(고정 비트레이트에 가깝지만 비트를 가변 할당)와 VBR(가변 비트레이트)을 모두 지원한다.
1채널(모노)
5 ~ 256 kbps
2채널(스테레오)
28 ~ 512 kbps(음성)
18 ~ 512 kbps(음악)
4채널
64 ~ 1024 kbps
5.1채널
96 ~ 1536 kbps
7.1채널
128 ~ 2048 kbps
  • 비트레이트에 따라 최적 기록 주파수 및 채널 수가 변경되며 실시간 변경도 가능하다. 또한 변경이 될 때 별도의 잡음이나 지연(공백)이 들리지 않는다.
    • 비트레이트가 6 kbps 정도인데 괜히 20 kHz 대역폭의 음악을 다 기록하려고 용을 쓰다가 소리를 모조리 깨먹지는 않는다. 실제로 6 kbps로 인코딩하면 가장 낮은 지원 주파수인 4 kHz 이상은 처음부터 컷오프해서 인코딩한다.
    • 채널도 마찬가지로 4채널 이상에서 채널당 16kbps 미만이면[2] 스테레오로, 스테레오 음원은 18kbps 미만의 낮은 비트레이트에서 모노로 다운믹스되어 인코딩된다.

4.1. SILK


음성용. 2007년부터 개발이 시작되었다.

4.2. CELT


음악용. 2007년 11월부터 개발이 시작되었다.
20개의 밴드로 나누어져 있다.(0~200, 200~400 ... 15600~20000) #
0 - 200 - 400 - 600 - 800 - 1000 - 1200 - 1400 - 1600 - 2000 - 2400 - 2800 - 3200 - 4000 - 4800 - 5600 - 6800 - 8000 - 9600 - 12000 - 15600 - 20000 (Hz)
통합 이전에는 44.1kHz와 48kHz를 모두 지원했지만 Opus로 통합된 후로는 48kHz만 지원한다.

5. 장점


  • 대부분의 비트레이트에서 기존의 오디오 코덱보다 전반적으로 우수한 성능을 보여 준다. 물론 코덱에 따라 유리/불리한 부분은 따로 있지만, 일반적으로 매우 높은 압축률을 가졌다.
    • 비슷한 음질일 때 음악 콘텐츠인 경우 Vorbis보다 20~30% 정도, 음성 콘텐츠인 경우 Speex보다 25~70% 정도 용량이 작다.
[image]
Hydrogenaudio에서 실시한 공개 블라인드 테스트 비교 결과. 여기서 FAAC는 테스트의 유효성을 평가하기 위한 것이다. 기존에 유튜브에서 사용했던 아주 끔찍한 코덱이 FAAC이다. 비트레이트가 낮게 설정되어 있는 점을 감안하고 볼 것. 2016년 중후반 유튜브에서 동영상 코덱을 VP9로 변경하면서 사운드 코덱도 Opus로 변경되었는데, 예전에 비해 매우 좋은 음질을 들을 수 있게 되었다.
  • 기존 대부분의 오디오 코덱이 음악용과 음성용이 아예 별도로 있거나[예시1] 인코딩 시 옵션 선택을 해야 하는 반면[예시2] Opus는 자동으로 최적화된 데이터를 뽑아낸다.
이 과정에서 Xiph.Org의 CELT 기술과 스카이프의 SILK 기술을 기반으로 하여 통합하였다.
  • 레이턴시가 매우 짧아(기본 26.5 ms, 최적화 시 최저 5 ms 정도) 실시간 통화 등에 이용하기 적합하다.

6. 단점


  • 샘플 레이트가 48kHz로 제한되어 있다.
  • 극저 또는 극고 비트레이트에서는 불리하다.
    • 비트레이트를 아무리 높여도 20kHz 이상은 기록하지 않으며 화이트 노이즈가 아주 미세하게 들어간다.
    • 음성 기준 12kbps 미만에서는 다른 코덱보다 효율이 떨어진다.

6.1. 해결됨


  • 낮은 호환성. 지원하는 컨테이너가 Ogg, MKV, WebM 정도밖에 안 되며, 사용률이 높은 상용 컨테이너인 MPEG에는 못 넣었다. 그러나 2020년 7월 FFmpeg 4.2.4 기준, MP4 컨테이너도 Opus 스트림을 탑재할 수 있다.

7. 현황


아직 나온 지 얼마 안 돼서 지원하는 플레이어가 그리 많은 편은 아니지만, 차츰 늘어나는 추세다. 유튜브에서는 이미 스트리밍에 쓰이고 있다. 원래 개발 용도인 VoIP에서는 디스코드스팀에서 음성 코덱으로 쓰이는 등 잘나가고 있다.
과거에는 지원하는 컨테이너가 적었으나, 현재 MP4, MKV, Ogg(또는 opus), WebM 이 네 가지의 컨테이너에서 지원되어 호환성도 낮지 않다. 허나 유튜브를 제외하고 영상에서는 잘 쓰이지 않는다. 기존 추세인 AAC(고 비트레이트에서)나 HE-AAC(저 비트레이트에서)도 충분히 나쁘지 않은 성능을 자랑하고. 실제로 Opus와 각종 코덱을 비교한 그래프상으로도 AAC와 그렇게 큰 갭이 발생하진 않는다.
음성용으로는, 아직 VoIP를 제외하면 사용되는 경우는 많지 않다. 특히 어학용, 오디오북 등으로는 24~48kbps 정도에서 용량 대비 효율이 매우 높지만 여전히 MP3를 사용하고 있다.
DAP를 비롯한 MP3 플레이어에서는 거의 지원하지 않으며, 음원 사이트에서도 이 형식으로 판매하지 않는다.
이미 안드로이드 5.0 롤리팝부터는 Opus를 지원하고 있고 팟플레이어에서도 재생이 가능하다. 하지만 Opus는 오디오 압축 코덱 표준이지 메타정보를 포함한 파일 컨테이너 표준이 아니기 때문에 현재로서는 다른 컨테이너 표준을 차용해서 써야 하는 데 보통 오디오용 컨테이너로 쓰이는 Ogg 컨테이너를 많이 쓰는 편이다. 메타정보도 Ogg 컨테이너의 표준인 Vorbis comment를 쓰는 경우가 많다 .
안드로이드 폰에서도 Opus 음악 파일 재생을 지원하고 있지만 확장자가 .opus이면 음악 오디오 파일로 인식하지 못하고 .ogg로 바꾸어 주어야 음악 플레이어들이 음악 파일로 인식한다.[3] 반대로 MP3Tag 등 일부 메타정보 처리 윈도 소프트웨어에서는 ogg 컨테이너에 opus 코덱으로 인코딩된 파일은 확장자가 .ogg이면 메타정보를 인식하지 못하고 확장자를 .opus로 해야 제대로 태그를 읽는 등 아직 혼란이 있다.
또한 OGG 컨테이너 스펙상 앨범아트를 지원하나#, 대부분의 프로그램에서 앨범 커버 사진 등 앨범 아트를 제대로 지원하지 못하고 있다. 이는 애플의 AAC 코덱을 쓰는 mp4 (mp4a) 컨테이너도 비슷하다. MP4 컨테이너는 iTunes를 제외하고는 LameXP 등 대부분의 오디오 인코딩 소프트웨어가 앨범 아트 처리가 안 되고 있다. 그래서 앨범 아트가 포함된 MP3 파일을 AAC나 Opus로 인코딩하면 보통 앨범 아트를 포함하고 있지 않다. 가장 대중화된 MP3 포맷의 경우 대부분의 인코더/플레이어 양쪽에서 다 앨범 아트를 원활하게 지원하고 있다.
Nintendo Switch는 사용 프로세서인 NVIDIA Tegra에 Opus 하드웨어 코덱이 내장되어 있으며, 이를 사용하는 대표적인 게임으로 슈퍼 스매시브라더스 얼티밋이 있다.

8. 음질 평가



8.1. 음성 (SILK)


극저 비트레이트(5~12kbps)에서는 음질이 매우 낮으며 비상용에 가깝다. 12kbps부터는 AMR-WB+와 EVS보다, 8kbps부터는 VoLTE용으로 사용되는 AMR-WB보다, 6kbps부터는 일반 음성 통화용 코덱으로 사용되는 AMR-NB, Speex, WMA Voice보다도 음질이 낮다.
반면 16~48kbps에서는 효율이 매우 높으며 개인적으로 용량을 줄인다면 24~32kbps 정도가 적당하다.

8.2. 음악 (CELT)


VBR > CVBR > CBR 순으로 효율이 높다.

8.2.1. 고음질 한계


본질적인 Opus 코덱의 목적은 실시간 인터넷 음성 통신과 같은 저 비트레이트 상황에서의 극한의 효율성을 추구하며 개발된 포맷이기 때문에, 고 비트레이트로 갈수록 음질의 효율성이 대단히 떨어진다. 쉽게 말해 AAC(LC) 320 Kbps와 Opus 320 Kbps의 음질을 기계적인 음원 분석으로 비교했을 때 AAC(LC) 320 Kbps 쪽이 조금 더 낫다는 것이다. 애초에 비트레이트가 올라가면 압축을 덜 한다는 뜻이므로, 기존 포맷으로도 좋은 음질을 내기 쉽다는 점에서 Opus 같은 최신 코덱의 필요성이 줄어들기 때문에 당연한 일이기도 하다.
문서 처음에 언급한 Opus 코덱의 우수성을 보여 주는 이미지에서도 128Kbps에서는 AACVorbis는 물론 MP3조차도 Opus를 거의 따라잡는 듯한 그래프를 보여주기도 한다. 물론 자세히 보면 MP3는 나머지 그래프들과 약간 갭이 있으므로 떨어지는 결과로 볼 수도 있다. hydrogenaud.io의 한 유저의 블라인드 테스트 결과를 보면 여기서도 128Kbps에서는 AAC(LC), Vorbis, Opus의 차이를 보기 힘들다. 링크된 테스트 결과의 요약을 보면 HE-AAC v2는 32kbps, HE-AAC는 64~80kbps, AAC LC는 80kbps 이상, Opus는 56kbps 이상에서 좋은 효율을 보인다고 한다. 여기서 MP3는 128Kbps에서도 차이나게 처지는 결과가 나왔다. 테스트 결과를 잘 보면 USAC라고 Opus보다 더한 괴물이 있는데, Unified Speech and Audio Coding라고 MPEG에서 MPEG-D part 3의 일환으로 개발한 가장 최신 코덱이라서 그렇다. 이 녀석에다 최신 기술을 더 끼얹어서 3D 오디오 규격(USAC-3D)으로 만든 게 바로 MPEG-H 3D Audio(또는 MPEG-H part 3)다.# 참고 링크 1, 2
특히, Opus 코덱의 알고리즘 상 임의적으로 원본에 없던 얕은 화이트 노이즈를 끼워넣는 방법으로 압축률을 높이고 음질을 최적화하는 특성이 있어서 음악 감상용으로는 적절하지 않다는 의견이 있으며, 16~20kHz 구간에서 이러한 특성이 크게 드러난다는 분석이 있다. FLAC에서도 비슷하게 LossyWAV라는 전처리 프로그램으로 노이즈를 삽입하여 용량을 드라마틱하게 감소시키는 방법이 존재한다. 물론 이 과정을 거친 음원은 파일 포맷만 FLAC이지 진짜 무손실 음원은 아니다. 이러한 특성은 160kbps 정도만 되어도 매우 약해지지만, 160kbps는 좀 애매한 비트레이트라서, 192kbps부터는 AAC에 밀려서 별로 사용되지 않는다. 384~512kbps 정도의 아주 높은 비트레이트에서도 매우 약하지만 마찬가지이다. 다만 이 화이트 노이즈가 사람의 귀로 인지 가능한 것인지는 논란이 있을 수 있으므로, ABX 테스트 등으로 간단하게 블라인드 테스트를 해 보고 판단하는 것이 좋다.
2019년 기준으로는 Opus는 48kbps 이상부터 좋은 효율을 보이며, 320~384kbps정도 되면 MP2조차도 음질이 좋다는 평을 받는다.

8.2.2. 대역폭 한계


기존의 MP3AAC 같은 오디오 코덱을 대체하기에는 문제가 될 수 있는 점이 또 하나가 있는데, 아무리 비트레이트를 높게 인코딩해도 20kHz 이상의 신호는 기록하지 않는다는 것이다.

8.2.2.1. 낙관론

다만, 유독 한국에서만 스펙트럼이 음질의 절대적인 척도로 해석되는 경향이 있는데, Hydrogenaudio 같은 외국 커뮤니티에서는 유의미한 블라인드 테스트 결과가 없는 스펙트럼 비교 사진은 무의미한 것으로 간주한다. 실제 블라인드 테스트 시에도 결국 가청 주파수 영역에서 원음과의 차이를 구별하는 것이니... 스펙트럼은 대역폭을 알아내는 데는 정말 좋지만 가청 주파수 내에서의 음질을 비교하는 데는 거의 무의미하다. 애초에 '''인간의 귀로 20 kHz 이상은 극히 일부의 사람을 제외하면 들을 수 없다.''' 하이파이니 뭐니 해도 인간은 가청 주파수 이내의 소리만 들을 수 있다. 괜히 20 kHz 이상을 '''초음파'''라고 하는 것이 아니다. 20 kHz 이상은 이미 특수목적의 영역이며, 초음파를 전문으로 다루기 위해서가 아니라면 반드시 기록되어야 할 필요는 없다. 그리고 앨범을 출시하는 스튜디오에 따라 20 kHz 이상은 커팅하는 곳이 생각보다 많다. 심지어 진짜 FLAC에서도 20~21 kHz 이상을 잘라먹은 게 심심찮게 있을 정도.
손실 코덱에서는 주파수 대역의 범위도 중요하지만 가청 주파수에서의 왜곡을 줄이는 것도 상당히 중요하다. 64kbps 정도쯤 되면 원본과의 음질 차이를 어느 정도 느낄 수 있으며, Opus 24kbps와 512kbps는 똑같이 20 kHz에서 자르지만 실제 비교 청취해 보면 음질 차이를 확실히 느낄 수 있다.

8.2.2.2. 비관론

그러나 무조건 자르는 건 문제가 될 수도 있다. 틴 버즈(Teen Buzz)에 대해 아는 사람은 알겠지만 나이가 어려서 21~22kHz까지 실제로 들을 수 있는 음감 인구는 생각보다 그렇게 드물지는 않다. 실제로 이들이 음감 관련 팁(LAME MP3 인코더 옵션 같은 것)을 올리는 경우 나이 든 성인이 같은 팁을 올리는 경우에 비해 17kHz 이상 고주파 보존에 극히 민감한 성향을 보인다. 위에서는 극히 일부라고 했고, 전체 인구 대비로는 맞는 말이지만, 그럼 그 일부는 무시해도 되느냐는 점에서 왼손잡이 문제와도 맥락이 닿는 측면이 있다. 기술적으로 따져봐도 24kHz까지는 지원이 그렇게 어렵지도 않다는 점, 스테레오 기준 512kbps라는 고 비트레이트도 20 kHz 등을 감안하면, 192kbps 이상 고 비트레이트부터는 24kHz까지 지원했어도 관련 불만의 반의 반도 안 나왔을 거다. Opus의 최적화 자체가 구조를 단순화한 측면이 크기 때문에 24kHz 초과는 구조적으로 지원 불가능할 가능성이 높다. 설령 가능하다 하더라도, 이제 와서 하면 320kbps 초과 MP3처럼 디코더 호환이 안 돼서 의미 없을 가능성이 거의 100%다.
물론 애초에 '''Opus가 Hi-Fi 음감용 코덱으로 개발된 것이 아니라는 점이 근본적인 원인'''이므로, 위 문제에 해당되는 사람은 VorbisAAC를 사용하는 것이 낫다. Vorbis 표준 인코더나 애플 AAC 인코더로 VBR 최고음질을 설정하면 스테레오 44.1kHz 기준 400~500kbps로 인코딩해 주는데, 이 정도면 고의로 악질적인 코너 케이스[4]를 던져줘도 웬만해선 무손실 PCM과 구별이 불가능할 것이다.

8.2.3. 모노 다운믹스 문제


libopus 1.2부터 발생하는 문제로 96kbps 이하의 스테레오로 인코딩된 파일을 모노 스피커에서 재생하면 음질이 저하될 수 있다. 주로 중저가 스마트폰이나 블루투스 스피커에서 발생하며 처음부터 모노로 인코딩하면 해결되는 문제이다.
Decoder Mono Downmix 부분 참고
예시 1

8.2.4. 저 비트레이트 한계


스테레오 기준 24kbps 정도의 아주 낮은 비트레이트에서는 고 비트레이트일 때보다 훨씬 불리하다. 음원, 음향 기기 등에 따라 다르지만 일반적으로 Winamp FhG 인코더로 인코딩한 HE-AAC v2보다 음질이 약간 낮은 편이다.
하지만 이 문제는 그리 언급되지 않는데 2018년 libopus 1.3 버전에서 뒤늦게 추가되었으며 네트워크 속도의 향상 및 저장용량의 증가로 해당 비트레이트를 사용할 필요가 거의 없기 때문이다.

8.3. 5.1/7.1채널


5.1채널 기준 96~1536kbps(압축률 1/48~1/3)까지 설정할 수 있는데, 192kbps 미만에서는 음질이 낮다고 여기기 쉽다.
7.1채널 기준 128~2048kbps(압축률 1/48~1/3)까지 설정할 수 있는데, 256kbps 미만에서는 음질이 낮다고 여기기 쉽다.
[1] Vorbis, Speex, FLAC을 만든 비영리 재단이다[2] 4/5.1채널 기준 각각 64/96kbps 미만인 경우[예시1] Vorbis는 음악용, Speex는 음성용[예시2] WMA. Voice는 음성용, Standard, Pro는 음악용[3] 다만 파일 탐색기 상에서만 인식이 안될 뿐이지 알송, 삼성 뮤직같은 앱 상에서는 멀쩡히 인식된다.[4] MP3 + 박수 음원처럼 손실 압축의 약점을 극단적으로 드러내는 최악의 경우