조회 수 14812 추천 수 0 댓글 12
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

샤나의 [빠른 설정] 메뉴에는 없지만 샤나에서도 HEVC(x265)로 2패스 인코딩을 하는 방법이 있습니다. 간단하게 말씀드리면, 매개변수 설정 창에서 x265의 고급 옵션에 'pass=1'(첫 번째 패스), 'pass=2'(두 번째 패스) 를 각각 추가하는 것입니다.

 

자세한 설명은 아래 적습니다.

 

<주의 사항>

반드시 샤나인코더가 관리자 권한이 필요 없는 path에 설치돼 있어야 합니다. 'C:\Program Files' 같은 곳은 접근시 관리자 권한이 필요하므로 샤나인코더 설치시 기본으로 설정돼 있는 'C:\ShanaEncoder' 같이 관리자 권한이 필요 없는 곳에 설치돼 있는지 확인해 주십시오.

 

이는 인코딩 첫 번째 패스 단계에서 두 번째 패스 인코딩에 필요한 정보 파일들을 샤나인코더가 설치돼 있는 곳에 쓰게 되므로 관리자 권한이 없다면 첫 번째 패스 인코딩이 실패하게 되기 때문입니다.

 

<배경 설명>

 

2패스 인코딩을 하는 이유는 비트레이트 모드에서 프레임 간 비트레이트 배분(rate control)을 보다 효율적으로 하기 위해서입니다.

 

[빠른 설정]에서 HEVC(x265) 비트레이트 모드를 선택하면 기본적으로 1패스 인코딩으로 주어진 비트레이트를 평균값으로 맞추는 인코딩을 합니다. (ABR 1-pass encoding) 이때 많은 경우 프레임과 프레임 간 정보 차이로 인한 비트레이트 차등 배분이 적절하게 이루어지기 힘들기 때문에 2패스 인코딩으로 이를 개선하는 것입니다. 첫 번째 패스에서는 영상에 대한 정보를 파악해서 적절한 qp(quantization parameter)를 계산하고, 두 번째 패스에서는 이 정보를 활용하여 '제대로' 인코딩하는 것입니다. 따라서 '이론상으로는' 비트레이트 모드 인코딩에서 1패스보다 화질이 개선됩니다. (물론 원본에 따라 실제로는 다를 수 있습니다.)

 

주의할 점은, 패스를 두 번 걸게 되므로 인코딩 시간이 최대 두 배까지 늘어난다는 것입니다. 타겟 용량을 확보할 필요가 있는 상황에서 화질을 개선하기 원하신다면 선택을 권장합니다.

 

2패스 인코딩은 퀄리티 모드에서는 불필요합니다. 퀄리티 모드 자체가 빠르게 2패스 인코딩을 하는 식이기 때문입니다.

 

참고로, rate control에 대한 자세한 설명은 아래 포스팅을 참조하시기 바랍니다.

 

https://slhck.info/video/2017/03/01/rate-control.html

 

<설정 방법>

 

샤나에서 'HEVC'이라고 통칭되는 HEVC(x265) 코덱에 비트레이트 모드로 설정돼 있는 어떤 프리셋이라도 상관 없습니다. 첫 번째와 두 번째 패스 모두 패스만 다를 뿐 같은 설정을 적용할 것을 권장합니다.

 

1. 첫 번째 패스

 

해당 프리셋을 불러온 후 F8을 눌러 매개변수 창을 띄웁니다.

 

[인코딩 설정] 섹션의 -x265-params 부분에 :pass=1을 추가하고 확인 (앞의 ':'는 구분자. -x265-params가 없다면 ' -x265-params pass=1' 추가)

 

Shana_HEVC(x265)_2pass_1st_pass_setting.png

 

 

[기본 모드]라면 바로 인코딩 실행. [개별 모드]라면 변경된 프리셋을 적용한 후 인코딩 실행.

 

첫 번째 패스 인코딩 실행의 결과로 (임시) output 동영상 파일과 두 번째 패스 인코딩을 위한 정보 파일(x265_2pass.log, x265_2pass.log.cutree(인코딩 설정에 따라 cutree 파일은 생성되지 않을 수 있음.))들이 샤나인코더가 설치된 경로에 생성됩니다. (물론 output 동영상 파일들은 샤나인코더 내에서 설정한 경로에 생성됩니다.)

 

