ffmpeg360-degrees

How to de-warp 180 degree or 360 degree fisheye video with ffmpeg?


Let's say I have video from an IP-camera that has a 180 degree or 360 degree fisheye lens and I want to dewarp the image in some way. Ideally I would be able to select some rectangular area of the input image and dewarp that into a "normal" looking output video, but it would also be acceptable to dewarp the the video into some sort of Equirectangular or Equi-Angular Cubemap projection. The input video looks like this

enter image description here

I'm aware of two filters that might be used for this

  1. lenscorrect filter - I think that this is on the right course but all of the example that I can find with this filter are only for "minor" fisheye lenses and I can't seem to get this to work correctly for videos with 360 degree fisheye lenses, it simply doesn't dewarp enough.

  2. v360 filter. I thought that this must be the correctly filter but it seems that it's intended for 360 videos and not 360 degree fisheye lenses? I didn't know that there was a difference but I can't get it to work. When I try to take my input video and map it through an equirectangular projection I get some odd output like this

enter image description here

I've tried a dozen or so different combinations of parameters but none of them seem to give me the output that I want which is a single dewarped image. Can someone help me with the filter graph parameters to use this filter?

Is there something that I'm missing? Are either of these filters the correct way forward?

EDIT -

I've been experimenting with the v360 filter and I think I've gotten closer. What I want to do is map a fisheye input to an equirectangular output, so I've tried this

ffmpeg -i input.mp4 -vf v360=fisheye:equirect:id_fov=360 output.mp4

This should mean that my input is a fisheye lens with a diagonal field of view of 360 degrees and I want my output to be an equirectangular projection but this is what I get

enter image description here


Solution

  • ffmpeg -i input.mp4 -vf v360=fisheye:equirect:ih_fov=360:iv_fov=360 output.mp4

    Diagonal FOV is not same as horizontal or vertical FOV. And your camera have both horizontal and vertical FOV of 360.