레이블이 쿼드코어인 게시물을 표시합니다. 모든 게시물 표시
레이블이 쿼드코어인 게시물을 표시합니다. 모든 게시물 표시

2008년 9월 14일 일요일

HDTV 인코딩의 느린 속도는 디인터 필터가 주범이다

사용자 삽입 이미지



요즘 쿼드코어 CPU와 HDTV 수신카드의 대중화로 인해 인코딩에 대한 관심이 많아지는 추세입니다.
하지만 다들 조금 시도해보고는 속도가 너무 느려서 금방 포기해버리곤 합니다.

그렇다면 느린 속도의 근본적인 원인은 뭘까요?
물론 H264의 뛰어난 압축률 덕분에 고사양을 요구하기 때문이지만
사실 속도가 실시간 인코딩 (30FPS) 이상만 나와줘도 그나마 만족할텐데
웬만한 사양 아니고서는 10FPS도 넘기 힘든게 현실이죠.

그동안 저는 FFT3DGPU 속도가 느려서 불만이었는데 알고보니 그게 아니었습니다.
8800GT라서 그런지 몰라도 FFT3DGPU의 속도는 충분히 빠르네요.
마지막에 말씀드리겠지만 FFT3DGPU의 속도는 거의 영향을 안주는 정도였습니다. (46FPS 이상으로 추정)

테스트에 사용된 소스는 HDTV 드라마 1분 컷팅입니다.
두 필터의 영향을 비교하기 위해서 컬러매트릭스는 사용하지 않았으며 오로지 크롭만 적용된 상태였습니다.

DGDecode_mpeg2source("test.d2v")
crop( 2, 8, -2, 0)

옵션은 MeGUI x264 기본옵션에 ABR 3000 Bitrate 입니다.
테스트 사양은 요크필드 Q9550 @ 4GHz로 오버클럭된 상태입니다.

가장 속도가 빠른 조합은 역시 디인터레이싱을 하지 않고 리사이즈를 Bilinear로 하는 경우입니다.
그런데 사실상 HDTV 인코딩을 하는데 디인터레이싱 작업을 하지 않는 것은
인코딩의 바닥 조차 지키지 않는 행위입니다.
실제로 디인터를 하지 않고 직접 해보시면 아시겠지만 빠른 장면에서 잔상이 그대로 남습니다.
그러니까 가로로 물결무늬가 생긴다는 말이죠.

표에서 위 부분은 실제 속도를 나타내며 아래 부분은 가장 빠른 조합을 100점으로 환산했을 때의 상대점수 입니다.
MeGUI에서 기본적으로 사용하는 필터 조합인 Yadif와 Lanczos를 사용하면 61.25점이 나오네요.

하지만 디인터를 FieldDeinterlace(blend=false)로 하고 리사이즈를 Bilinear로 하는 경우 꽤 쓸만한 속도가 나왔습니다.
그렇다면 FieldDeinterlace(blend=false)로 했을 경우와 Yadif나 다른 디인터 필터로 했을 경우
결과물에는 어느정도 차이가 있을까요?

귀찮아서 결과물 비교는 하지 않겠습니다.
k2님이 예전에 Yadif랑 Tdeint를 비교해 놓은 것이 있는데
솔직히 확대해서 자세히 봐야 디테일 면에서 차이가 나지
어차피 멀리서 누워서 감상하시는 분들에겐 차이가 없다고 할 수 있습니다.

물론 그렇게 따지면 XviD나 x264도 차이가 없죠. 멀리서 누워서 감상한다면 말이죠 ^^

그런데 컬러매트릭스를 사용할 경우 속도가 많이 떨어지더군요.
FieldDeinterlace(blend=false)와 Bilinear 조합에선 44.31FPS가 나왔지만
여기에 컬러매트릭스를 추가하니 ColorMatrix(hints=true,interlaced=true) 속도가 33.16FPS 나왔습니다.