Shana_HEVC(x265)_2pass_1st_pass_result1_file.png

(첫 번째 패스 인코딩 후 생성되는 동영상 파일)

 

Shana_HEVC(x265)_2pass_1st_pass_result2_stats_log.png

 

(첫 번째 패스 인코딩 후 샤나인코더가 설치된 경로에 생성되는 정보 파일들)

 

 

2. 두 번째(최종) 패스

 

역시 F8을 눌러 [인코딩 설정] 섹션에서 'pass=1'을 'pass=2'로 변경

 

Shana_HEVC(x265)_2pass_2nd_pass_setting.png

 

[기본 모드]라면 바로 인코딩 실행. [개별 모드]라면 변경된 프리셋을 적용한 후 인코딩 실행.

 

두 번째 패스 인코딩의 결과로 최종 output 동영상 파일이 생성됩니다.

 

Shana_HEVC(x265)_2pass_2nd_pass_result_file.png

(두 번째 패스 인코딩 후 최종 동영상 파일 생성)

 

<스크린샷 비교>

 

두 output 동영상 파일의 화질 비교를 위해 동일한 프레임을 캡쳐한 스크린샷들입니다.

 

screenshot_1st_pass.png

(첫 번째 패스 output 동영상)

 

screenshot_2nd_pass.png

(두 번째 패스 output 동영상)

 

미세하게나마 최종 결과물의 화질이 약간 더 낫습니다. 깍두기 현상 및 고르지 못한 계조가 개선된 것을 보실 수 있을 겁니다. 아마 비트레이트를 더 낮게 준다면 둘 사이 차이가 커질 것으로 짐작됩니다.

 

<덧붙이는 말씀>

최종 output 동영상의 메타데이터를 미디어인포로 확인해 보면 아시겠지만, 2패스 인코딩을 한다고 해도 메타데이터의 '인코딩 설정' 부분에는 rate control mode가 2pass가 아닌 abr로 기록됩니다. (H264(x264)는 이 부분이 2pass로 기록됩니다.) FFmpeg로 해도 같은 결과가 나오는 걸 보니 이는 샤나의 문제가 아닌 x265 자체의 문제인 것으로 보입니다.

 

Shana_HEVC(x265)_2pass_2nd_pass_result_file_mediainfo.png

 

직접 확인해 보시면 아시겠지만 패스를 두 번 걸어서 이루어지는 화질 향상은 경우에 따라 아주 미미합니다. 이 정도 화질 개선을 위해 시간을 두 배나 들여야 되나 하는 자괴감(?)이 들 수도 있습니다. 어쩌면 최종 용량을 알 수는 없어도 그냥 퀄리티 모드로 한 번에 인코딩을 끝내는 게 낫겠다 싶을 수도 있습니다. 늘 그렇지만, 어디까지나 본인 판단하에 알아서 적용하시기 바랍니다.

 

첫 번째 패스 인코딩을 할 때 시간 절약을 위해 오디오 스트림의 인코딩 부분은 생략하고 두 번째 패스 인코딩 시 오디오 인코딩을 병행하는 방법으로 시간을 조금 절약할 수 있습니다. 방법은 쉬우니 알아서 하시길...

 

그리고 인코딩이 끝난 후 샤나인코더 설치 경로에 생성된 정보 파일들(x265_2pass.log, x265_2pass.log.cutree)은 삭제하셔서 디스크 공간을 절약하십시오.

 

참고로, FFmpeg로 직접 2패스 인코딩을 하고 싶으시다면 https://trac.ffmpeg.org/wiki/Encode/H.265 이 문서를 참조하시기 바랍니다.

