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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

이 내용을 여기 올려야 하나 잠시 고민했습니다만, 그래도 샤나와 연관이 있는 것이어서 올립니다.

 

 

프리셋 자료실에 올라온 HDR->SDR 변환 프리셋은 샤나의 한계 때문에 tonemapzscale 필터를 이용하지 못한 반쪽자리입니다. 원본의 색 정보를 제대로 살리지 못해 인코딩 결과물이 형편없죠.

 

HDR의 기본 색공간인 BT.2020은 SDR HDTV의 기본 색공간 BT.709(=sRGB)을 포함하는 데다 BT.709가 표현하지 못하는 많은 색상을 더 표현할 수 있기 때문에 HDR을 SDR로 변환할 때는 바로 그 BT.709의 범위 밖(out-of-range) 색상들을 어떻게 처리하냐가 최대 관건입니다.

 

이에 대해 가장 무난한 해법은 바로 tonemap 필터를 이용해 범위 밖 색상들을 범위 안으로 적절하게 mapping하는 것이고, zscale 필터는 tonemap 필터의 결과물을 사용가능한 형식으로 변환하는 동시에 자체적으로 색공간 변환을 수행하기 때문에 필요한 것입니다.

 

자세한 사항은 아래 문서를 참고하시면 됩니다.

 

https://stevens.li/guides/video/converting-hdr-to-sdr-with-ffmpeg/

 

 

 

위의 권고안을 바탕으로 다음의 FFmpeg 명령어를 구성해서 DOS 환경에서 실행했습니다.

 


 

ffmpeg.exe -analyzeduration 100M -probesize 50M -i LG_New_York_HDR_UHD_4K_Demo.OriginalHDR.ts -vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=1920:-1:f=spline36:t=bt709:m=bt709,format=yuv420p -c:v libx264 -profile:v high -crf 18.0 -preset veryslow -x264opts deblock=1,1:cabac:keyint=150:min-keyint=15:bframes=3:b-adapt=2:weightb:weightp=2:ref=4:scenecut=50:ipratio=1.4:pbratio=1.3:qcomp=0.50:rc-lookahead=30:mbtree:aq-mode=2:aq-strength=0.8:chroma-me:merange=24:me=umh:subme=10:direct=auto:trellis=2:psy-rd=0.30,0:psy:no-dct-decimate:no-fast-pskip:mixed-refs:partitions=all -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:a aac -b:a 128k -ac 2 -map_metadata -1 -metadata creation_time=now -metadata:s:v:0 language=kor -metadata:s:a:0 language=kor -y LG_New_York_HDR_UHD_4K_Demo.TranscodedSDR.tonemapped.1080p.mp4

 


 

LG_New_York_HDR_UHD_4K_Demo.OriginalHDR.ts가 input file이고 LG_New_York_HDR_UHD_4K_Demo.TranscodedSDR.tonemapped.1080p.mp4가 output file입니다.

 

대강 설명하자면,

 


 

-analyzeduration 100M -probesize 50M

    // 전역 헤더가 없는 ts 파일에서 스트림 정보를 파악하기 위해 미리 앞부분을 읽도록 하는 옵션

 

 

-vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=1920:-1:f=spline36:t=bt709:m=bt709,format=yuv420p

    // 색공간 변환과 감마 변환(transfer characteristics), 해상도 변환을 수행하는 옵션 설정

 

 

-c:v libx264 -profile:v high -crf 18.0 -preset veryslow -x264opts deblock=1,1:cabac:keyint=150:min-keyint=15:bframes=3:b-adapt=2:weightb:weightp=2:ref=4:scenecut=50:ipratio=1.4:pbratio=1.3:qcomp=0.50:rc-lookahead=30:mbtree:aq-mode=2:aq-strength=0.8:chroma-me:merange=24:me=umh:subme=10:direct=auto:trellis=2:psy-rd=0.30,0:psy:no-dct-decimate:no-fast-pskip:mixed-refs:partitions=all

    // 비디오 코덱(x264) 관련 설정

 

 

-pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709

    // 픽셀 형식 및 색공간 관련 정보 -> 전역 metadata로 기록됨

 

 

-c:a aac -b:a 128k -ac 2

    // 실행되는 FFmpeg 바이너리 파일이 libfdk-aac를 포함시키지 않고 컴파일되어

    // libfdk_aac 인코더가 없기 때문에 aac 인코더로 대체

 


 

나머지 부분은 metadata 관련이므로 설명을 생략하겠습니다.

 

 

 