컬러매트릭스를 사용하는 이유는 HDTV가 BT709이기 때문에 원래의 색상을 찾아 레벨 조절을 해주기 위함입니다.
자세한 사항은 (http://hruj.tistory.com/entry/h5)

아 그리고 아까전에 FFT3DGPU 이야기는 가장 빠른 조합에 FFT3DGPU를 넣었는데 46.72FPS가 나왔습니다.
즉 48.05에서 46.72가 되었다는 말은 FFT3DGPU의 속도는 아주 빠르다는 말입니다.
그렇다면 환상적인(?) 효과를 내는 FFT3DGPU의 사용을 마다할 필요가 없겠군요.



아무튼 결론을 내리자면
최고의 품질로 명품 소장용 인코딩을 한다면 좋은 필터를 사용하고 고급옵션을 사용하겠지만
빠른 속도로 대충대충 인코딩을 해서 어딘가에 뿌린다거나 엔탈의 속도를 따라잡고 싶으시다면
FieldDeinterlace(blend=false)와 Bilinear 조합으로 하셔도 괜찮겠습니다.
물론 컬러매트릭스를 사용하지 않아서 생기는 칙칙한 색감은 뭐... ^^

2008년 8월 28일 목요일

멀티코어를 위한 MT 필터

HDTV를 x264로 인코딩하다보면 속도가 느려서 포기하시는 분들 많습니다.
그래서 쿼드코어에 대한 지름신이 강림하기도 하죠.

하지만 쿼드코어를 구입한다고 해서 만사 해결되는 것은 아닙니다.
왜냐하면...
근본적인 이유는 AVS 필터가 싱글코어만 사용하기 때문입니다.

MeGUI로 HDTV 720p 인코딩을 할 때 기본적으로 사용하는 골격은 다음과 같습니다.

DGDecode_mpeg2source("hdtv.d2v",info=3)
ColorMatrix(hints=true,interlaced=true)
Load_Stdcall_Plugin("C:\Program Files\megui\tools\yadif\yadif.dll")
Yadif(order=-1)
crop( a, b, c, d)
LanczosResize(1280,720)

여기서 문제가 뭐냐면...
바로 디인터레이싱 필터인 Yadif와 리사이즈 필터인 Lanczos 입니다.
이 녀석들 속도가 아주 느립니다.
x264는 멀티코어를 지원하기 때문에 열심히 일하려고 하는데
문제는 저 2가지 필터의 처리속도가 늦기 때문에 CPU가 놀게 됩니다.

저기 사용된 스크립트 그대로 MeGUI x264 기본옵션으로 돌려보겠습니다.

사용자 삽입 이미지


보시다시피 CPU가 탱자탱자 놀고 있습니다.
평균적으로 50% 정도의 점유율을 보여주고 있네요.
참고로 저는 Q9550을 4GHz로 오버클럭 해서 사용중입니다.

이제 동일한 상태로 MT 필터를 사용해보겠습니다.

사용자 삽입 이미지

어떤가요? CPU가 열심히 일하고 있죠?
게다가 속도는 무려... 23fps에서 39fps로 껑충 뛰었네요.
물론 속도가 2배로 되지는 않습니다.
점유율 50%에서 100%로 올라갔다고 하더라도 보통 속도는 1.5배 정도의 향상이 있습니다.



이제 본격적으로 MT 필터를 어떻게 사용하는지 알아봐야겠죠?
자세한 사항을 알고싶으면 MT와 관련된 영어 싸이트 읽어보세요 ㅋㅋ

http://forum.doom9.org/showthread.php?p=660247#post660247
http://avisynth.org/mediawiki/MT

저는 여기서 MT가 아닌 modified avisynth MT 2.5.7.5 를 소개해드리겠습니다.
수정된 AviSynth.dll 파일을 사용하기 때문에 필터를 로딩할 필요 없이 그냥 적용 가능합니다.




위 DLL 파일을 XP나 비스타 32비트의 경우 C:\WINDOWS\system32 에다가 넣어주시면 됩니다.
기존 파일을 덮어씌워야겠죠?
그러면 내부필터 사용하듯 바로 사용 가능합니다.

비스타 64비트의 경우 폴더가 아마도 C:\WINDOWS\SYSWOW64 일겁니다.
그리고 AviSynth 설치할 때 기본적으로는
C:\Program Files (x86)\AviSynth 2.5 폴더에 설치될건데
저는 혹시나 문제가 생길까봐 C:\Program Files\AviSynth 2.5 에 설치했었습니다.



여기서 사용되는 MT는 6가지 모드가 있습니다.
자세한건 위키에 나온거 읽어보시고
저나 여러분들은 그냥 기본값만 사용하시면 됩니다.

AVS 스크립트 가장 윗 줄에 setmtmode 라고 적으시면 끝!!

너무 간단한가요?
저렇게 적으시면 기본값인 setmtmode(2,0) 으로 들어가게 됩니다.
즉 모드 2번에 쓰레드 AUTO



MT가 만능은 아닙니다.
필터가 싱글코어만 사용하기 때문에 그 문제를 해결하기 위해서
화면을 분할해서 여러개로 처리하는 방식 같습니다.
그러니까 크로스파이어나 SLI와 비슷한 개념이겠네요.

하지만 모든 필터가 다 MT와 호환되는 것은 아닙니다.
대표적으로 FFT3DGPU 필터는 MT와 같이 사용 불가능합니다.
또한 MT를 사용하면 점유율은 늘어나지만 속도는 똑같거나 오히려 낮아지는 경우도 있습니다.

따라서 쿼드코어 사용한다고 무작정 MT를 사용할 것이 아니라
비교를 해보고 확실히 속도향상에 도움이 되는 경우에만 사용하시면 됩니다.