조회 수 14560 추천 수 3 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

점차 대세가 돼가고 있는 HDR 영상에 대한 것을 소개합니다.

 

1. 기본적인 원리

■ 10비트 샘플 크기와 HDR 영상

색공간과 Bit Depth에서 볼 수 있듯, 8비트 영상과 10비트 영상을 구분하는 기준은 샘플(각 픽셀의 채널당 데이터 조각)크기(bit depth)입니다. 8비트 영상의 경우 각 채널당 2의 8제곱 단계, 즉 256 단계까지 값을 가질 수 있지만 10비트 영상은 채널당 8비트 영상의 네 배인 1024 단계(=2의 10제곱)까지 값을 가질 수 있어 표현의 범위가 넓어집니다. 이것은 영상 신호의 동적 범위(DR, dynamic range)를 확대할 수 있기 때문에 기존의 SDR(standard dynamic range)보다 표현 범위가 넓어진 HDR(high dynamic range) 영상의 기반이 됩니다. 일반적으로, 모든 10비트 영상이 HDR 영상인 것은 아니지만 HDR 영상이 되기 위해서는 샘플의 크기가 최소한 10비트는 되어야 합니다.

 

<HDR10 영상 스크린샷>

 

<톤매핑이 제대로 처리되지 않을 경우 재생기에서 보이는 HDR10 영상>

 

■ 색공간

HDR 영상을 이해하기 위해서는 영상 표현의 기반이 되는 색공간(color space)에 대한 것을 간략하게나마 알아야 합니다. 색공간에 대한 국제적인 표준안은 UN의 ITU(International Telecommunication Union) 중 무선통신 담당 섹터인 ITU-R에서 제정하는 권고안에 따르고 있는데, TV 관련 기술의 발달에 따라 다음과 같은 권고안들이 표준이 되고 있습니다.

① Rec. 601 (BT.601)

SDTV를 위한 색공간 규정

② Rec. 709 (BT.709)

HDTV를 위한 색공간 규정. Rec. 601과 거의 동일. sRGB 색공간과 동일.

 

<CIE 1931 x, y 색상 도표상의 BT.709 색공간>

 

③ Rec. 2020 (BT.2020)

UHDTV를 위한 색공간 규정. BT.709보다 약 211% 색 표현 범위가 넓어짐.

<CIE 1931 x, y 색상 도표상의 BT.2020 색공간>

 

<BT.709와 BT.2020 색공간 비교>

 

④ Rec. 2100 (BT.2100)

HDR 영상을 위한 규정. 색공간 자체는 BT.2020과 동일하나 감마 변환[transfer function]은 HDR 용으로 새롭게 규정함.

 

결론적으로, 현재 우리가 인코딩할 때 신경 써야 할 색공간은 BT.709와 BT.2020 두 가지뿐입니다. 단지 BT.2020은 HDR 영상과 연관돼 있어서 추가적인 설정에 좀 더 신경을 써야 하는 것이 다릅니다.

 

■ 변환 함수(transfer function)

전자기적 용어로, 입력값에 대해 기기의 출력값을 상정하는 함수입니다. 그냥 간단하게 밝기를 적절하게 변환하기 위한 '감마 변환 함수'라고 생각하면 됩니다. 변환 특성(transfer characteristics)이라고도 불립니다.

 

SDR 영상을 위한 변환 함수는 색공간 이름과 동일하게 BT.601, BT.709로 불리고 인코딩 시 별로 신경 쓸 것이 없지만, HDR 영상을 위한 인코딩을 위해서는 다음의 두 가지 변환 함수를 기억할 필요가 있습니다.

 

① PQ(Perceptual Quantizer)

SMPTE라는 기관에 의해 제안된 SMPTE ST 2084로, BT.2020 색공간을 기반으로 10,000 cd/m2까지의 밝기를 지원합니다. x265에서는 smpte2084. 주로 사용되는 변환 함수

 

② HLG(Hybrid Log-Gamma)

BBC와 NHK에 의해 제안된 것으로, 기존 SDR의 감마 곡선과 로그 곡선의 혼합 형태. SDR 디스플레이에서도 사용할 수 있다는 장점이 있습니다. x265에서는 arib-std-b67.

 

 

■ HDR 표준들

HDR 영상이라는 용어 자체가 모호한 부분이 있기 때문에 다음과 같은 표준안들이 사용되고 있습니다.

 

① HDR10

미국의 CTA(Consumer Technology Association)에서 제안된 표준안으로, 10비트 bit depth + Rec. 2020 색공간 + SMPTE ST 2084 (PQ) 변환 함수 사용의 조합입니다. 거기에 추가적으로 비디오 스트림 내에 SEI(supplemental enhancement information) 메시지로 SMPTE ST 2086으로 제정된 "Mastering Display Color Volume" 정적 메타데이터 - MaxFALL(Maximum Frame Average Light Level)과 MaxCLL(Maximum Content Light Level)과 같은 - 를 삽입해야 합니다. 공개 표준안으로, 가장 광범위하게 채택되고 있습니다.

 