이 명령어를 실행한 결과로 나온 동영상의 MediaInfo는 아래와 같습니다.

 

<MediaInfo>

 

LG_New_York_HDR_UHD_4K_Demo.TranscodedSDR.tonemapped.1080p_mediainfo.png

 

Metadata에서 보듯이 인코딩 결과 BT.709를 색공간으로 하고 YUV420p의 bit depth 8비트를 가진 SDR 동영상으로 변환되었음을 알 수 있습니다.

 

 

 

변환된 동영상이 원본인 HDR 영상과 색감에서 얼마나 차이를 보이는지 보기 위해 스크린샷 비교를 하면 다음과 같습니다.

 

<HDR 동영상의 스크린샷>

 

LG_New_York_HDR_UHD_4K_Demo.OriginalHDR.jpg

 

 

<SDR 동영상의 스크린샷>

 

LG_New_York_HDR_UHD_4K_Demo.TranscodedSDR.tonemapped.1080p.png

 

 

비록 푸른색과 초록색, 특히 푸른색 계열 색들이 좀 flatten됐지만 사실상 둘 간의 색감 차이가 거의 없는 것을 확인할 수 있습니다.

 

이는 샤나에서 scale 필터만을 이용해 SDR 인코딩한 다음 영상의 스크린샷과 비교해 보면 더욱 확연하게 드러납니다.

 

 

<샤나로 인코딩한 SDR 동영상의 스크린샷>

 

LG_New_York_HDR_UHD_4K_Demo.TranscodedSDR.jpg

 

 

따라서 HDR -> SDR 변환에 tonemap, zscale 필터가 절대적인 역할을 함을 알 수 있습니다.

 

 

원본과 FFmpeg로 인코딩한 동영상 파일은 아래 링크에서 다운받으실 수 있습니다.

 

<원본 HDR 동영상>

https://drive.google.com/open?id=14W5lqskWkn6aFUmSLrZRljPd4VuVbQlS (448MB)

 

<인코딩한 SDR 동영상>

https://drive.google.com/open?id=1t0K7Yq4KOdouopWDwxyELvFpIvVPuwud (124MB)

 

 

샤나인코더가 FFmpeg을 빨리 업그레이드하길 바라며 이상 마칩니다.

 

샤나인코더 5.0부터 shanatonemap 이라는 커스텀 필터를 추가하여 톤매핑을 적용한 HDR ⇒ SDR 인코딩이 가능해졌습니다.

자세한 사항은 HDR -> SDR 변환 (H264(x264), FHD, 톤매핑) (4.9.0.6 이상만 해당) 프리셋 게시물을 참고하시기 바랍니다.

