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 조합으로 하셔도 괜찮겠습니다.
물론 컬러매트릭스를 사용하지 않아서 생기는 칙칙한 색감은 뭐... ^^

댓글 21개:

  1. 비밀 댓글 입니다.

    답글삭제
  2. @Anonymous - 2008/09/14 10:51
    별로 부족해 보이지 않는데요?? 컬러매트릭스 적용된것 맞구요..

    저도 저정도 밖에 쓰지 않습니다. 뭐 더 쓴다면 트윅 정도?

    답글삭제
  3. 비밀 댓글 입니다.

    답글삭제
  4. @Anonymous - 2008/09/14 15:40
    당연히(?) SeeSaw 필터 때문에 그렇겠죠. SeeSaw 필터를 빼면 속도 1패스에서 20fps 근처로 나올겁니다. 더 올리려면 MT가 필요하지만 FFT3DGPU랑은 같이 못쓰구요...



    그리고 Yadif를 FFT3DGPU 뒷쪽에 넣는건 좀 이상하죠.



    LoadPlugin("D:\AviSynth 2.5\plugins\FFT3dGPU.dll")

    load_stdcall_plugin("C:\Program Files (x86)\megui\tools\yadif\yadif.dll")

    DGDecode_mpeg2source("G:\Work\City.of.Glass.E03.080913.HDTV.1080i_Fixed.d2v")

    ColorMatrix(interlaced=false, hints=false)

    Yadif(order=-1)

    crop( 8, 4, -8, -4)

    LanczosResize(1280,720)

    FFT3dGPU()



    이정도로 하시면 1패스 20 2패스 13 정도 나오지 않을까 생각됩니다.



    그나저나 댓글에 역슬러쉬는 표현되지 않는군요.

    답글삭제
  5. FFT가 범인이 아니라는점이 놀라운 결과네요...

    리미티드샤픈까지 사용한다면 결과가 좀 달라지려나요...

    답글삭제
  6. @ChodIng - 2008/09/14 20:18
    리미티드샤픈이나 시소는 Yadif나 Tdeint보다 오히려 더 느린 필터가 아닐까 싶은데...

    답글삭제
  7. 비밀 댓글 입니다.

    답글삭제
  8. 비밀 댓글 입니다.

    답글삭제
  9. @Anonymous - 2008/09/15 00:10
    ㅇㅇ 거의 99% 완벽함. 너 좋으라고 고스트도 R2임.

    답글삭제
  10. 비밀 댓글 입니다.

    답글삭제
  11. @Anonymous - 2008/09/15 00:31
    아놔 ㅋㅋㅋ R3에서 R2로 숫자만 바꾸고 11.0.2라고 숫자는 안바꿨네 ㅋㅋㅋ

    답글삭제
  12. @Anonymous - 2008/09/14 23:56
    네 수고하세요 ^^

    답글삭제
  13. 비밀 댓글 입니다.

    답글삭제
  14. @Anonymous - 2008/09/16 06:03
    그래도 되남? 소스가 달라지는데.. FFT는 느린게 아니라니깐 ㅋ 디인터 컬러매트릭스 리미티드 시소 같은게 느린거지..

    니가 해보고 댓글 달아놔 ㅋㅋ

    답글삭제
  15. 아참... 필드 디인터보다 빠르고 노디인터보다 결과좋게 하려면(540 해상도 이하일때)



    separatefields

    selectodd # 혹은 selecteven



    이것도 있겠군요.

    답글삭제
  16. 비밀 댓글 입니다.

    답글삭제
  17. @Anonymous - 2008/10/07 14:02
    저는 XviD 인코딩 안하지만 MeGUI로 해도 되고 버추얼덥으로 해도 됩니다.

    답글삭제
  18. 인코딩하다 문득 궁금해서 올려봐요. 질문이 많아서 정말 죄송합니다.



    인코딩은 CPU빨이다 이런글이 많아서... 당연히 CPU빨인긴 한데..



    그래픽카드도 영향을 받나요? ASUS EN8600GT GDDR256쓰는데 FFT3DGPU+SEESAW 먹이면 8프레임 나오네요. 1패스나 2패스나.. CPU는 울프E8400 뿔닥 4G 이구요

    답글삭제
  19. @yousik - 2008/10/20 18:02
    VGA랑 상관없습니다. 8프레임 나오는 이유는 SeeSaw 때문입니다.

    답글삭제
  20. 비밀 댓글 입니다.

    답글삭제
  21. @Anonymous - 2008/11/24 01:48
    LimitedSharpenFaster( ss_x=2.0, ss_y=2.0, Smode=2)

    이놈이 느린 속도의 주범입니다. FFT3DGPU는 MT와 같이 사용할 수 없습니다. 오류납니다.

    답글삭제