프레임 더블링

 

Frame Doubling
1. 정의
2. 기법
2.1. 프로그레시브(예:60i→60p) 동영상으로 변환하기
2.2. 모션 인터폴레이션(Motion Interpolation)
2.2.1. 원리
2.2.2. 지원되는 장치, 프로그램
2.2.3. Avisynth 설정법
3. 참고 문서


1. 정의


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

2. 기법


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

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


[image]
디인터레이싱 항목 참고.
송출 용량을 줄이기 위해 주사선에 맞추어 만들어진 인터레이스(Interlaced) 동영상을 프로그레시브(Progressive)동영상으로 바꾸는 작업이다.
주로 동영상 주사선으로 잘게 나눠진 화면을 고르게 교정한 다음에 프레임 수를 60프레임으로 변환시킨다.
이 경우 모션 인터폴레이션에 비하여 상당히 간단하게 이뤄지는 경우가 많으며 주로 PC모니터 같이 프로그레시브 출력장치에서 HDTV동영상을 자연스럽게 보기 위하여 이용하는 경우가 많다. 현재 판매되는 대부분의 그래픽카드와 평판 TV가 60i→60p 프로그레시브 변환 기능을 하드웨어로 지원하고 있다.[1] 따라서 우리가 실제 TV로 시청하는 지상파 1080i 영상은 60프레임으로 시청하고 있다는 뜻이다.[2]
당연한 말이지만, 순수한 60p 동영상에 비해서는 60i 동영상의 화질이 떨어진다. 뭐, 30p보다야 낫겠지만.

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



2.2.1. 원리


일반적으로 사용되는 모니터의 주사율이 60hz다. 만약 영상이 24FPS이라면 60은 24의 정수 배가 아니기 때문에 반드시 에러가 발생할 수 밖에 없다. 이런 현상을 모션 저더(motion judder) 혹은 모션 깨짐이라고 한다. 이를 보완하는 방법으로는 첫 번째로 블렌딩(blending)이 있다. 이 방법은 프레임을 반복하거나 제거하고 앞 뒤 프레임을 서로 섞는 것으로 이렇게 하면 CPU나 GPU 등의 연산처리장치에 부담이 덜 가지만 말 그대로 프레임을 섞는 것이기 때문에 겹치거나 흐릿한 잔상 비스무리한 게 생길 수 있다. 퀄리티도 흐릿하니 어지러움만 가중시킬 뿐이라 대부분은 이 방법보다 아래를 더 선호한다.
[image]
위 이미지는 소비자를 쉽게 이해시키기 위해 만든 상업적인 활용으로, 실제는 프레임간의 변화가 아주 큰, 아주 역동적인 화면의 경우 화면만 뭉게진다.
이런 단점이 있는 블렌딩 방식을 대체하기 위해 개발된 것이 바로 위의 방법으로 광학 흐름을 구현해 프레임 사이 사이에 GPU나 CPU 연산을 통해 예측된 가상의 이미지를 프레임으로 만들어서 동영상 프레임 사이에 삽입하여 프레임 수를 늘리는 방식이다. 이 경우 프로그레시브 30프레임 동영상을 흡사 프로그레시브 60프레임 동영상처럼 변환시킬 수 있다.
하지만 움직임이 격하거나 글씨가 존재하거나 화면 테두리에 대상이 걸쳐 있는 상태로 움직일 시 예측 실패로 인한 인위적인 노이즈 비스무리한 아티팩트(artifact)가 생기게 된다. 이런 현상은 애니메이션 쪽에서 특히 두드러져 보이는데 실사는 움직임이 끊김 없이 잘 이어지는 반면 애니메이션은 하나하나 다 수작업으로 그리기 때문에 프레임 간이 완벽하게 이어지지 못 하기 때문이다. 그 외에는 상당히 자연스럽게 나오기 때문에 상당히 선호되는 기술이다. 현재 TV에서는 사용되는 경우가 많지만, 컴퓨터에서는 기술 상의 문제와 홍보 부족 등으로 제대로 활용되지 못하고 있다.
프로그램에서는 Splash Pro player 등에서 지원하고 있으며, 플러그인으로서는 AviSynth + SVPflow[3][4] 조합으로 이용되고 있다.
AviSynth+SVPflow의 경우 ffdshow video decoder를 이용하여 실시간으로 모션 인터폴레이션을 이용하거나 MeGUI를 이용하여 인코딩 용으로 사용되는 경우가 많다. 다만 AviSynth 스크립트는 영어로 작성해야 하며, 필터마다 사용되는 파라메터등이 복잡하게 구성되어 어느 정도 공부를 해야 한다.

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


  • 장치
    • LG, 소니, 삼성 등에서 사용되는 120hz, 240hz 기술 등(입체안경과는 관계가 없다. 잔상을 줄이기 위해 프레임 수를 인위적으로 늘리는 것이다.)
    • AMD그래픽카드APU 등에서 지원하는 플루이드 모션 기능
    • OnePlus 8 Pro의 Motion Graphics Smoothing 기능[5] #
  • 프로그램
    • mpv (오픈소스 미디어 플레이어, mpv config 파일을 생성하여 설정한다)
    • Splashpro player
    • ffdshow video decoder + avisynth + mvtools (실시간 구현 용도)
    • MeGUI + avisynth + mvtools (동영상 인코딩 용도)
    • 팟플레이어 (환경설정-영상-영상처리-프레임 더블러)
    • 수동 필터 설정이 가능한 동영상 플레이어 + AMD Fluid motion 기능을 이용한 BFRC 필터 플레이어에서 AMD Fluid Motion으로 60 프레임 동영상 보기, 설정법
    • SVP : #
    • 드미트리렌더(DmitriRender) # [6] [구입전]
    • DAIN-APP : AI 기반의 프레임 더블링 프로그램으로, 간단한 사용법으로 MP4, GIF등 파일의 프레임을 추가로 생성하여 프레임을 증가시킬 수가 있다. 대표적인 사례 영화, 스톱모션, 애니메이션, 만화, 스트라이트 등에 사용할 수 있다.(10프레임 → 30프레임, 60프레임 등) 참고 현재 알파 버전이 개발 중이다. 안타깝게도 현재로서는 CUDA가 필요하므로 CUDA를 지원하지 않는 컴퓨터(AMD 및 이전 Nvidia 그래픽 카드를 가진 컴퓨터)는 이 앱을 실행할 수 없다.

