Although there are plenty of tools that work well for stabilizing regular video, there aren’t any good ones for stabilizing 360 degree video. As I was unable to find any freely available software that worked, I used various command line tools from Hugin and FFmpeg. Although this worked, it was extremely slow and had some issues with the horizon drifting.1 I can’t really recommend the approach, but I figured I’d post the technique in case anyone finds it to be useful. Hopefully Facebook with open source their 360 video stabilization, since it seems much better.
# Extract frames from original video ffmpeg -i video.webm frame%03d.png # Create Hugin project with frames pto_gen -o project.pto -p 4 -f 360 frame*.png # Find control points between adjacent frames cpfind --linearmatch -o ctrlpoints.pto project.pto # Remove bad control points (optional) cpclean -p -o clean.pto ctrlpoints.pto # Optimize fit autooptimiser -p -o optimized.pto clean.pto # Change output size to match input and change output mode to only remap images pano_modify --canvas=AUTO --output-type=REMAPORIG -o output.pto optimized.pto # Stitch output nona -o output output.pto # Convert remapped frames back into video ffmpeg -framerate 30 -i output%04d.tif -c:v libvpx -b:v 10M output-no-audio.webm # Copy audio ffmpeg -i output-no-audio.webm -i video.webm -map 0:v -map 1:a -c:v copy -c:a libvorbis output.webm
Manually adding some horizontal line control points in Hugin helped in this regard. ↩