Hi everyone,
I’ve been working on native support for DJI Osmo 360 (.OSV) recordings in MLT and Shotcut, eliminating the need to pre-stitch or transcode footage through DJI Studio before editing.
Demo Sample
Attached is an exported sample stitched and reframed entirely within Shotcut using the new pipeline:
• Video: 3840x1920 (4K Equirectangular) @ 29.97 fps, H.264
• Audio: AAC 48kHz Stereo with sample-accurate lip-sync
• Stabilization: Built-in Gyro Horizon Lock using embedded camera IMU telemetry
──────
Architecture & Implementation
The contribution is organized into modular parts:
- MLT Framework (modules/osv) — MLT PR Sign in to GitHub · GitHub
• Dual-stream Demuxing: Demuxes Stream 0 (front lens HEVC), Stream 1 (rear lens HEVC), and Stream 2 (audio).
• In-tree Telemetry Parser: Zero-dependency parser for camera metadata track (dvtm_oq101) to extract lens centers, focal lengths, distortion parameters, and gyro orientation quaternions.
• Vulkan Compute Stitcher: Cross-vendor GPU compute pipeline with real-time Horizon Lock and Full Lock stabilization. Embedded SPIR-V bytecode fallback ensures it builds and runs self-contained without
external shader path configuration.
• Companion .LRF Proxying: Automatically binds the in-camera 2048x1024 dual-fisheye .LRF companion file during interactive preview for effortless 60fps timeline scrub on modest GPUs.
• Trim-aware State Tracking: Handles timeline cut changes (I and O trim points) to flush stale frame caches and maintain continuous audio sync. - Shotcut UI Integration — Shotcut PR Sign in to GitHub · GitHub
• Registers *.osv / *.OSV in file dialogs.
• Hooks ProxyManager to auto-detect companion .LRF proxy files without transcoding. - Bigsh0t 360 Filter Improvements:
• Guarded against fov <= 0.0 and NaN parameter resets during trim operations (preventing screen collapse to solid colors).
• Avoided redundant per-frame map recomputations when camera orientation hasn’t changed.
• Optimized inner loop coordinate wrapping.
• (Patch available for Shotcut’s Bigsh0t build recipe).
Feedback and guidance on upstreaming are very welcome!