2.2.3. Avisynth 설정법


다음 팟플레이어등에서 AviSynth를 사용 할 수 있으며 InterFrame2 필터를 이용해 실시간 프레임 더블링 재생이 가능하다. 단 CPU의 성능을 상당히 잡아 먹는다는 점에 유의 할 것.[7]
단, 이 필터는 64비트 동영상 플레이어에선 지원하지 않는다. AMD사용자의 경우 위에 소개된 Fluid Motion을 이용하면 더 간단하면서 동일한 효과를 얻을수 있다.[8]
AviSynth InterFrame2 스크립트의 예: (팟플레이어의 Avisynth 설정에 아래 스크립트로 간단하게 60프레임으로 만들 수 있다)[9]
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로 변경하면 된다.
허나 현재는 위 스크립트에 오류가 나서 적용되지 않고 노란색 스크립트 에러가 뜬다.
단 팟플레이어 AviSynth 스크립트 매뉴에 자동으로 추가된 항목들이 있으니 그걸 이용해보자
가장 빠르면서 프레임 연동되는 스크립트로는 이렇게 짤 수도 있다. 이렇게 짤 경우, 스크립트를 일일이 다른 걸로 불러오거나 해제할 필요 없이 동영상 프레임에 따라 자동적으로 연동되어서 번거로움이 줄어든다.
하단에 나와있는 framerate ? eval 부분은 조건 연산자다.
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] 어둠의 경로나 VOD서비스를 통해서 다운로드할 수 있는 TV프로그램 영상 대부분이 30p이기 때문에 가정용 평판 TV 또한 30p가 아니냐고 질문할 수 있는데, 그렇지 않다. 60p다. 어둠의 경로와 VOD서비스가 30p로 제공되는것은 TV프로그램이 60프레임이라는것을 잘 모르는 경우도 많아서 이기도 했지만 일부 컴퓨터나 재생기기가 60P 재생이 불가능했던 시절이 있었기 때문이다. 다만 2019년 기준으로 60P를 재생하지 못하는 기기는 거의 없다.[3] AviSynth에 SVPflow 플러그인을 추가한 것이다. 실질적으로 프레임 더블링을 수행하는 것은 SVPflow필터이고 AviSynth는 비선형 비디오 편집 프로그램으로 스크립트를 기반으로 다양한 영상 처리 필터 및 플러그인 등을 이용해 다양한 영상처리를 가능하게 해준다.[4] 이전까지 소개 되었던 Mvtools의 경우 프레임 더블링 외에도 다양한 영상처리 필터가 내장된 범용 필터에 가깝다. 실제론 SVP팀에서 개발된 SVPflow 필터의 기능을 Mvtools에 일부 포함 시킨것이다. 참고로 Mvtools는 SVP 3.0기반이고 SVPflow는 SVP 3.1기반으로 SVPflow쪽이 더 최신 버전이다.[5] 유튜브, 넷플릭스 등 특정 앱에서 동영상을 60/120프레임으로 보간할 수 있다.[6] 러시아에서 개발된 렌더러이며, 12달러의 가격에 2PC까지 무제한 지원해주고있으며 30일간 체험판으로 체험해볼 수 있다. 한국의 동영상 플레이어와도 호환이 된다.[구입전] 이 프로그램은 사후 서비스가 개판이기로 유명하다. 잘 쓰고 있는데 어느날 갑자기 라이센스에 문제가 생겼다면서 먹통이 되는 경우가 허다하다. 이렇게 라이센스가 먹통이 됬을 경우 라이센스 복구를 해주면 아무 문제가 없는데 개발자가 '그거 내 알바 아님 ㅋ 니가 알아서 하셈'을 시전하면서 복구를 안해준다! 즉 쌩돈을 날릴 확률이 매우 높으니 구입하기 전 신중히 생각하도록 하자.[7] InterFrame2 필터도 결국 SVPflow를 기반으로 만들어진 필터다. SVPflow를 그대로 실시간으로 적용할 경우 연산량이 너무 많아 오히려 재생시 버벅이게 되는 부작용 생기기 때문에 성능을 상당히 많이 축소해서 어떻게든 실시간 재생이 가능 하도록 만든 필터가 InterFrame2다. 그래서 프레임 더블링 효과는 SVPflow 보다 많이 떨어지므로 InterFrame2필터는 실시간 재생용으로만 사용하고 인코딩용으론 SVPflow를 쓰기를 권장한다.[8] Intel GPU의 경우 지원은 하지만, 미약한 수준이다.[9] 참고로 해당 스크립트는 멀티스레드 지원을 위한 MT필터도 함께 포함된 스크립트이기 때문에 InterFrame2필터뿐 아니라 MT필터도 따로 설치해 줘야 한다.#

분류