HDR -> SDR 변환 (H264(x264), 1080p) ⇦ 사용하지 말 것

by JKyle posted Jun 25, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

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

샤나인코더 FFmpeg v4.2.1.146 패치에 추가된 zscale 필터와 기존의 tonemap 필터를 이용해 톤매핑을 제대로 한 프리셋을 새로 구성했습니다.

 

아래 본문의 프리셋은 더 이상 사용하지 마시고 HDR -> SDR 변환 (H264(x264), FHD, 톤매핑)의 프리셋을 다운로드해 주십시오.

 

=============================================================================

 

HDR => SDR 트랜스코딩은 상당히 까다로운 작업 중 하나입니다.

 

HDR => SDR은 색 공간 자체를 HDR의 BT.2020에서 그것의 subset인 BT.709(=sRGB)로 맞춰줘야 하기 때문에 원본에서 표현하는 색들 중 BT.709의 표현 범위 밖에 있는 것들을 어떻게 처리해야 하나를 생각해야 합니다. 그냥 무시하고 강제로 인코딩하는 방법도 있겠지만 그렇게 되면 원본에 있는 범위 밖 색상들(out-of-range colors) 이 BT.709의 어떤 색상으로 매핑될지 장담할 수 없습니다. 그냥 가장 가까운 경계선의 색상으로 바뀌는 거 아니냐고 생각하실 수 있겠지만 그렇지는 않고 임의로 변환됩니다.

 

 

그래서 나온 해결책이 두 가지인데,

 

1) Target media의 LUT(Look-Up Table)가 있는 경우 lut3d 필터와 LUT를 이용해 변환한다. ( 참고: https://developers.google.com/media/vp9/hdr-encoding/ )

 

2) LUT가 없는 일반적인 경우 FFmpeg의 zscale과 tonemap 필터를 사용해 변환한다. ( 참고: https://stevens.li/guides/video/converting-hdr-to-sdr-with-ffmpeg/ )

 

 

1)의 단점은 특정 SDR 장비에 맞는 LUT를 따로 생성하거나 찾아야 하기 때문에 일반적인 방법이 아니라는 것이고,

2)는 일단 tonemap 필터 자체가 시간이 많이 걸린다는 단점 외에 샤나에서는 사용할 수 없다는 단점도 있습니다. 샤나에는 tonemap, zscale 필터가 없기 때문이죠.

 

 

그래서 제가 아는 한 현재 샤나에서는 scale 필터를 이용한 color matrix 변환을 이용해야 하는데 앞에 언급한 바와 같이 색 열화를 감수할 수밖에 없습니다. (샤나가 빨리 업데이트되어야 하는 또 하나의 이유입니다.)

 

물론 이때 Bit depth 8로 픽셀 포맷 변경은 당연히 해야 합니다.

 

 

이를 반영해 만든 프리셋입니다.

 

MKV HDR to SDR x264 HE-AAC 44.1 56k.xml

 

파일 형식은 MP4보다 코덱 선택이 까다롭지 않은 MKV, 비디오 코덱은 x264(H264), 오디오는 44.1 kHz 샘플레이트의 64kbps 비트레이트를 가진 스테레오 HE-AAC로 인코딩합니다.

 

 

<x264 추가 옵션에 관해>

 

잘 아시겠지만 F8을 눌러보면 맨 밑부분에 'x264 설정(읽기 전용)' 부분이 나옵니다. 이것은 [빠른 설정(F6)]의 [코덱 설정] 버튼을 누르면 나오는 추가 옵션 중 맨 밑의 '고급 설정 사용' 박스에 체크하고 [고급 설정] 버튼을 눌러 나오는 [x264 고급 설정] 창에서 설정한 값들입니다. 매개변수 설정창에서는 변경이 불가능하니 꼭 [빠른 설정]에서 원하는 적절한 값으로 변경해 주십시오.

 

 

비디오 필터 매개변수에 대한 설명은 아래와 같습니다. (오디오 필터 설명 생략)

 

=============================================================================

 

scale=1920:-1:flags=spline:out_color_matrix=bt709

        // Output 영상의 color matrix를 SDR 용인 BT.709로

        // 해상도 변경을 하지 않을 경우 앞의 1920 값을 -1로

 

setsar=1/1,shanasubtitle=0

        // 레터박스 사용 안 함, 샤나 자막 사용 안 함

 

=============================================================================

 

 

인코딩 옵션 설정에 대한 설명

 

=============================================================================

 

 -f mkv

 

 -c:v libx264 -profile:v high -level auto -crf 18.0 -preset veryslow -tune:v none

 

 -pix_fmt yuv420p

        // 픽셀 포맷은 yuv420p

 

 -color_primaries bt709 -color_trc bt709 -colorspace bt709

        // color primaries, color transfer charateristics, color matrix

        // SDR HD에 맞는 BT.709에 맞춰 설정

 

 -c:a libfdk_aac -b:a 64k -ac 2 -fdkprofile he

        // 오디오 설정

 

 -sn -map_metadata -1 -map_chapters -1 -metadata creation_time=now

        // 자막 없음, 메타데이터 복사 안 함, 챕터 정보 없음, 인코딩 시간을 파일 생성 시간으로

 

 -metadata:s:v:0 language=kor

        // 비디오의 언어를 한국어로. 영어는 eng, 일본어는 jpn, 중국어는 chi

 

 -metadata:s:a:0 language=kor

        // 오디오의 언어를 한국어로

 

=============================================================================

 

이상입니다.

 

 

사족을 달자면, 제가 만든 프리셋이긴 하지만 웬만하면 샤나에서는 HDR -> SDR 인코딩은 안 하시는 게 좋습니다. 업데이트되어 tonemap과 zscale 필터가 포함되기까지는요. :)