TAG •
Facebook Twitter Pinterest Kakao
  • ?
    해피해피 2018.06.26 18:15
    sSTSs 님 저때문에 고생하셨네요
    장마진다니 더위좀 가시면 좋을텐데
    야구는 취소되고 ㅠㅠ
  • ?
    JKyle 2018.06.27 06:05
    안 그래도 관심 가는 이슈라 덕분에 저도 재미있는 공부를 했습니다. 건강하세요.
  • ?
    JKyle 2018.07.15 23:47

    미리 컴파일된 FFmpeg 바이너리는 아래 사이트에서 구하실 수 있습니다. (본문의 예제에서 사용한 바이너리임.)

     

    https://ffmpeg.zeranoe.com/builds/

     

    (단, 이 바이너리는 fdk-aac가 포함돼 있지 않습니다.)

     

    본인이 직접 build하고 싶으시다면 DOS 스크립트로 만들어 놓은 Media Autobuild Suite을 이용하시는 게 가장 속편한 방법입니다.

     

    https://github.com/jb-alvarado/media-autobuild_suite

     

    단, 상당히 오랜 시간이 걸리며 중간에 여러 요인 때문에 build에 실패하는 경우가 많습니다.

  • ?
    하나비 2018.12.01 23:03
    요즘 4k hdr 영상들을 자주 보는 데 hdr 미지원 tv라 너무 어둡게 나오거나 영상 필터를 사용해도 색 왜곡이 나타나 불만이었는데, 꿀팁 정말 감사합니다
  • ?
    weatherhelper 2019.07.28 03:04
    좋은 글 너무 감사합니다.

    1080p가 아닌 4k로 하려면
    zscale=1920를 zscale=3840 으로 하면 될까요?

    날이 무척 더운데, 시원한 여름 보내시길 바랍니다.
  • ?
    JKyle 2019.07.28 12:08
    네. 1920을 3840으로 치환하시면 됩니다.
  • ?

     

    22년에 마지막 올리신 프리셋과 HEVC 코덱(8-10비트)를 사용하면서도 보면은 인물 부분은 괜찮음, 어둠(조명) 부분이 깨져서요

     

    JKYLE 님글 계속 보다보니 샤나보다 명령어가 더 괜찮겠다 싶은데 영상(영화)이 10비트니 10비트로도 방법을 알아보려 하는데

     

    캡처_2023_11_12_14_28_15_406.png

    캡처_2023_11_12_15_07_36_103.png

    -이 부분은 기존 샤나 명령어를 찾아보니 high→high 10 으로 하면될듯, 근데 yuv420 8B 를 10b 로 할려면 가장 낮은 yuv420p10le high 10

    해야하는데 저게 맞으면 yuv420p10le=high 10 따라서 420이 낮은 일반 10비트인게 맞겠네요? (맞는것 같지만,궁금)

     

    암튼 어느부분을 바꾸면 될까요? 또 aac 얘기나오니 오디오 안걸들고(스트림복사) 할수도 있으려나요? (해결o)

     


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 소리를 4가지로 분리하는 샤나보컬리무버 프로그램을 소개합니다. Rina 2024.03.22 20659 6
공지 샤나인코더 통합 검색 기능 개선(샤나인코더 우측 상단에 있는 검색창을 사용해 보세요.) Rina 2021.09.30 34570 2
공지 자유게시판에서는 자유롭게 글을 작성할 수 있지만 다음과 같은 내용은 삭제돼요 Rina 2020.03.18 30697 5
공지 일반 [필독] 질문 전에 반드시 읽으세요!!! 3 file JKyle 2019.09.16 52922 8
공지 일반 [알림] 질문 먹튀하지 마시기 바랍니다 => 본문 변경 금지 24 JKyle 2018.10.12 50586 18
1348 스트림복사 합치기 whycallme 2018.07.07 1407 0
1347 프로그램 개선이 가능할까요? 1 쌀밥 2018.07.07 626 0
1346 유튜브로 동영상 업로드시 스마트 폰에서만 소리깨짐(꼭 부탁합니다.) 5 은막 2018.07.06 3239 0
1345 3.73기가를 1기가 보다 조금 안되게 줄이려면 어떻게 해야 할까요? 1 file 럭키세븐 2018.07.05 1122 0
1344 멀티쓰레드 설정시 궁금한점 1 file 고딩샛별 2018.07.05 2547 0
1343 유튜브에 영상을 올리면 스마트폰에서 소리가 잘 안나오네요 1 은막 2018.07.04 1123 0
1342 다중 cpu와 멀티코어는 징원이 안돼는지요?, 그리고 해상도....궁금한점 1 고딩샛별 2018.07.03 4388 0
1341 고급설정 질문입니다 2 해피해피 2018.07.02 868 0
1340 HEVC 코덱(H.265) 에서 AVC1(H.264) 로 2차 인코딩 하려고합니다. 2 님덕내탓 2018.07.01 2555 0
1339 아이폰 4K로 찍은 영상 인코딩 문의 1 file 시버 2018.07.01 1751 0
1338 자체 자막을 만들 시 자막이 열화됩니다. 2 헝가리무곡 2018.06.30 660 0
1337 sk브로드밴드 셋톱박스로 영화를 보는데 1 윤ㅊ패 2018.06.29 918 0
1336 태그 질문입니다 2 file 해피해피 2018.06.29 1366 0
1335 구간설정 일괄 적용하는 방법이 있나요? 1 아크라톤 2018.06.29 960 0
1334 질문드립니다 박물관방화범 2018.06.29 731 0
1333 코딩 설정을 구했는데 이걸로 프리셋 만들수 있을까요? 2 태극랍스타 2018.06.29 3596 0
1332 올레 스마트 플레이용 프리셋 요청합니다. 킨타쿤테 2018.06.28 2889 0
1331 CFR 고정 프레임 레이트 뭐죠? 1 쩌는사냐인코더 2018.06.28 4674 0
1330 프리셋 속도 질문입니다 2 해피해피 2018.06.27 1171 0
» 정보 tonemap, zscale 필터를 이용한 HDR->SDR 변환 (FFmpeg CLI) 7 file JKyle 2018.06.26 4640 0
Board Pagination Prev 1 ... 94 95 96 97 98 99 100 101 102 103 ... 166 Next
/ 166