Avisynth는 원래 멀티코어를 지원하지 않습니다.

그래서 인코딩 속도가 Avisynth의 처리 속도보다 빠른 경우에는 멀티코어를 제대로 활용할 수가 없죠.

이런 경우에 Avisynth에서도 멀티스레딩이 가능하게끔 만들어주면 Avisynth의 처리 속도와 인코딩 속도를 높일 수 있는데

대표적인 필터가 바로 MT필터죠. 이름 그대로 Multi Threading 필터입니다.

아주 가벼운 옵션으로 빠르게 인코딩하려고 할 때나 낮은 해상도로 인코딩할 때에는 확실히 멀티스레딩 필터가 효과가 있습니다.

2패스 인코딩을 자주 하시는 분이라면 2패스의 첫 번째 패스에서도 유용하게 사용할 수 있죠.


아무튼 멀티스레딩 필터로는 MT필터가 가장 유명하기도 하고 널리 쓰이고 있지만 가끔 에러도 있고..약간 불안정하다는 느낌이 있었습니다.

그러다가 우연히 Doom9의 Avisynth 게시판에서 Sorathread라는 필터를 알게됐는데 꽤 쓸만한 것 같아서 소개합니다.

http://forum.doom9.org/showthread.php?t=164073

사용법도 MT필터보다 간단하고 성능도 더 좋은 것 같습니다. (제 컴퓨터에서 테스트한 결과는 그렇습니다.)

우선 아래의 첨부파일을 받아서 압축을 풀고 bin 폴더의 Sorathread.dll 파일만 Avisynth의 plugin 폴더에 넣어주시면 됩니다.

sora_mtmp_package_20120219.rar

Sorasmsource.dll, Sorasmserver.exe 라는 파일도 있는데 이건 멀티스레딩과는 별로 관련이 없고 Avisynth 메모리 관리용 플러그인입니다.

필터들이 사용하는 메모리를 따로따로 분리해서 현재 사용중인 컴퓨터 메모리의 최대치를 넘지 않도록 해주는 플러그인입니다.


Sorathread의 사용법은 간단합니다. 각종 필터들 사이사이에 Sorathread()를 적어주기만 하면 됩니다.

첨부파일 안에 도움말과 그림파일로 잘 설명되어 있으니까 한번 읽어보시면 어떤 원리인지 아실 수 있을 겁니다.

예를 들어 아래와 같이 스크립트를 작성하면

MPEG2Source("E:\encoding\work\test.d2v", cpu=0)

sorathread(10,5)

yadif(order=-1)

sorathread(10,5)

lanczosresize(1280,720)


MPEG2Source, yadif, lanczosresize 필터가 각각 서로 다른 스레드에서 작동하게 되는 것이죠.

기본값은 버퍼의 크기가 10, 캐시는 0인데 버퍼가 부족하다 싶으면 Sorathread(15,0) 이런식으로 바꿔주면 됩니다.

제 컴퓨터에서는 Sorathread(10,5)를 사용해야 제대로 성능을 뽑아주더군요.

(캐시를 기본값인 0으로 설정하면 작동을 하지 않았는데 제 컴퓨터에서만 그런 건지..잘 모르겠네요)

버퍼와 캐시 수치를 높이면 메모리 사용량도 높아지기 때문에 잘 조절해서 사용하시기 바랍니다.


마지막으로 MT필터와 Sorathread를 비교한 테스트 결과도 첨부해 봅니다.

MPEG2Source("E:\encoding\work\test.d2v", cpu=0)

sorathread(10,5)

yadif(order=-1)

sorathread(10,5)

crop(4,4,-4,0)

lanczosresize(1280,720)


CPU 사용량 : 90 ~ 95 %

메모리 사용량 : 443M

x264 --preset ultrafast

encoded 1767 frames, 61.08 fps, 9551.73 kb/s


setmtmode(2)

MPEG2Source("E:\encoding\work\test.d2v", cpu=0)

yadif(order=-1)

crop(4,4,-4,0)

lanczosresize(1280,720)


CPU 사용량 : 75 ~ 85 %

메모리 사용량 : 421M

x264 --preset ultrafast

encoded 1767 frames, 37.04 fps, 9551.73 kb/s





Posted by 김코덱