동영상 손떨림 방지의 원리는 영상을 손이 움직인 반대 방향으로 옮겨주는 것입니다.

카메라가 녹화하면서 내장 소프트웨어가 실시간으로 처리하면 EIS / 렌즈가 움직이면 OIS / 센서가 움직이면 센서 시프트 손떨림 보정이지요.

 

영상편집 프로그램으로도 손떨림 보정을 할 수 있습니다. 프리미어 프로에서는 warp stabilizer 메뉴가 손떨림 보정을 담당하는데, 손떨방 구현이 비교적 쉽고 성능도 좋다고 하니 참고해 보세요.

 

 

무료 영상편집 프로그램 KDEnLive에도 vid.stab이라는 손떨림 보정(stabilize) 기능이 내장되어 있습니다. 영상 클립에서 마우스 우클릭 -> Clip Jobs -> Stablize (vidstab) 메뉴로 들어가면 손떨림 보정 옵션을 볼 수 있습니다.

 

▼ 마우스 우클릭 -> Clip Jobs -> Stablize (vidstab)

 

▼ Stablize (vidstab) 메뉴에 있는 옵션 항목들은 갯수가 많고 설명이 없습니다. 초보자 입장에서 어렵게 느껴질만 합니다. 최적의 결과물을 이끌어내기 위해서는 각 항목들이 어떤 역할을 하는지 알아둘 필요가 있을 것입니다.

▲ 이것은 기본값. (떨림 보정은 약하지만 화질 손실이 적음.)

 

▼ 이것은 셀카봉 정도의 흔들림을 커버할 수 있을만한 세팅값. 화질 손실이 비교적 큼.

 

▼ 설정값의 차이를 비교해서 보여주는 좋은 영상! (전체화면으로 보세요.)

 

▼ KDE User Base에 있는 Kdenlive 매뉴얼에 Stablilize 옵션들에 대한 설명이 자세하게 나와 있었습니다.

https://userbase.kde.org/Kdenlive/Manual/Clip_Menu/Stabilize

(vid.stab 이라는 프로그램의 공식 홈페이지 설명을 기반으로 하고 있습니다. vidstab Guthub에 있는 소개를 보면 vid.stab이 어떤 목적으로 만들어진 프로그램인지 쉽게 알 수 있습니다. : Vidstab is a video stabilization library which can be plugged-in with Ffmpeg and Transcode. )

 

KDE 위키User Base / Tech Base / Community 세 곳으로 분리되어 있습니다. 그러므로 KDE User Base 사이트는 믿을만한 출처입니다.

 

Kdenlive 매뉴얼 상의 Stablilize 옵션들을 매번 직독직해하려면 시간 낭비가 심할 수 있으니, 번역해 두겠습니다. 설명이 이해되지 않으면 아래 두 페이지들의 설명도 함께 참고했습니다

- https://github.com/georgmartius/vid.stab

- https://www.mltframework.org/plugins/FilterVidstab

 

Accuracy

  • accuracy of shakiness detection. Should be >= shakiness factor. 1: low (fast processing). 15: high (slow processing). Default: 4. Recommended: 8.
  • 흔들림 감지의 정확도(Accuracy). Shakiness 항목보다 같거나 커야 한다. 최저값 1(처리속도 빠름). 최대값 15(처리속도 느림). 기본값 4. 추천값 8.

Shakiness

  • How shaky is the video? And how quick is the camera? 1: little (fast processing). 10: very strong/quick (slow processing). Default = 4. Note: large values may also reduce the accuracy. This is due to the internals of the movement-detection. Typically you don't need a value greater than 7.
  • 영상이 얼마나 흔들리고, 카메라는 얼마나 빠른가요? 최저값 1(처리속도 빠름). 아주 강한 흔들림/빠름이면 10(처리속도 느림). 기본값 4. 참고 : 값이 크면 정확도가 떨어질 수도 있음. 이는 내부의 움직임 감지 때문임. 일반적으로 7보다 큰 값은 필요치 않음.

