Avisynth 스크립트는 그 이름처럼 가상의 AVI 파일로 인식되기 때문에 기본적인 성질이 AVI(VFW)와 같습니다.

그 중에서 가장 대표적인 특징?이 VFR을 지원하지 않는다는 것이죠.

VFR을 지원하지 않기 때문에 VFR로 인코딩하기 위해서는 우회적인 방법이 필요한데 timecode 파일을 이용하는 방법이 있습니다.

avs 스크립트는 CFR인 것처럼 작성해서 CFR로 인코딩하고 나중에 timecode 파일과 함께 먹싱해서 VFR 영상을 만드는 것이죠.

Decomb나 TVITC 필터 등 대부분의 IVTC 필터는 모두 이런식으로 VFR을 지원하는데 여기에는 한 가지 문제점이 있습니다..

이 글을 읽어보신 분들은 아시겠지만..영상의 프레임 레이트에 따라서 x264의 CRF 수치도 변(해야)한다는 것입니다.


예를 들어 24, 30 fps가 섞여있는 소스에 TIVTC 필터를 적용해서 VFR 스크립트를 만들면 24와 30의 중간 정도 되는 프레임 레이트의 CFR 영상이 됩니다.

(수동으로 직접 구간을 나누고 timecode 파일을 작성한다고 해도 avs 스크립트는 언제나 CFR일 수밖에 없습니다.)

즉 24, 30 fps인 구간은 먹싱 과정 중 timecode 파일에 의해서 나눠지는 것이고 실제 인코딩은 CFR인 상태로 진행된다는 것이죠.

따라서 x264의 CRF 수치도 영상의 모든 구간에서 동일하게 적용됩니다.

원래대로라면 24 fps인 구간에서는 낮은 CRF가, 30 fps인 구간에서는 높은 CRF가 적용되어야 하지만 모든 구간에서 똑같은 CRF가 적용되기 때문에

제대로 된 비트 배분이 이루어지지 않고 있다고 볼 수 있는 것이죠.


이런 경우에 사용하면 좋은 옵션이 x264의 --tcfile-in 입니다.

--tcfile-in "timecode.txt" 이런식으로 x264에 옵션을 추가해 주면 timcode 파일을 분석해서 구간별로 정확한 CRF 수치를 사용하게 됩니다.

(timecode가 인코딩 과정에서 적용되기 때문에 x264의 --output을 mp4나 mkv로 지정한 경우에는 VFR 영상이 바로 출력됩니다.)

CRF 인코딩 뿐만 아니라 2패스 인코딩에서도 이런식으로 timecode 파일을 입력해 주면 x264의 비트 배분 정확도를 높여줄 수 있습니다.

얼핏 보면 2패스 인코딩은 CRF와 상관이 없다고 생각하실 수도 있지만 2패스 인코딩에서도 프레임 레이트에 따라서 RF(Rate Factor)가 변하기 때문에

timecode 파일을 입력해주는 것이 더 정확한 비트 배분을 가능하게 해줍니다.

즉, CRF든 2패스든 프레임 레이트에 따라서 적절한 비트를 배분하려면 timecode 파일을 인코딩 과정 중에 입력해주는 것이 좋습니다.




Posted by 김코덱