Skip to content

Instantly share code, notes, and snippets.

@hlorand
Last active November 29, 2025 16:04
Show Gist options
  • Select an option

  • Save hlorand/e5012fa315dcfe358008cf1b4611c7e0 to your computer and use it in GitHub Desktop.

Select an option

Save hlorand/e5012fa315dcfe358008cf1b4611c7e0 to your computer and use it in GitHub Desktop.
Video stabilization using VidStab and FFMPEG

Video stabilization using VidStab and FFMPEG

** Step 1 **

Install ffmpeg with the vidstab plugin.

** Step 2 **

Analyze any video and generate a so called transform file, which describes camera movements. The command below generates a transforms.trf file

ffmpeg -i input.mp4 -vf vidstabdetect=shakiness=7 -f null -

Options:

  • shakiness: Set the shakiness of input video or quickness of camera. It accepts an integer in the range 1-10, a value of 1 means little shakiness, a value of 10 means strong shakiness. Default value is 5.

** Step 3 **

Stabilize video

ffmpeg -i input.mp4 -vf vidstabtransform=smoothing=30:zoom=5:input="transforms.trf" stabilized.mp4

Options:

  • smoothing: Default value is 10. For example, a number of 10 means that 21 frames are used (10 in the past and 10 in the future) to smoothen the motion in the video. A larger value leads to a smoother video, but limits the acceleration of the camera (pan/tilt movements).
    • recommended value: videoFPS / 2
  • zoom: Set percentage (%) to zoom into video. A positive value will result in a zoom-in effect, a negative value in a zoom-out effect. Default value is 0 (no zoom).

Read more in the vidstab documentation

Create side-by-side comparsion video:

ffmpeg -i original.mp4 -i stabilized.mp4 -filter_complex "[0:v:0]pad=iw*2:ih[bg]; [bg][1:v:0]overlay=w" sidebyside.mp4
@radpopl
Copy link

radpopl commented Jul 22, 2023

for %%a in ("*.mp4") do ffmpeg -i "%%a" -vf "scale=in_range=full:in_color_matrix=bt709:out_color_matrix=rgb:out_range=full,vidstabtransform=crop=black:interpol=bicubic:optzoom=2:input='%%~na.trf',curves=master='0.0625/0 1/1'" -map 0:0 -c:v utvideo -pix_fmt gbrp -sws_flags +accurate_rnd+full_chroma_int "%%~na_stab.avi"

@ghastlyguy21
Copy link

I'm very new to ffmpeg but I can't seem to get the transform.trf code to work I enter ffmpeg -i input.mp4 -vf vidstabdetect=shakiness=7 -f null - and replace my input file and I only get an error that says an output file must be specified any suggestions on why this is happening and how I can fix it?

@TeeRodFl
Copy link

Loránd Horváth

Thanks VERY much for the examples you gave above it really helped me a lot. As you know FFMpeg is short on explanations in their errors.

Best Regards
Robert Morgan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment