글 수 44
추천 수 : 6 / 0
조회 수 : 5688
2009.02.08 (15:24:51)
얼마전부터 TV 시장에서 화두가 되고 있던 것은 바로 120Hz입니다.
즉 기존 60Hz 영상에 프레임을 추가하여 120Hz로 출력하여 부드러운 화면과 함께
잔상을 줄이려는 의도로 만든 기술이죠.
그런데 올해부터는 모니터 역시 3D 지원과 함께 120Hz 시대를 열 전망으로 보입니다.
이런 차원에서 한번 120fps 동영상을 만드는 강좌를 적을까 합니다.
Avisynth에서 120fps 영상을 만드는 원리는 시중의 TV에서 구현하는 120Hz 원리랑 비슷합니다.

(출처:소니 영문 홈페이지)
말하자면 프레임 중간에 전후 프레임의 움직임을 예측하여 보간된 프레임을 끼워넣는다고 할 수 있겠죠.
즉 애니에서 쓰이는 VFR 기반의 120fps와 달리 별도의 실제 프레임을 삽입하는 것입니다.
준비물로는 MVTools V2가 필요합니다. MVTools는 여기서 받으세요(링크-http://www.avisynth.org.ru)
MVTools2.dll을 플러그인 폴더에 갖다놓은 후에 avs 스크립트를 작성하시면 됩니다.
우선 MVTools를 쓰기 전에 Bob 방식의 디인터레이스를 반드시 해서 60fps로 만들어야합니다.
다만 그 전에 소스가 60i로 되어있는지 확인을 해 보는게 좋을 것입니다.
그냥 Bob()이나 DGBob 보다는 yadif(mode=1)이나 TDeint(mode=1) 또는 MCBob같이
'고성능' 디인터레이스 필터를 사용하는 것을 권장합니다.
디인터레이스를 마치면 적절한 기타 필터(블럭 및 노이즈제거 등)을 먹인 후에 이제 본격적인 120fps 늘리기
작업에 들어갑시다.
우선 기초적인 120fps 변환 스크립트는 다음과 같습니다.
super = MSuper(pel=2)
backward_vec = MAnalyse(super, overlap=4, isb = true, search=3)
forward_vec = MAnalyse(super, overlap=4, isb = false, search=3)
MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(last), den=FramerateDenominator(last))
이 스크립트를 써서 불러오면 프레임레이트가 두 배로 되었음을 볼 수가 있을 것입니다.
좀더 나은 결과물을 원한다면 이런 스크립트를 쓰는 것도 좋을 것입니다. 다만 시간이 매우 오래 걸린다는 점을
염두해 두었으면 합니다.
prefiltered=fluxsmootht(3)
super = MSuper(pel=4, levels=1)
superfilt = MSuper(prefiltered, pel=4, hpad=16, vpad=16) # all levels for MAnalyse
backward = MAnalyse(superfilt, blksize=16, truemotion=true, plevel=2, search=3, searchparam=3, overlap=8, divide=2, isb = true, badrange=-64)
forward = MAnalyse(superfilt, blksize=16, truemotion=true, plevel=2, search=3, searchparam=3, overlap=8, divide=2, isb = false, badrange=-64)
forward_re = MRecalculate(super, forward, blksize=8, truemotion=true, search=3, searchparam=3, overlap=4, divide=2, dct=6, thSAD=100)
backward_re = MRecalculate(super, backward, blksize=8, truemotion=true, search=3, searchparam=3, overlap=4, divide=2, dct=6, thSAD=100)
MFlowFps(super, backward_re, forward_re, num=2*FramerateNumerator(last), den=FramerateDenominator(last))
만약 원본이 24프레임의 블루레이같은 경우에도 '그럴싸하게' 프레임레이트를 변환하는 것이 가능합니다.
60프레임으로 만들기를 원한다면 'num=2*FramerateNumerator(last)' 이부분에서 "2"를 2.5로 바꿔주시면
됩니다.(num과 den을 직접 숫자로 쓰는건 권장하지 않습니다)
MFlowFps를 사용하면 중간프레임이 다음과 같이 생성됩니다(자세히 설명하기가 힘드네요)

