샤나에서 HEVC(x265)로 2패스 인코딩하기

by JKyle posted Aug 28, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

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

샤나의 [빠른 설정] 메뉴에는 없지만 샤나에서도 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 이 문서를 참조하시기 바랍니다.