프레임 더블링

Frame Doubling

1 정의

기존의 동영상의 프레임을 2배 이상 올려주는 작업을 말한다. 이 경우 기존의 동영상 화면이 떨리는 등의 현상을 상당히 줄여주고 보다 자연스럽게 화면이 나오도록 할 수 있다. 또한 LCD TV 등에서 잔상을 줄이기 위해 프레임 더블링 기술을 사용하고 있다.

2 기법

인터레이스 동영상의 경우 프로그레이스 동영상으로 변환하기
모션 인터폴레이션(Motion Interpolation)으로 가상의 프레임을 만들기

2.1 프레그레시브(예:60i→60p) 동영상으로 변환하기

Interlaced_Animation.gif

디인터레이싱 항목 참고

송출 용량을 줄이기 위해 주사선에 맞추어 만들어진 인터레이스(Interlaced) 동영상을 프로그레시브(Progressive)동영상으로 바꾸는 작업이다.

주로 동영상 주사선으로 잘게 나눠진 화면을 고르게 교정한 다음에 프레임 수를 60프레임으로 변환시킨다.

이 경우 모션 인터폴레이션에 비하여 상당히 간단하게 이뤄지는 경우가 많으며 주로 PC모니터 같이 프로그레시브 출력장치에서 HDTV동영상을 자연스럽게 보기 위하여 이용하는 경우가 많다. 현재 판매되는 대부분의 그래픽카드와 평판 TV가 60i→60p 프로그레시브 변환 기능을 하드웨어로 지원하고 있다[1]. 따라서 우리가 실제 TV로 시청하는 공중파 1080i 영상은 60프레임으로 시청하고 있다는 뜻이다[2].

당연한 말이지만, 순수한 60p 동영상에 비해서는 60i 동영상의 화질이 떨어진다. 뭐, 30p보다야 낫겠지만.

2.2 모션 인터폴레이션(Motion Interpolation)

2.2.1 원리


idx_09_img_02.jpg
위 이미지는 소비자를 쉽게 이해시키기 위해 만든 상업적인 활용으로, 실제는 프레임간의 변화가 아주 큰, 아주 역동적인 화면의 경우 화면만 뭉게진다. 그러나 그런 영상은 일반적인 영상이 아니다.

프레임 사이 사이에 컴퓨터를 통해 예측된 가상의 이미지를 프레임으로 만들어서 동영상 프레임 사이에 삽입하여 프레임 수를 늘리는 방식으로 이 경우 프로그레시브 30프레임 동영상을 흡사 프로그레시브 60프레임 동영상처럼 변환시킬 수 있다.

이 경우는 가상의 프레임을 만들기 때문에 움직임이 격한 몇 몇 장면에서는 흐름이 부자연스럽게 뜨기도 하고 특유의 블럭이나 울렁거림 현상이 나오기도 한다. 그렇지만 그 외에는 상당히 자연스럽게 나오기 때문에 상당히 선호되는 기술이다. 현재 TV에서는 사용되는 경우가 많지만, 컴퓨터에서는 기술 상의 문제와 홍보 부족 등으로 제대로 활용되지 못하고 있다.

프로그램에서는 Splash Pro player 등에서 지원하고 있으며, 플러그인으로서는 AviSynth + SVPflow[3][4] 조합으로 이용되고 있다.
AviSynth+SVPflow의 경우 ffdshow video decoder를 이용하여 실시간으로 모션 인터폴레이션을 이용하거나 MeGUI를 이용하여 인코딩 용으로 사용되는 경우가 많다. 다만 AviSynth 스크립트는 영어로 작성해야 하며, 필터마다 사용되는 파라메터등이 복잡하게 구성되어 어느 정도 공부를 해야 한다.

2.2.2 지원되는 장치, 프로그램

2.2.3 Avisynth 설정법

다음 팟플레이어등에서 AviSynth를 사용 할 수 있으며 InterFrame2 필터를 이용해 실시간 프레임 더블링 재생이 가능하다. 단 CPU의 성능을 상당히 잡아 먹는다는 점에 유의 할 것.[5]
단, 이 필터는 64비트 동영상 플레이어에선 지원하지 않는다. AMD사용자의 경우 위에 소개된 Fluid Motion을 이용하면 더 간단하면서 동일한 효과를 얻을수 있다.[6]

AviSynth InterFrame2 스크립트의 예: (팟플레이어의 Avisynth 설정에 아래 스크립트로 간단하게 60프레임으로 만들 수 있다) [7]

