H.264는 마법입니다 (2016)

H.264 Is Magic (2016)

sidbala.com ▲ 502 댓글 166 ea016

요약

H.264는 사람 눈이 놓치는 정보와 프레임 사이의 중복을 버려 영상을 수천 배로 줄입니다.

시드 발라가 2016년에 쓴 해설 글입니다. 인터넷 동영상부터 블루레이, 스마트폰, 드론까지 두루 쓰이는 영상 압축 표준 H.264의 원리를 비유와 예시로 풀어 줍니다.

왜 중요한가

  • 압축이 없으면 1080p 60Hz 영상은 초당 약 370MB를 차지해, 50GB 블루레이에 2분 남짓만 들어갑니다.
  • 글이 다루는 개념은 H.264에만 쓰이지 않고 영상 압축 전반에 통합니다.

핵심 내용

  • 5초 분량 애플 홈페이지 예시에서 원본 약 1.2GB가 175KB가 되며, 같은 화면의 PNG 한 장(1,015KB)보다 작습니다.
  • 양자화(세밀한 디테일에 해당하는 고주파 성분을 잘라내는 과정)는 정보를 2%까지 줄여도 차이가 거의 드러나지 않습니다.
  • 크로마 서브샘플링(색 정보의 해상도를 낮추는 기법)은 눈이 색 차이에 둔한 점을 이용해 대역폭을 약 절반으로 줄입니다.
  • 움직임 보상은 화면을 16×16 블록으로 나눠, 다른 프레임에서 블록이 옮겨 간 방향과 거리만 기록합니다.
  • 마지막으로 엔트로피 부호화(데이터 손실 없이 중복을 줄이는 방식)가 남은 반복을 한 번 더 압축합니다.

HN 반응

  • x264(H.264 소프트웨어 인코더) 개발에 참여한 이용자의 경험담에 이어, 같은 비트레이트에서 x264가 하드웨어 인코더보다 화질이 훨씬 낫다는 의견이 이어졌습니다.
  • 후속 코덱 AV1이 이미 주류라는 주장과, 하드웨어 디코딩을 지원하지 않는 기기가 많아 아직 이르다는 반론이 맞섰습니다.

댓글