Facebook Twitter Pinterest Kakao
  • ?
    유토짱 2018.08.28 14:34
    다른 분들은 hw인코딩이 질이 떨어진다고 하는데 개인적으로는, HW인코딩이 속도로 모든것을 보상한다고 봅니다. 화질도 거의 차이 없이 나오는것 같습니다.

    만약, 저화질을 최대한 살리면서,작업하는 경우가 아니라 고화질영상(2k,4k)를 가지고 작업할때는 생성물이 거의 차이가 안나는것 같습니다.
  • ?
    JKyle 2018.08.28 15:29

    고해상도에서는 확실히 하드웨어 인코딩이 진가를 발휘하죠.

     

    저도 속도 때문에 하드웨어 인코딩을 주로 사용하는데 중독성(?)이 꽤 강해서 손 떼기가 힘들어요. ㅎㅎ 화질도 설정 세팅 좀 하면 웬만하면 괜찮게 나오구요.

     

    근데 한 가지 난제가, 비트레이트를 HEVC(x265)보다 대략 1.5~2배 이상 높게 주지 않으면 HEVC(NVENC)는 blurring/color banding/blocking이 심해지더군요. 특히나 film grain 필터가 적용된 영상이나 노이즈를 보존해야 하는 영상의 경우 NVENC는 취약해 보입니다. 아무래도 노이즈와 디테일에 관한 tolerance가 x265보다 훨씬 취약해서 blurring/color banding/blocking 문제가 x265보다 훨씬 더 심하게 나타나는 것 같습니다. 안 그래도 디노이징 효과 때문에 해상도 낮은 영상에서는 x265도 까이고 있는데 말이죠. ㅋㅋㅋ (여기 참조) 아무튼 이 문제에 관한 한 NVENC로는 포기하더라도 어떻게 하면 x265만으로라도 x264를 대체할 수 있을까, 요즘 이 문제를 고민 중입니다.

  • ?
    유토짱 2018.08.28 16:01
    x265가 아직 안되는 기기들 때문에, h264를 쓰는데, x265가 흠잡을데 없이 선명하더군요.

    저같은 경우 여러테스트 결과 h264 hw인코딩할때, film,인터레이싱 같은 필터 안쓰고,
    bit rate를 원본 영상의 평균 비트레이트값으로 주고, -c:v h264_nvenc -preset ll 또는 llhq정도를 주니까
    원본과 파일사이즈가 비슷하게 나오더라구요.

    저는 파일크기를 줄이는 것보다 화질을 선택해서 그렇게 하고 있습니다.
  • ?
    JKyle 2018.08.28 16:21

    ll(low latency) 프리셋들은 버퍼 크기가 제한 있는 기기나 최대 비트레이트를 제한하고 싶을 때 쓰는 프리셋인 걸로 아는데, 보관용으로 쓸 때는 high quality 2 pass인 'slow'를 쓰는 게 가장 좋지 않을까요? 그나저나 h264_nvenc로 인코딩한 영상들은 프리셋을 slow로 잡아도 전부 ref 값들이 1로 나오더군요. 이거 인코딩 효율이 너무 낮아지는 건 아닌지...

     

    저는 HEVC 애호자라 hevc_nvenc를 slow 프리셋으로 하고 rc 모드와 rc-lookahead 값, 그리고 aq 설정을 custom setting 해서 주로 씁니다. 그렇게 할 수 있는 한 최대 화질로 세팅해서 인코딩해도 인코더의 한계인지 비트레이트를 좀 줄였다 싶으면 여지 없이 문제가 조금씩 나타납니다. H264도 써볼까 하다가도 아무래도 효율 때문에 정이 안 가서리... ㅋㅋㅋ

  • ?
    유토짱 2018.08.28 16:48
    ffmpeg -i test.mp4 -vf "hwdownload,format=nv12, stereo3d=sbsl:abl, pad=2880:2880:(ow-iw)/2:(oh-ih)/2:0x101010"
    -c:v h264_nvenc -preset ll -profile:v high
    -b:v 15.4M -r 30 -rc-lookahead 16 -qmin 10 -qmax 23 -refs 4 -c:a copy out.mp4

    refs 문제는 위처럼도 해봤는데, 화질에 큰차이가 없고 -rc-lookahead 16 -qmin 10 -qmax 23 -refs 4 이런부분들이 속도저하가 일어나서
    빼버리고 사용하고 있습니다.

    저도 slow로 한번해서 비교해 봐야겠네요.

    저는 latency 가 느린 모바일 장비들 때문에, 아직 hevc를 안해보고 있는데, 앞으로는 hevc 시대가 오겠죠.
  • ?
    JKyle 2018.08.28 17:51

    아, 제가 말씀드린 H264의 ref 값은 DPB(Decoded Picture Buffer), 즉 P-frame이 참고하는 이전 프레임 갯수를 말하는 겁니다. x264에서는 "FFmpeg -c:v libx264 -refs=4" 나 "-x264-params ref=4", 이런 식으로, 샤나에서는 H264의 고급 설정에서 'Reference Frames'에서 설정하는 값이죠. 이 값이 클수록 인코딩 효율은 높아져 같은 화질에 비트레이트는 줄일 수 있는, 즉 같은 비트레이트에 화질을 향상할 수 있는 반면 필요로 하는 버퍼 크기가 커져 로우 버퍼 기기에서는 재생이 불가능해질 수 있는 단점이 있죠. h264_nvenc에서는 설정 옵션이 없는 것 같은데요? 프리셋을 slow로 하면 latency 상관 없이 최대 화질을 뽑아낸다기에 그걸로도 해봤는데 ref 값은 여전히 1이더군요.

     

    시도해 보신 -refs는 FFmpeg 인코더 옵션으로는 기본적으로 motion compensation을 위한 참조 프레임수입니다. 이건 x265에서의 ref 옵션과는 비슷하면서도 약간 다른데, x265에서는 motion compensation을 위한 두 종류의 참조 프레임 중 L0 references의 최대값을 의미합니다. h264_nvenc가 그 값을 어떻게 이해하고 사용하는지는 모르겠지만 motion compensation 계산은 항상 시간이 더 소요되니 인코딩에 시간이 더 걸리는 건 당연하겠죠. x265에서야 이 값이 높아지면 화질 개선이 이루어지겠지만 h264_nvenc는 이게 어떻게 작용하는지는 미지수인 거 같습니다.

     

    rc-lookaheadH264에서는 rate control을 위해 미리 참조할 이전의 프레임수를 의미하는데 h264_nvenc의 경우 기본값이 0입니다. x264는 40이구요. 그렇다는 건 이 값을 수정하지 않는다면 nvenc는 rate control을 순전히 intra-frame 정보만으로 한다는, 즉 프레임 간 비트레이트 차등 배분을 거의 하지 않는다는 얘기가 되죠. 그렇게 되면 latency는 낮아져 로우 버퍼 기기에서의 재생에는 도움이 되지만 화질 향상에는 별 도움이 안 된다는 얘기가 됩니다. 그래서 인코딩 속도가 다소 느려지더라도 이 값을 x264 수준까지는 아니더라도 20 정도는 줘야 하지 않을까 생각합니다.

     

    -qmin, -qmax야 qp(quantization parameter) 값 범위 설정이니 그냥 무시해도 될 것 같구요.

  • ?
    유토짱 2018.08.28 23:01
    용어가 살짝 헷갈리는데, 암튼 저는 샤나미디어이포에 나오는
    Format settings, ReFrames : 1 frames 이부분을 4로 바꾸기위해, 위와 같은 방법을 썼었습니다.
    원본영상으 보통 4,9 frame인데, 제가 인코딩하면 1 frame으로 바뀌길래, 옵션을 찾아서 똑같이 만들다보니 -refs= 4를 주니까 원본과 같이 되더군요.
  • ?
    JKyle 2018.08.28 23:20
    아, h264_nvenc도 x264와 마찬가지로 -refs를 DPB로 받는군요. 안 써봐서 몰랐습니다. 몰랐던 거 알아갑니다. 감사합니다.
  • ?
    핥아버지 2018.09.14 16:56
    제 프리셋 갖고는 계속 오류 뜨는데 프리셋 하나만 올려주세요
  • ?
    JKyle 2018.09.15 05:51
    https://shana.pe.kr/index.php?mid=shanaencoder_preset&document_srl=55167
    간단한 프리셋으로 올렸습니다.
  • ?
    대소마왕 2020.02.29 17:10

    아직 알림을 받으실지 모르겠습니다. 저는 인코더를 주로 가끔 보긴 해야겠는데 굳이 고화질로 볼 필요는 없고 적당한 화질에 저용량으로 저장만 해놓을 수 있도록 압축하는데 사용합니다. 주로 속도 때문에 NVENC를 쓰는데요, 게시판을 쭉 둘러봐도 NVENC나 QSV를 사용해서 2패스 인코딩을 돌리는데 대한 내용은 따로 없었던 것 같습니다. 혹시 여기 있는 방법을 따라서 x265만 nvenc로 바꿔서 쓰면 똑같이 작동할까요? 다른데 쓰신 댓글을 봤을 때 하드웨어 코덱들은 제조사에서 트윅을 막아놓은 것들이 많아서 제약이 많다고 들어서 혹시 아예 2패스 인코딩 자체가 불가능한가 싶어서 여쭤봅니다.

  • ?
    JKyle 2020.03.02 15:26

    인코더에 따라서 옵션(고유 옵션) 설정이 달라져야 하므로 x265에 관한 본문 내용은 hevc_nvenc에 적용할 수 없습니다.

    (이유는 FFmpeg 명령어 구조와 샤나인코더 작동 방식 이해 참고)

     

    그리고 하드웨어 인코더로는 진정한 의미의 멀티패스 인코딩이 불가능한 것으로 압니다.

    H264(NVENC), HEVC(NVENC) 옵션 도움말에 보면 -2pass 옵션이 있긴 한데, 이건 "동영상의 프레임 전체를 대상으로 분석을 하는 1패스 ⇒ 분석을 기반으로 실제 인코딩을 진행하는 2패스"의 작업 모드를 의미하는 게 아니라, 하나의 프레임을 바로 이전 프레임에 대한 분석을 기반으로 실시간으로 로컬 2패스 인코딩하는 것을 의미한다고 합니다. (자세한 내용은 문서화돼 있지 않아서 알 수 없습니다.)

    애초에 빠른 인코딩 작업 처리가 주목적인 만큼 목적에 적합하지 않은 멀티패스 인코딩은 아예 고려하지 않은 것 같습니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수 추천 수
