이 릴들은 무슨 숨겨진 옵션을 사용하는지 비트레이트 2000~3000 사이로
영상을 고화질로 뽑으시네요 깍두기 현상도 없고 tigole릴은 깍두기가 지던데
highcal이랑 Hn1Dr2 릴은 매우 깔끔하네요
어떤 인코더를 쓰는지 궁금하네요 혹시 아시는분 있으신가요
식물 옆에 어두운 부분도 깍두기 없고 보기 좋네요 그리고 사람 라인?을 따라서
노이즈 같은것도 없고 부러운 능력자들이여
밑에는 제가 사용하는 프리셋인데 위에처럼 비슷하게 인코딩 하려면
무엇을 고쳐야 할까요?
노골적으로 말씀드리자면, 잘못된 인코딩입니다. 절대 그대로 따라하지 마십시오.
이유는 가장 먼저, 8비트 영상을 10비트로 인코딩해서입니다. 왜 8비트 영상의 10비트 인코딩이 잘못된 것인지는 제가 사용 팁 게시판에 올린 포스팅을 참고하십시오.
(지금부터 설명드리는 내용은 x265 매뉴얼 페이지를 참고하셔야 이해가 되실 겁니다.)
인코딩 옵션을 보면 colorprim=2 / transfer=2 / colormatrix=2 로 돼 있죠?이건 대개 SDR 영상을 인코더(인코딩한 사람)가 인코딩을 할 때 색공간 설정을 따로 하지 않았을 때 주어지는 값입니다. (원본이 HDR 영상이라면 보통 따로 세팅을 하는 게 올바른 방법이고, 그렇게 되면 colorprim은 9, transfer는 16, colormatrix는 9가 됩니다.) 즉, 원본이 SDR 영상이라는 겁니다. 그런 상황에서 인코더는 HEVC Main 10 프로파일로 10비트 인코딩을 했습니다. 이건 올바르지 못한 인코딩 세팅입니다.
그리고 인코딩 세팅을 볼 때 가장 먼저 보셔야 할 부분이 rc입니다. 이건 인코더가 퀄리티 모드로 했는지, 비트레이트 모드로 했는지 알려 줍니다. 퀄리티 모드로 했다면 crf로 나올 것이고 비트레이트 모드로 했다면 abr로 나옵니다. 올려주신 내용을 보니 인코더는 퀄리티 모드로 crf 값을 23.3으로 주고 인코딩했네요. 이 부분은 잘못됐다고 할 수는 없습니다.
me=3, 즉 star이고 subme=3, lookahead-slices=4, ref=4, rc-lookahead=25, rect=1 등등인 것으로 보아 인코더는 (본인이 일부러 따로 그렇게 설정한 것이 아니라면) slow 프리셋을 사용했을 가능성이 매우 매우 큽니다. 이 부분은 x265의 프리셋에 대한 설명 부분을 참고하시면 알 수 있습니다.
프리셋과 다르게 인코더가 따로 설정한 부분은 min-keyint=24와 ctu=32 정도입니다.
최소 키프레임 간격(min-keyint)과 최대 키프레임 간격(keyint)은 설정을 따로 하지 않으면 보통 25와 250이 됩니다. 인코더는 그중 min-keyint를 24로 낮췄습니다. 아마 keyint도 같이 250으로 일부러 따로 세팅했을지도 모릅니다. 이것이 가지는 효과는 약간의 화질 향상입니다만 압축률은 약간 떨어집니다.
최대 코딩 유닛 크기(ctu)는 기본값인 64에서 32로 낮췄습니다. 이것은 인코딩 효율(압축률)은 조금 떨어뜨리더라도 인코딩 속도를 조금 향상시키는 옵션입니다. 프리셋을 slow로 해놓고 이런 설정을 하다니, 인코더는 아마 의미를 모르고 이 값을 설정한 듯합니다. 의미를 알았다면 느린 인코딩 속도를 그나마 개선해 보려고 설정한 것일 수도 있겠습니다. 하지만 효율과 화질에는 부정적인 영향을 끼치므로 그럴 바에 애초에 프리셋을 slow로 선택한 의미가 무색해집니다.
결국 인코더의 인코딩 매개변수 설정 중 영상 쪽은 아래와 같습니다.
-c:v libx265 -profile:v main10 -preset slow -crf 23.3 -x265-params min-keyint=24:keyint=250:ctu=32 (문제가 되는 부분을 빨간색으로 표시했습니다.)
즉, 자신이 고급 옵션을 일일이 설정했을 가능성은 0에 가깝다는 말입니다.
인코딩에 대해 잘 이해하지 못하면 흔히 범하는 실수가, 결과가 좋아 보이는 영상의 인코딩 옵션을 보고 고급 옵션 설정으로 그대로 따라하고자 한다는 것입니다. 이것은 두 가지 점에서 문제가 있는데,
1) 원본의 인코더는 자신이 일일이 고급 설정을 하지 않았다는 것이고,
2) 원본의 인코딩 세팅은 그 원본에만 유효하고 다른 영상에는 해당 사항이 없다
는 것입니다. 1)의 경우는 프리셋이 대부분의 설정을 해주기 때문에 굳이 일일이 설정할 필요가 없고, 2)의 경우는 상당히 중요한데, 모든 인코딩은 반드시 원본에 맞게 설정하는 것이 가장 좋다는 것입니다.
2)를 도와주는 것이 미리 고급 설정 옵션들을 적절하게 묶어둔 프리셋입니다. 따라서 프리셋의 의미만 잘 파악하고 잘 사용하면 대부분의 인코딩은 고급 옵션 설정을 굳이 따로 할 필요가 없습니다.
이제 왜 이 인코딩이 잘못된 것인지 이해하셨을 겁니다.
참고로, Mediainfo로 봤을 때 이렇게 인코딩 옵션이 드러나는 것은 HEVC 계열에서는 x265뿐입니다. 하드웨어 인코더들은 그런 설정값들이 메타데이터에 나타나지 않습니다.
그리고 화질에 대해서 말씀드리자면, 솔직히 FHD 영상들은 원본만 괜찮다면 비트레이트 1300~1500 사이에서도 원본과 거의 비슷한 쨍쨍한 고화질로 뽑을 수 있습니다. 원본에서 문제가 될 수 있는 부분 - 암부나 디테일을 살려야 할 부분, blocking이나 banding이 염려되는 부분 등 - 을 미리 구간 설정해서 퀄리티 모드로 crf 값을 정해 인코딩해 본 다음 최적의 crf 값을 찾아서 인코딩하면 그 정도의 비트레이트로도 충분히 감당이 됩니다.
문제가 되는 것은 시간입니다. crf 인코딩은 최종 비트레이트가 어떻게 나올지 모르기 때문에 컨트롤이 힘듭니다. '최적의 crf 값'은 원본마다, 그리고 필터 적용 여부와, 본인이 따로 설정한 고급 옵션 설정값마다 다르게 되고, 이를 찾아내기 위해서 미리 잘라서 시험해 보는 과정이 도움이 되는 것입니다. 그 과정에서 x265의 느린 인코딩 시간, 잘못된 crf 설정으로 인한 시행착오, 최적의 crf 값을 찾아내기 위한 반복되는 인코딩들 등이 시간을 잡아먹기 때문에 x265 인코딩이 힘들게 되는 거죠. 그렇지만 제대로만 한다면 정말 H264와는 비교할 수 없이 효율적으로 압축하여 용량을 절약할 수 있는 게 x265입니다.