② HDR10+

삼성과 아마존 비디오에서 제안한 표준안으로, 기존의 HDR10에 SMPTE ST 2086 정적 메타데이터와 더불어 삼성이 제안한 SMPTE ST 2094-40 동적 메타데이터를 추가할 것을 규정한 안입니다. 라이센스 비용을 지불할 필요가 없는 표준안으로, 삼성, 파나소닉, 20세기 폭스 사가 설립한 HDR10+ Alliance가 관리하고 있습니다.

 

③ 돌비 비전(Dolby Vision)

돌비가 제안한 유료 포맷입니다. 기존의 다른 표준안에 비해 12비트 지원 및 더 높은 최대 밝기 지원(10,000 cd/m2)의 장점이 있습니다. 돌비가 제안한 SMPTE ST 2094-10 동적 메타데이터를 추가합니다. LG, TCL, Vizio 등이 지원합니다.

 

④ SL-HDR1

유럽 회사들에 의해 제안된 표준안으로, PQ 대신 HLG를 변환 함수로 사용합니다. SDR 컨텐츠와 하위 호환성을 가지고 있고, SMPTE ST 2086 정적 메타데이터 외에 SMPTE ST 2094-20, 2094-30 동적 메타데이터를 추가합니다.

 

HDR 영상에 대한 보다 자세한 내용은 해당 위키피디어 문서를 참고하십시오.

 

2. HDR 인코딩의 방법

■ HDR 원본을 HDR 동영상으로 인코딩

원본이 HDR인 동영상을 HDR 동영상(대부분 HDR10)으로 재인코딩할 때는 다음의 몇 가지 사항을 주의해야 합니다.

 

① 픽셀 포맷 관련

현재 배포되는 HDR 동영상들은 대부분 10비트의 샘플 크기를 갖고 있기 때문에 비압축 데이터 포맷이 10비트임을 명시하고 이를 처리할 수 있는 프로파일을 선택해야 합니다.

 

FFmpeg의 경우 -pix_fmt yuv420p10le 일반 옵션으로 10비트 픽셀 포맷을 명시하고, x264의 경우 high10, x265의 경우 main10을 프로파일로 선택합니다.

 

② 색공간, 변환 함수 관련 (HDR10)

출력 영상의 정확한 색공간 정보(primaries와 color matrix)와 변환 함수(transfer characteristics)를 명시해야 합니다.

 

FFmpeg의 경우 -color_primaries bt2020 -colorspace bt2020nc -color_trc smpte2084 일반 옵션을 주고, x264와 x265 모두 비디오 스트림의 VUI(video usability info) 메타데이터로 각각 해당하는 항목을 명시합니다.

 

x265의 경우 아래의 고유 옵션 설정을 추가:

 

-x265-params colorprim=bt2020:colormatrix=bt2020nc:transfer=smpte2084

 

③ 정적 메타데이터를 비디오 스트림에 삽입 (HDR10, SMPTE ST 2086)

HDR10을 지원하는 TV 재생을 위해 재생에 필요한 정적 메타데이터를 비디오 스트림에 삽입할 수 있도록 인코더에 매개변수로 넣어 줍니다.

 

x264는 이 부분에 대한 지원이 부족하여 주로 x265를 이용합니다. -x265-paramsmaster-display, max-cll 옵션 등으로 설정합니다. (x265 매뉴얼의 이 부분이 부분 참조)

 

샤나인코더에서는 HDR -> HDR(HDR10) 인코딩 (HEVC(x265), 1080p) 프리셋을 이용해서 작업을 할 수 있습니다.

 

■ HDR 원본을 SDR 동영상으로 인코딩

원본이 HDR인 동영상을 8비트 SDR 영상으로 인코딩할 수도 있는데, 이때 주의할 점은 원본의 풍부한 색감을 비교적 정확하게 보존하는 것입니다. 이를 위해서는 톤매핑(tone-mapping)이라는 과정을 거쳐야 하는데, FFmpeg에서는 tonemap 필터와 zscale 필터로 이를 수행할 수 있습니다. 이때 픽셀 포맷 및 색공간, 변환 함수 관련 정보를 8비트 영상에 맞추어서 주어야 함은 물론입니다.

 

FFmpeg에서 구체적으로 적용하는 방법은 tonemap, zscale 필터를 이용한 HDR->SDR 변환 (FFmpeg CLI)를 참고하시기 바랍니다.

 

샤나인코더는 4.9.0.6 버전 이후 빠른 설정에서 HDR ⇒ SDR 변환에 필수적인 톤매핑 기능을 제공하고 있으므로 프리셋과 함께 비교적 쉽게 인코딩을 진행할 수 있습니다.

 

 

□ 10비트 인코딩에 관한 몇 가지 코멘트