» 샤나에서 HEVC(x265)로 2패스 인코딩하기 12 file JKyle 2018.08.28 14812 0
32 샤나인코더 4.9 버전부터 추가된 편의기능 >>프리셋 메뉴 및 설정 메뉴를 빠르게 열기<< file Rina 2018.06.28 7470 0
31 하드웨어 가속 디코딩을 꺼서 인코딩 속도를 높이기 6 JKyle 2018.06.19 27914 1
30 소장용 고화질 1080p 영상 인코딩 팁 2 퍼플군단 2018.06.12 30141 0
29 샤나인코더와 자막, Q&A 1 file JKyle 2018.05.31 21065 2
28 QuickTime/Apple TV에서 재생이 안 되는 HEVC mp4/m4v 동영상 문제 해결 2 file JKyle 2018.05.21 4943 1
27 HD(720p) 이상 고해상도 동영상을 HD의 WebM(VP9, Opus 코덱)으로 인코딩하기 file JKyle 2018.05.20 5567 0
26 wINDOWS10 멀티 데스크톱 정군 2018.05.07 2645 0
25 HDR 영상 인코딩하기! 8 황금별똥 2018.01.23 9191 0
24 ASS 자막 파일을 aegisub으로 작업 시 libass를 사용하세요. file Rina 2018.01.20 4790 1
23 MP3 파일 비트레이트 320 이상 설정방법 / 자막크기 및 자막 위치 설정 방법 1 file 능소화 2017.10.28 5744 0
22 AMD 플루이드모션 60프레임 인코딩 (real 프레임레이트) 설정방법 (ffmpeg 프레임 보간기법) 23 file 능소화 2017.06.06 24397 0
21 막강한 ★샤나인코더★ 기능 제대로 사용하기 [영상-음성 분리하기 및 외부 음성파일 넣기] 37 file 능소화 2017.04.15 35400 4
20 2Audio 내장 플레이어로 재생시 기본재생 음성 지정하기 file 능소화 2017.04.09 5047 1
19 메타데이터, 챕터정보 삽입하기 1 file Rina 2017.04.02 4216 2
18 [TIP] 기존의 '귀여운 소녀' 아이콘으로 돌아가기 1 file 유밍 2017.03.30 10679 0
17 ※ 설정방법 / 프리셋파일포함 ※ 샤나인코더외부 자막 Mux 기능 추가 [v 4.5.1] 9 file 능소화 2017.03.30 15993 2
16 MKV 포맷에 ErrorDetectionType 에 대해서(지우는 방법 포함) file Rina 2017.03.14 3568 0
15 8쓰레드 부터 점유율 100프로 못찍을때 해결방법 입니다. 쩌는사냐인코더 2017.03.11 9157 0
14 webm VP9 인코딩 속도 올리는 방법 1 file 마소리스 2017.01.18 8251 0
Board Pagination Prev 1 2 3 4 Next
/ 4