SetMTMode(6,CPU 스레드 수)
potplayer_source()
SetMTMode(2)
InterFrame(Preset="Medium", Tuning="Animation", GPU=true, Cores=CPU 코어 수)
SetMTMode(1)
GetMTMode(false) > 0 ? distributor() : last

동영상이 버벅거릴 경우 Preset의 Medium을 Fast로 변경하면 된다.

허나 2015년 6월 현재는 위 스크립트에 오류가 나서 적용되지 않고 노란색 스크립트 에러가 뜬다.
단 팟플레이어 AviSynth 스크립트 매뉴에 자동으로 추가된 항목들이 있으니 그걸 이용해보자

가장 빠르면서 프레임 연동되는 스크립트로는 이렇게 짤 수도 있다. 이렇게 짤 경우, 스크립트를 일일이 다른 걸로 불러오거나 해제할 필요 없이 동영상 프레임에 따라 자동적으로 연동되어서 번거로움이 줄어든다.

SetMemoryMax(128)
SetMTMode(1,0)
potplayer_source()
super=MSuper(pel=1, hpad=0, vpad=0, chroma=true, sharp=0, rfilter=0)
backward=MAnalyse(super, chroma=false, isb=true, search=0, searchparam=0, pelsearch=0, truemotion=true, blksize=16, blksizev=16)
forward=MAnalyse(super, chroma=false, isb=false, search=0, searchparam=0, pelsearch=0, truemotion=true, blksize=16, blksizev=16)
Framerate <= 26 ? Eval("""
MBlockFps(super, backward, forward, num=60, den=1)
""") : Framerate <= 30 ? Eval("""
MBlockFps(super, backward, forward, num=FramerateNumerator(last)*2, den=FramerateDenominator(last)*1)
""") : Framerate <= 50 ? Eval("""
AssumeFPS(30, 1, true)
MBlockFps(super, backward, forward, num=60, den=1)
""") : Framerate <= 60 ? Eval("""
MBlockFps(super, backward, forward, num=FramerateNumerator(last)*1, den=FramerateDenominator(last)*1)
""") : Framerate <= 120 ? Eval("""
AssumeFPS(24, 1, true)
MBlockFps(super, backward, forward, num=60, den=1)
""") : last
GetMTMode(false) > 0 ? distributor() : last

자세한 설정법은 이 사이트를 참조하자

3 참고항목

  1. 팟플레이어와 같은 서드파티 플레이어에서 영상→디인터레이싱 설정을 "소프트웨어(권장)"를 "하드웨어"로 바꾸면 60i→30p가 아닌 60i→60p로 디인터레이싱하여 재생한다. 윈도 미디어 플레이어는 기본값이 60p 디인터레이싱.
  2. 어둠의 경로로 다운로드할 수 있는 영상 대부분이 30p이기 때문에 가정용 평판 TV 또한 30p가 아니냐고 질문할 수 있는데, 그렇지 않다. 60p다.
  3. AviSynth에 SVPflow 플러그인을 추가한 것이다. 실질적으로 프레임 더블링을 수행하는 것은 SVPflow필터이고 AviSynth는 비선형 비디오 편집 프로그램으로 스크립트를 기반으로 다양한 영상 처리 필터 및 플러그인 등을 이용해 다양한 영상처리를 가능하게 해준다.
  4. 이전까지 소개 되었던 Mvtools의 경우 프레임 더블링 외에도 다양한 영상처리 필터가 내장된 범용 필터에 가깝다. 실제론 SVP팀에서 개발된 SVPflow 필터의 기능을 Mvtools에 일부 포함 시킨것이다. 참고로 Mvtools는 SVP 3.0기반이고 SVPflow는 SVP 3.1기반으로 SVPflow쪽이 더 최신 버전이다.
  5. InterFrame2 필터도 결국 SVPflow를 기반으로 만들어진 필터다. SVPflow를 그대로 실시간으로 적용할 경우 연산량이 너무 많아 오히려 재생시 버벅이게 되는 부작용 생기기 때문에 성능을 상당히 많이 축소해서 어떻게든 실시간 재생이 가능 하도록 만든 필터가 InterFrame2다. 그래서 프레임 더블링 효과는 SVPflow 보다 많이 떨어지므로 InterFrame2필터는 실시간 재생용으로만 사용하고 인코딩용으론 SVPflow를 쓰기를 권장한다.
  6. Intel GPU의 경우 지원은 하지만, 미약한 수준이다.
  7. 참고로 해당 스크립트는 멀티스레드 지원을 위한 MT필터도 함께 포함된 스크립트이기 때문에 InterFrame2필터뿐 아니라 MT필터도 따로 설치해 줘야 한다.[1]