Stepsize

  • Step size of search process. Region around minimum is scanned with 1 pixel resolution. Default = 6.
  • 검색 과정 단계의 크기. 주변의 최소 영역은 1픽셀의 해상도로 스캔됩니다. 기본값 6.
    최소값 0, 최대값 100.

Min. contrast

  • Below this contrast, the field is discarded. Range 0-1. Default = 0.3. You may want to use a smaller value for a really low contrast clip.
  • 이 값보다 낮은 컨트라스트를 가지는 필드는 삭제됩니다. 설정 범위는 0~1. 기본값은 0.3. 아주 낮은 컨트라스트를 가진 영상클립을 위해 더 낮은 값을 사용하길 원할 수도 있습니다.

Smoothing

  • Controls the amount of smoothing/stabilization. The larger the value for smoothing, the more camera movements are compensated. The resulting clip has a lower change in camera speed. Technically it is the number of frames for lowpass filtering = (smoothing * 2) + 1. For example, with a with 25 fps clip, a value of 12 for the smoothing factor means we would smooth over one second - 12 frames behind the current frame + the current frame (1) + 12 frames after the current frame. Default =10.
    A larger value leads to a smoother video, but limits the acceleration of the camera (pan/tilt movements). 0 is a special case where a static camera is simulated.
  • 매끄럽게(smoothing)/손떨림보정(stabilization)의 정도를 조절합니다. Smoothing 값을 높일수록 카메라 움직임은 더 많이 보정됩니다. 결과물 클립은 카메라 속도 변화가 더 적습니다. 기술적으로, (Smoothing값 x 2)+1 = 영상의 프레임 값입니다. 예를 들어, 영상 클립이 25프레임이라면 (12 x 2) + 1 = 25 이므로 Smoothing값은 12가 되어야 합니다. 기본값 10. (저의 경험상, 흔들림이 심하다면 이 값을 "많이" 올려보시길 권합니다.)
    값이 클수록 영상은 부드러워지지만, 카메라의 가속(도리끄덕 움짐임)이 제한됩니다. 0은 카메라가 움직이지 않을 때 쓰세요.

Max shift

  • Set maximal number of pixels to translate image. Default = -1(No limit).
  • 이미지를 변환할 최대 픽셀 수를 설정합니다. 기본값 -1(제한 없음). 최소값 -1. 최대값 1000.

Max angle

  • maximum angle to rotate in radians. Default = -1, which means no limit.
  • 회전할 최대 각도(단위 : 라디안. 1rad = 180°/π ≒ 57.296°). 기본값 : -1(무제한).
    최소값 -1. 최대값 3.142(라디안)

Crop

  • Unchecked means the border of the transformed frames contains the pixels from previous frames. Checked(1) = black background. Default = unchecked(0).
  • 체크되지 않으면 (변환된 프레임의) 테두리가 이전 프레임의 픽셀을 가집니다(비어있어야 될 공간이 이전 프레임의 정보로 채워지기 때문에, 경우에 따라 꿀렁거리는 느낌이 들 수도 있겠죠.). 체크하면(1) 백그라운드가 검은색이 됩니다(체크하면 optimal zoom으로 화면을 약간 확대해야 검은 테두리가 안보일 것입니다). 기본값 : 체크되지 않음(0).

Zoom

  • Additional zoom during transform. Percentage to zoom > 0 = zoom in, < 0 = zoom out. The zoom specified here is in addition to the optimum zoom calculated by the program when optzoom is checked. Default = 0.
  • Optimal Zoom이 체크되면 추가로 적용되는 확대값(퍼센트). 기본값 = 0. 0보다 크면 줌인. 0보다 작으면 줌아웃.
    최소값 : -500, 최대값 : 500.