30개 표시 · 전체 166개
  1. tgtweak HN

    2011년경 제이슨 개럿-글레이저(DarkShikari라는 이름으로 더 유명합니다)와 함께 x264가 더 많은 코어를 활용하도록 하는 패치(슬라이스 스레드 방식 룩어헤드)를 작업하는 기쁨을 누렸습니다. 당시 그는 소니와 함께 플레이스테이션 게임 스트리밍 서비스를 최적화하고 있었고, 이 패치는 프레임을 더 많은 코어에 나눠 병렬 작업을 늘리고, 타일 단위 작업이 다시 하나의 프레임으로 합쳐진 뒤의 스케줄링과 수렴을 더 똑똑하게 처리해서, 코어 수가 같은 시스템에서도 인코딩 지연(게임 스트리밍에서는 치명적입니다)을 낮출 가능성이 있었습니다. 그때 저희는 트랜스코딩에 물리 코어 48개짜리 서버를 쓰고 있었는데, 단일 NUMA 공간에서는 당시 꽤 드문 사양이라 이걸 테스트해 볼 인스턴스가 따로 없었습니다. 그래서 스레드 수를 아주 높게 잡고 인코딩을 몇 번 돌려 플레임그래프를 추적했고, (직접 컴파일한 버전에서 뽑은) 계측 프로파일을 보내 핵심 작업이 어디서 이뤄지는지 보여 줬습니다. 그는 그걸 바탕으로 모션 추정 코드를 최적화했는데, 첫 시도부터 CPU 사용량이 완벽하게 고르게 퍼졌고 인코딩 속도도 약 24코어까지 올라갔습니다(그전에는 8코어 근처에서 막혔고 코어 하나만 뜨겁게 돌았던 걸로 기억합니다). 덕분에 이 프로젝트가 얼마나 특이하고 복잡한지, 특히 모션 추정, 양자화, 지각 압축 같은 것들이 얼마나 저수준이고 고급 기술인지 엿볼 수 있었습니다. 우리가 거의 신경 쓰지도 않는 물건 안에 영리한 기법이 그렇게나 많이 들어 있다는 게 지금도 마법 같습니다. 그 사람들은 그때도 이미 x265를 작업하고 있었습니다.

    그의 블로그 Diary of an x264 developer도 정말 재미있게 읽었습니다. 그 코드베이스가 얼마나 대단했는지 알고 싶은 분께 추천합니다.

    [1] https://github.com/mstorsjo/x264/blob/master/doc/threads.txt

    (수정: 2012년에 소니가 인수한 곳은 Gaikai였고, 이것이 PlayStation Now의 기반이 되었습니다.)

  2. drmpeg HN

    인코딩에 CPU를 여러 개 쓰는 건 역사가 아주 깁니다. 1994년 DirecTV용으로 나온 초기 C-Cube MPEG-1/MPEG-2 실시간 인코더는 칩 8개를 병렬로 돌려 704x480을 인코딩했습니다(프로세서가 60MHz밖에 안 돼서 어쩔 수 없었습니다). 칩마다 이미지의 슬라이스 하나를 맡아 인코딩했고, 칩 사이에 보조 버스를 두어 복원된 영상을 주고받게 해서 모션 벡터가 칩 간 이미지 경계를 넘나들 수 있게 했습니다.

    다음은 VME 버스 개발 보드 사진입니다. 칩 10개를 병렬로 지원하도록 보드 두 장을 샌드위치처럼 겹쳤습니다(사진에는 한 장만 나와 있습니다).

    https://www.w6rz.net/scorpio.jpg

    지상파 디지털 TV(ATSC)용 최초의 실시간 HDTV 인코더는 해리스가 IBM 인코더 칩으로 만들었습니다. 1920x1080을 인코딩하는 데 칩 6개가 필요했습니다. IBM 칩에는 보조 버스가 없어서 모션 벡터가 칩 담당 이미지 경계 안에 갇혀 있는 게 눈에 보일 정도였습니다(이 경우 타일 6개가 아래처럼 배열되어 있었습니다).

      -------------------------
      |       |       |       |
      |   1   |   2   |   3   |
      |       |       |       |
      -------------------------
      |       |       |       |
      |   4   |   5   |   6   |
      |       |       |       |
      -------------------------
    
  3. tgtweak HN

    맞아요, 그 무렵 인텔이 막 Quick Sync 기술을 내놓았고, 몇몇 업체는 인텔 CPU 4개를 PCIe 보드에 얹어서 영상 인코딩에 쓰기도 했어요! Matrox도 맞춤형 프로세서와 보드로 영상 압축과 편집·합성을 하면서 이 시장에서 꽤 큰 몫을 차지하고 있었고요.

    "전력 효율"이 더 좋긴 했지만, 엔비디아와 인텔의 하드웨어 솔루션은 같은 비트레이트에서 최종 화질이 영 아쉬웠어요. 같은 h264 프로파일 레벨에서도 x264는 같은 비트레이트로 훨씬 좋은 화질을 뽑아내는 것 같았거든요. 요즘 av1과 hevc 인코더에도 x264의 설계 요소가 많이 남아 있고, 심지어 그대로 포팅된 것도 있어요.

  4. rufo HN

    저는 그 무렵 DVD 트랜스코딩을 많이 했는데, 새로 맞춘 Sandy Bridge PC에서 Quick Sync를 쓸 생각에 들떴던 기억이 납니다. 그런데 빠르긴 해도 화질이 _끔찍_했습니다. 이전 메인 Plex 서버(아마 Haswell이었을 겁니다)에서도 다시 써 봤지만, x264에 비하면 여전히 트랜스코딩에 쓸 수준이 아니었습니다.

    엔비디아는 20xx 시리즈 카드에 넣은 인코더부터, 인텔은 Quick Sync 6~7세대는 되어서야 하드웨어 인코더가 드디어 적당한 비트레이트에서 괜찮은 화질을 내는 수준에 이르렀습니다. 그래도 시간과 전기를 쓸 여유만 있다면 x264(그리고 x265도!)가 압도적으로 앞섭니다. 격차가 여전히 그만큼 큽니다.

  5. wil421 HN

    Quick Sync 기억나요. Sandy Bridge CPU에서 핸드브레이크로 돌려 보고 속도에 감탄했는데, 영상을 보고 나서야 알았죠!

    당시 새 맥으로도 테스트해 봤는데, i7-920보다 몇 분밖에 안 뒤처졌지만 화질은 쓰레기였어요.

  6. drmpeg HN

    오늘 Intel Quick Sync를 처음 알았습니다. 고맙습니다. 저는 2011년에 영상 압축 일을 접어서 오랫동안 소식에 어두웠습니다.

    https://en.wikipedia.org/wiki/Intel_Quick_Sync_Video

  7. lostlogin HN

    CPU로 트랜스코딩을 몇 번 돌려 보다가 같은 작업을 QuickSync로 해 보면 정말 마법 같아요.

  8. mcoliver HN

    정말 멋지네요. 저도 비슷한 방식으로 플레임그래프를 보면서 openutv를 최적화했습니다. UTV는 openrv의 포크이고, openrv는 상용 RV의 구버전에서 나온 겁니다. 다른 많은 프로그램처럼 ffmpeg를 쓰고, 일부 포맷에는 자체 리더와 라이터도 씁니다. 덕분에 하드웨어 가속으로 8k@60fps를 버터처럼 부드럽게 재생할 수 있게 됐습니다. 아직 영상/이미지 분야에 계시다면 UTV에 대한 의견을 듣고 싶습니다. openutv.com

  9. pwython HN
  10. qmr HN

    다 좋은 말이지만, 제 TV 프런트엔드용으로 AV1 하드웨어 디코딩이 되는 50달러짜리 중고 NUC나 파이 같은 걸 살 수 있게 되면 그때 알려 주세요.

  11. kccqzy HN

    인텔은 Tiger Lake부터 AV1 하드웨어 디코더를 기본 지원합니다. 꽤 오래된 얘기죠. Tiger Lake 중고 NUC를 살 수 있습니다. 새 제품일 때도 1115G4나 1135G7이 들어간 NUC는 비싸지 않았습니다. 와이파이가 고장 난 걸 20달러에 찾았어요. https://www.ebay.com/itm/366767313411 지금 바로 살 수 있습니다.

  12. ssl-3 HN

    이 기능이 있는 컴퓨터(NUC11TNKi3)를 20달러에 사려고 링크에 들어갔는데, 입찰만 할 수 있고 즉시 구매는 안 되던데요.

    보통은 200달러쯤에 팔리는 것 같습니다. https://www.ebay.com/sch/i.html?_nkw=NUC11TNKi3&LH_Sold=1

  13. NavinF HN

    긴 광케이블 HDMI 선을 사서 TV를 PC GPU에 연결하는 게 더 싸요. 저는 그렇게 씁니다. 압축 없는 최고 화질(보통 4K 120Hz나 8K 60Hz)이 나오고, 지연이 전혀 없어서 영상 말고 다른 용도로도 쓸 수 있고, 박스를 하나 더 관리할 필요도 없죠.

  14. cheeze HN

    저도 해 봤는데 정말 골치 아팠습니다. TV 하나에 사용자 한 명인 작은 집에서나 통하지, 그 이상이면 힘듭니다.

    벽 속으로 HDMI 케이블을 넣는 것도 고역이고, 동시 사용에도 제약이 있고(아내가 TV를 보는 동안 저는 게임을 못 합니다), PC를 원격으로 제어하는 것도 귀찮고, 대부분의 스트리밍 앱은 PC에서 4K를 지원하지 않고(NUC도 마찬가지입니다), 더 말할 수도 있습니다.

    제 생각엔 아내 테스트를 통과하기는커녕 근처에도 못 갑니다.

  15. Dylan16807 HN

    NUC가 소프트웨어 디코딩하느라 전력을 2와트 더 쓰는 게 정말 신경 쓰이세요?

  16. ender341341 HN

    AV1 디코더가 없는 미디어 기기는 대체로 고해상도 AV1을 실시간으로 디코딩하는 데 문제가 있어서, 버퍼링으로 멈추거나 프레임이 떨어지곤 합니다.

  17. Dylan16807 HN

    네, 그런데 "NUC"라고 적혀 있으면 그런 문제는 없을 것 같은데요.

  18. Wowfunhappy HN

    AV1을 소프트웨어로 디코딩하는 게 얼마나 무거운지 심각하게 과소평가하고 계신 것 같은데요!

    NUC가 4K AV1을 소프트웨어로 실시간 디코딩할 수 있는지조차 저는 확신이 안 서요.

  19. Dylan16807 HN

    13년 된 CPU로 4K AV1을 디코딩하는 데 코어 2개가 필요해요. 그렇게 나쁘지 않아요.

    4K 60fps는 어쩌면 안 될 수도 있지만, 그런 콘텐츠는 많지 않잖아요.

  20. HumblyTossed HN

    그리고 10년쯤 더 지나면 이를 지원하는 하드웨어가 충분해져서 주류가 되겠죠.

  21. Dylan16807 HN

    AV1이요? 이미 주류예요. 지원하는 하드웨어도 많고, 하드웨어 지원이 필요 없는 경우도 많잖아요.

  22. alt227 HN

    주류라고요? 가장 인기 있는 하드웨어 스트리밍 기기(엔비디아 쉴드)는 지원조차 안 하는데, 그걸 주류라고 부르지는 못하겠네요.

  23. judge2020 HN

    엔비디아 쉴드는 어떤 면에서도 가장 인기 있는 기기가 못 됩니다. 로쿠가 시장의 43%, 아마존이 35%를 차지하고 있어요.

    서드파티 기기와 TV 내장형(아래 인용 참고)을 나눠서 볼 수 있다면 흥미롭겠지만, 기사의 지표는 실제 소비자 사용을 반영하는 듯합니다. 요즘은 대부분의 소비자가 TV를 살 때 딸려 오는 걸 그냥 쓰니까요.

    이는 통합된 접근 방식을 반영하며 가정 내 기기를 하나 더 줄여 줍니다. 실제로 확산되고 있어서, 스트리밍 미디어 플레이어를 주 시청 기기로 꼽은 사람은 34%에 불과했습니다. 반면 스마트 TV를 꼽은 사람은 56%였습니다.

    https://www.cepro.com/news/roku-amazon-lead-streaming-media-player-market/140172/

  24. alt227 HN

    로쿠를 핵심 비교 대상으로 드시다니 흥미롭네요. AV1을 지원하는 건 Roku Ultra뿐이고, 그것도 DASH로만 됩니다.

    https://developer.roku.com/dev/docs/media

    그러니 로쿠가 시장의 43%를 차지한다고 하신다면, 저는 오히려 AV1 지원이 그리 널리 퍼지지 않았다는 제 주장을 뒷받침하는 거라고 봅니다.

  25. judge2020 HN

    맞는 말씀입니다. 아마존은 2021년 Fire TV Stick 4k Max 1세대[0]부터 AV1을 지원해서 조금 나아 보이는데, 가격이 35달러로 초저가인 "Fire TV Stick HD Alexa Voice Remote (2024)"만 예외인 듯합니다.

    그래도 시장에서는 극히 일부일 뿐이지만, 로열티 없는* 코덱을 더 많이 쓸수록 좋은 것 아니겠습니까.

    0: https://developer.amazon.com/docs/device-specs/device-specifications-fire-tv-streaming-media-player.html?v=ftvstick4kmax#

    *: https://arstechnica.com/gadgets/2026/03/av1s-open-royalty-free-promise-in-question-as-dolby-sues-snapchat-over-codec/

  26. Rockjodd HN

    엔비디아 쉴드는 어떤 면에서도 가장 인기 있는 기기가 못 됩니다.

    이건 너무 틀렸어요..

    Jellyfin 블로그에서: https://jellywatch.app/blog/jellyfin-nvidia-shield-tv-setup-truehd-dolby-vision-2026

    NVIDIA Shield TV(Pro와 Tube)는 2026년 현재 자체 호스팅 미디어 서버용으로 가장 좋은 안드로이드 TV 스트리밍 기기로 널리 평가받습니다. Apple TV 4K는 UI 완성도에서, Onn 4K Pro는 가격에서 앞서지만, Shield는 다른 대부분의 기기가 따라올 수 없는 점에서 앞섭니다. 바로 무손실 오디오 비트스트림 패스스루입니다. TrueHD, TrueHD Atmos, DTS-HD MA, DTS:X까지 전부 손대지 않고 AV 리시버로 넘겨줍니다.

    여기에 H.264, H.265, VP9, AV1 하드웨어 디코딩이 더해지고, 8년 된 Tegra X1+ 칩인데도 여전히 드라이버 업데이트를 받는 Shield는 진정한 "설정하고 잊어버리는" Jellyfin 클라이언트입니다.

    Nvidia shield는 그냥 잘 되는 기기이고, 오디오를 건드리지 않고 제 사운드 리시버로 넘겨주고, 저는 매일 즐겁게 쓰고 있어요.

    EDIT: <서식 고치려고 하는 중>

  27. john_strinlai HN

    jellyfin 인용문은 "가장 좋은"이라고 하고 있는데, 이건 judge2020이 말한 "가장 인기 있는"과는 의미가 상당히 달라요.

  28. sanfus_grimmer HN

    엔비디아는 2019년 이후로 새 쉴드 모델을 내놓지 않았습니다. 현재 Apple TV, Google TV, Roku, Fire TV, Onn 모델은 모두 AV1을 지원합니다.

  29. fishgoesblub HN

    저는 그 오래된 엔비디아 쉴드를 "가장 인기 있는" 스트리밍 기기라고는 안 보겠습니다.

  30. GeekyBear HN

    미안하지만, 유튜브가 기기에 하드웨어 지원이 있든 없든 AV1을 강제하기 시작한 순간부터 Firestick은 열 때문에 성능이 떨어지기 시작했어요.

Hacker News에서 보기 ↗