참고로 120fps로 만들때 시간을 절약하기를 원한다면 리사이즈 후에 위 스크립트를 삽입하시기 바랍니다.
단 리사이즈 전에 스크립트 쓰는 것이 더 자연스러운 화질을 보여줍니다.
물론 이런 방식으로 120fps 영상을 생성하는 것이 아직 완벽하지는 않습니다.
앞과 뒤의 한 프레임만을 분석하여 중간 프레임을 생성하기 때문에 장면전환이 있을 때는 화면이 겹치는
문제가 발생하며, 자막이 갑자기 나타나거나 사라질 때에도 잔상이 남기도 합니다.
그렇지만 나중에 플러그인 버전이 향상되면 개선될 문제라고 생각합니다.
즉 기존 60Hz 영상에 프레임을 추가하여 120Hz로 출력하여 부드러운 화면과 함께
잔상을 줄이려는 의도로 만든 기술이죠.
그런데 올해부터는 모니터 역시 3D 지원과 함께 120Hz 시대를 열 전망으로 보입니다.
이런 차원에서 한번 120fps 동영상을 만드는 강좌를 적을까 합니다.
Avisynth에서 120fps 영상을 만드는 원리는 시중의 TV에서 구현하는 120Hz 원리랑 비슷합니다.

(출처:소니 영문 홈페이지)
말하자면 프레임 중간에 전후 프레임의 움직임을 예측하여 보간된 프레임을 끼워넣는다고 할 수 있겠죠.
즉 애니에서 쓰이는 VFR 기반의 120fps와 달리 별도의 실제 프레임을 삽입하는 것입니다.
준비물로는 MVTools V2가 필요합니다. MVTools는 여기서 받으세요(링크-http://www.avisynth.org.ru)
MVTools2.dll을 플러그인 폴더에 갖다놓은 후에 avs 스크립트를 작성하시면 됩니다.
우선 MVTools를 쓰기 전에 Bob 방식의 디인터레이스를 반드시 해서 60fps로 만들어야합니다.
다만 그 전에 소스가 60i로 되어있는지 확인을 해 보는게 좋을 것입니다.
그냥 Bob()이나 DGBob 보다는 yadif(mode=1)이나 TDeint(mode=1) 또는 MCBob같이
'고성능' 디인터레이스 필터를 사용하는 것을 권장합니다.
디인터레이스를 마치면 적절한 기타 필터(블럭 및 노이즈제거 등)을 먹인 후에 이제 본격적인 120fps 늘리기
작업에 들어갑시다.
우선 기초적인 120fps 변환 스크립트는 다음과 같습니다.
super = MSuper(pel=2)
backward_vec = MAnalyse(super, overlap=4, isb = true, search=3)
forward_vec = MAnalyse(super, overlap=4, isb = false, search=3)
MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(last), den=FramerateDenominator(last))
이 스크립트를 써서 불러오면 프레임레이트가 두 배로 되었음을 볼 수가 있을 것입니다.
좀더 나은 결과물을 원한다면 이런 스크립트를 쓰는 것도 좋을 것입니다. 다만 시간이 매우 오래 걸린다는 점을
염두해 두었으면 합니다.
prefiltered=fluxsmootht(3)
super = MSuper(pel=4, levels=1)
superfilt = MSuper(prefiltered, pel=4, hpad=16, vpad=16) # all levels for MAnalyse
backward = MAnalyse(superfilt, blksize=16, truemotion=true, plevel=2, search=3, searchparam=3, overlap=8, divide=2, isb = true, badrange=-64)
forward = MAnalyse(superfilt, blksize=16, truemotion=true, plevel=2, search=3, searchparam=3, overlap=8, divide=2, isb = false, badrange=-64)
forward_re = MRecalculate(super, forward, blksize=8, truemotion=true, search=3, searchparam=3, overlap=4, divide=2, dct=6, thSAD=100)
backward_re = MRecalculate(super, backward, blksize=8, truemotion=true, search=3, searchparam=3, overlap=4, divide=2, dct=6, thSAD=100)
MFlowFps(super, backward_re, forward_re, num=2*FramerateNumerator(last), den=FramerateDenominator(last))
만약 원본이 24프레임의 블루레이같은 경우에도 '그럴싸하게' 프레임레이트를 변환하는 것이 가능합니다.
60프레임으로 만들기를 원한다면 'num=2*FramerateNumerator(last)' 이부분에서 "2"를 2.5로 바꿔주시면
됩니다.(num과 den을 직접 숫자로 쓰는건 권장하지 않습니다)
MFlowFps를 사용하면 중간프레임이 다음과 같이 생성됩니다(자세히 설명하기가 힘드네요)

참고로 120fps로 만들때 시간을 절약하기를 원한다면 리사이즈 후에 위 스크립트를 삽입하시기 바랍니다.
단 리사이즈 전에 스크립트 쓰는 것이 더 자연스러운 화질을 보여줍니다.
물론 이런 방식으로 120fps 영상을 생성하는 것이 아직 완벽하지는 않습니다.
앞과 뒤의 한 프레임만을 분석하여 중간 프레임을 생성하기 때문에 장면전환이 있을 때는 화면이 겹치는
문제가 발생하며, 자막이 갑자기 나타나거나 사라질 때에도 잔상이 남기도 합니다.
그렇지만 나중에 플러그인 버전이 향상되면 개선될 문제라고 생각합니다.