가끔 원본이 8비트인데 색공간 변환(톤매핑) 없이 10비트로 인코딩된 경우를 볼 수 있습니다. (SDR인 블루레이를 립하여 x265 인코딩을 하는 많은 릴 그룹들이 현재 그렇게 하고 있습니다.)

 

이런 10비트 인코딩이 8비트 인코딩보다 더 우수한 화질의 동영상을 만들어내느냐 하는 의문이 있을 수 있겠는데, 결과적으로 말씀드리자면 인코더에 따라 다르다고 할 수 있겠습니다. 인코더 내의 inloop 내장 필터가 강하게 적용되는 x265나 aomenc(AV1)의 경우 (특히 banding과 관련해서) 유의미한 차이가 나온다고 많이 보고되고 있습니다. (자세한 내용은 이 게시물 참고)

 

8비트 SDR 원본을 10비트로 인코딩할 때 발생하는 문제는 범용성색감입니다. 이런 식으로 인코딩된 영상은 컴퓨터로 감상한다면 상관없지만 HDR 지원이 안 되는 HDTV로는 10비트 영상을 재생할 수 없으므로 감상이 불가능합니다. 그리고 HDR HDTV로 감상하더라도 HDR처럼 생생한 색감을 볼 수는 없습니다. 그냥 SDR인 원본을 10비트로만 인코딩한 것뿐이니까요.

 

HDR 지원이 안 되는 HDTV로 감상하기 위해서는 8비트로 재인코딩해야 하는데, 이 경우 픽셀 포맷 변환과 경우에 따라 톤매핑을 거쳐야 하므로 번거로운 추가 작업이 되는 것은 물론 또다른 화질 저하가 초래됩니다.

이 글을 추천한 사람
Prosecol bluedove Rina
Facebook Twitter Pinterest Kakao
  • ?
    태양 2021.01.31 01:29
    좋은 정보 감사합니다. 10비트가 뭔 필요있나 그러고 있었는데 점점 발전하네요
  • ?
    MuR 2022.01.23 01:36
    찾아 헤메던 정보네요 ㅠㅠㅎ
  • ?
    Prosecol 2022.11.30 13:06
    좋은 정보 한국어로 풀어서 설명해주셔서 정말 감사합니다. 인코딩에 관해서 여기서 정말 많이 알아갑니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수 추천 수
53 HEVC 코덱 설정->튜닝 옵션별 각 화질 비교 4 file 바봉이 2020.02.05 18491 0
52 H264(AMF), HEVC(AMF) 옵션 도움말 1 JKyle 2020.02.03 9219 0
51 H264(NVENC), HEVC(NVENC) 옵션 도움말 1 JKyle 2020.02.03 11458 0
50 필터 적용 사례: 로고/워터마크 제거 1 JKyle 2020.01.31 8887 2
» HDR 영상과 10비트 영상 3 JKyle 2020.01.29 14560 3
48 색공간과 Bit Depth 4 JKyle 2020.01.28 7817 2
47 샤나인코더 영상 사이즈 변경 옵션을 통한 FFmpeg 필터의 기초 이해 4 JKyle 2020.01.27 11534 3
46 샤나인코더의 H264 설정과 FFmpeg의 x264 설정 이해 8 JKyle 2020.01.27 27665 2
45 FFmpeg 명령어 구조와 샤나인코더 작동 방식 이해 JKyle 2020.01.26 5468 2
44 [인포그래픽] 인코딩 작업 흐름과 자막 작업 1 JKyle 2020.01.25 3384 0
43 [인포그래픽] 인코딩 작업의 흐름도 1 JKyle 2020.01.25 6347 2
42 [필독] 비디오 코덱과 기본 용어 (H.264, HEVC) 2 JKyle 2020.01.25 28163 7
41 샤나인코더로 움짤 만들기 4 file JKyle 2019.09.08 7536 0
40 기록 보기에서 Consider increasing the value for the 'analyzeduration' and 'probesize' options 내용이 있을 때 해결법 4 Rina 2019.09.04 4189 1
39 SRT SMI 자막 인코딩 이용시 한글 깨짐 자막변환 방법 file 나그네3 2019.03.14 30236 1
38 webm VP9 멀티스레드 활성화하는 방법, 속도 향상시키는 방법 마소리스 2018.09.25 6428 0
37 "비트레이트를 원본보다 높게 주면 원본보다 퀄리티가 나아질 수 있다"는 주장에 대해 6 JKyle 2018.09.19 18885 0
36 SSIM, PSNR로 측정한 NVENC 인코딩 4 file JKyle 2018.09.09 4183 0
35 인코딩된 파일의 PSNR, SSIM 값 계산하기 file JKyle 2018.09.05 3553 1
34 8비트 원본을 10비트로 인코딩하면 8비트로 인코딩할 때보다 화질이 더 낫다? 5 JKyle 2018.09.04 8764 0
Board Pagination Prev 1 2 3 4 Next
/ 4