조회 수 9361 추천 수 0 댓글 7
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

샤나인코더 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 필터가 포함되기까지는요. :)

 

Facebook Twitter Pinterest Kakao
  • ?
    해피해피 2018.06.25 12:25
    프리셋받아서 인코딩해보니 오류나네요 ㅠㅠ
  • ?
    JKyle 2018.06.25 14:26
    colorspace 필터가 잘 작동하지 않네요. 할 수 없이 colorspace를 빼고 scale에서 변환하는 방법을 써서 다시 변경했습니다.
  • ?
    해피해피 2018.06.25 15:16
    와 정말 감사합니다 못할줄알고 포기하고있었는데 ㅎㅎ
    이렇게 해결해주시니 어떻게 감사를 드려야할지 너무 감사해요
  • ?
    JKyle 2018.06.25 15:39

    위의 프리셋을 응용하여 4K HDR UHD 동영상(http://4kmedia.org/ 에서 받은 4K HDR UHD 동영상 샘플인 'LG New York HDR UHD 4K Demo')을 FHD(1080p) SDR로 트랜스코딩해 본 결과입니다.

    (영상에 관한 설명은 http://4kmedia.org/lg-new-york-hdr-uhd-4k-demo/ 에서)

     

    <원본(448MB, ts 형식)>

    https://drive.google.com/open?id=14W5lqskWkn6aFUmSLrZRljPd4VuVbQlS

     

    <원본 캡쳐(2MB, jpg 형식)>

     

    <FHD SDR(101MB, mkv 형식)>

    https://drive.google.com/open?id=1uA9VQSTXWVt8R1Nrc-q0oRwZVTbilvCO

     

    <FHD SDR 캡쳐(494kB, jpg 형식)>

     

    둘을 비교해 보면 아시겠지만 SDR 영상이 마치 Gamma correction을 하지 않은 모니터에서 보는 것처럼 상당히 어둡게 보이고 푸른 계열 색이 많이 씻겨져 나간 것같이 보이실 겁니다. 이는 적절한 tonemapping 하지 않고 HDR을 SDR로 그냥 색공간을 변경했기 때문에 나타나는 당연한 현상입니다. 그렇기 때문에 tonemap, zscale 필터가 샤나에 반영될 때까지 기다리시는 게 낫다고 말씀드린 것입니다.

     

    그래서 컴퓨터에서 이 영상을 보시려면 시간이 좀 걸리더라도 같은 HDR로 인코딩해서 팟플레이어에서 [메뉴] -> [영상] -> [픽셀 셰이더] 설정에서 'HDR SMPTE ST 2084/2086 자동 보정'을 체크해 필터를 적용해 보시는 게 훨씬 나을 듯합니다.

  • ?
    해피해피 2018.06.25 16:36
    아 그렇군요 감사해요
    언제나 빠르고 상세한답변 해주시는 sSTSs 님 복받으실거에요
    좋은하루되세요
  • ?
    Prophet 2018.07.11 16:38

    이렇게 하는 것은 소용이 없고, 수출의 색채는 여전히 잘못된 것이다.

     

    (기계 번역)

  • ?
    JKyle 2018.07.15 23:40
    That's why I don't recommend this preset.

    Although the most recent version of the Shana Encoder (v 4.9.0.1) comes with the tonemap filter, it still lacks the zscale filter, which is indispensable for using the tonemap filter in the HDR/SDR conversion.

    I'm planning to update this preset as soon as the zscale filter becomes available in the Shana Encoder. Meanwhile, you can refer to my posting on the HDR -> SDR conversion using a pre-built FFmpeg deployment: https://shana.pe.kr/shanaencoder_tip/49794