Linux workflow for 360° imagery (stitching etc)

Hi,
i have good workflows for 10+ years for normal Action Cam Photo and Video stuff processing and uploading to Mapillary.

I now got a 360° Camera (Kandao Qoocam 3 Ultra) and i am trying to find a Linux (I am Linux only) workflow.

Fetching imagery from the Camera via MTP is straight forward. But now i am left with the need to stitch the images from Dual Fisheye to Equirectangular before upload.

I tried my luck using ffmpeg which sortof works but has sharp stitching error lines.

ffmpeg -i kandao/Interval_20250221_135247_000012.JPG -vf "v360=dfisheye:equirect:ih_fov=197:iv_fov=197:h_fov=360:v_fov=180" file.jpg

I tried a bit around with opencv writing c++ code for splitting the images in Left and Right and then removing the lens distortion with the fisheye class - which seems to be problematic beyond 150/160° FOV (i read). Didnt get any further in stitching to equirectangular.

I had some days googling my way around the 'net and finding people but no real usable solution.

How do other Linux Only users deal with their 360° imagery?
I mean stitching dual-fisheye into Equirectangular?
I’d also be interested in Horizon correction etc.

Do people all use hugin and generate their own process step files? I had a hard time with hugin because of the dual-fisheye, single image stuff.

Flo

Does the camera provide any on-camera stitching options? Perhaps you could stitch on camera before copying the images over?

I’m on Linux and was able to produce an equirectangular image from a Go Pro MAX 360 frame using max2sphere.

The footage from the camera has two video tracks (plus the tracks with GPS and orientation telemetry and sound), which roughly correspond to the two cameras (although not exactly, there’s some “margin” from a camera in the frame of the other) and can be extracted as images with ffmpeg, that tool does the stitching. If you look at the repo there’s a description of the logic and links to a series of articles explaining it in detail.

This pipeline however does not set any metadata on the resulting image, so it’s not suitable for Mapillary uploading yet.