Optimal Zoom

  • 0: nothing, 1: determine optimal zoom(default). Use optimal zoom (calculated from transforms). Causes video to zoom until 90% of transformations are hidden. Hint: You can further zoom in with the zoom option.
    Set optimal zooming to avoid blank-borders. Accepted values are:
    0: Disabled.
    1: Optimal static zoom value is determined (only very strong movements will lead to visible borders) (default).
    2: Optimal adaptive zoom value is determined (no borders will be visible), see zoomspeed.
    Note that the value given at zoom is added to the one calculated here.
  • Crop 때문에 생기는 검은 테두리를 없애기 휘해 사용함.
    0 : 기능을 안 씀.
    1 (기본값) : 최적의 정적 확대값이 결정됩니다(아주 강한 움직임에만 검은 테두리가 보입니다.)
    2 : 최적의 가변(적응형) 확대값이 결정됩니다 (검은 테두리가 아예 안보입니다.). Optimal Zoom Speed를 보세요.

Optimal Zoom Speed

  • Set percent to zoom maximally each frame (enabled when optzoom is set to 2). Range is from 0 to 5, default value is 0.25.
  • Optimal Zoom이 2로 설정된 경우에 활성화됨. 각 프레임을 최대로 확대할 백분율을 설정합니다. 범위는 0~5까지이고, 기본값은 0.25. (설정 범위가 0~1이라는 글도 있음. 테스트 필요.)

Sharpen

  • Sharpen transformed image. Amount of sharpening: 0: no sharpening. Uses filter unsharp with 5x5 matrix. Default = 0.8.
  • 변환된 이미지를 선명하게 만듭니다. 0을 넣으면 선명하게 하지 않습니다. 5x5 매트릭스로 unsharp 필터를 사용합니다. 기본값 = 0.8.

Show fields

  • 0 = draw nothing, 1 or 2 = show fields and transforms. Use 1 or 2 to preview what the process is going to do. example. Default = 0. Non-zero values of this parameter are not relevant in the Kdenlive implementation - use zero. This option is not available in version 0.9.3.
  • 손떨방이 작동하는 경로를 시각적으로 보여줍니다. example 영상 참고. 무조건 0으로 놔둡시다.

Tripod

  • virtual tripod mode (if >0): motion is compared to a reference frame (frame # is the value) (default : 0)
    NOTE: If this mode has been used in first pass then only it should be used in second pass.
  • 가상 삼각대 모드. 기본값 : 0. 최소값 0. 최대값 100000. 0이면 삼각대 모드가 비활성화됩니다. 0보다 크면 동작은 기준 프레임과 비교됩니다. 만약 1로 설정하면 가상 삼각대 모드가 활성화되며, 삼각대 모드 사용 중에는 relative 값과 smoothing 값이 모두 무시됩니다(relative=0:smoothing=0).
    주의점 : 첫번째로 돌릴 때 Tripod가 사용되었다면 두번째 바퀴에서만 사용되어야 합니다.

 

이런저런 테스트를 해봤는데, 셀카봉 흔들림 정도는 커버할 수 있었습니다. 하지만 핸드헬드 수준의 거친 흔들림은 커버할 수 없었으니, 핸드헬드 시에는 카메라의 손떨방 기능으로 손떨림을 최대한 줄인 다음 Stabilize 처리를 하는 것이 좋을 듯합니다.

 

▼ 프리미어 프로에서 warp stabilizer 메뉴로 손떨림 보정을 시도할 때 smoothness 값을 높이는 것을 팁으로 제시하는 영상이 많습니다. KDEnLive에서도 비슷한 맥락으로 접근하면 좋을 것 같아요. 가장 중요한 옵션은 Smoothing일 듯.

 

▼ 손떨림 보정(Stabilize) 기능은 흔들림이 작을 때에 사용하면 효과적일 것 같고, 흔들림이 큰 경우에는 애프터이펙트 기능처럼 모션 트래킹 기술을 활용한 Stabilize 기법을 적용하는 것이 유리할 것 같습니다. 시간이 되면 Kdenlive로 아래 영상처럼 구현하는 방법을 소개하겠습니다.

반응형