The v360 filter has many projection formats, here the "ball" format. Seems to be a fisheye format close to 300° FOV with an alpha mask option. No practical use for a panoramic photographer, but visually interesting.
Here I animate the equirectangular file by making 360 equirectangular images with 1° horizontal increase*. Starting from the left, position -180 to 180 (the yaw range in v360).
ffmpeg v360 filter
* to increase the number of frames, I have to leave bash as it only accepts integers.
I would use Black Magic Design's Fusion Studio with Reactor to directly make an intermediate movie in any length.
180e.jpg
Equirectangular input (as .tif), the Buddha hall, National Museum, Phnom Penh, 2007.
software carpentry Bash Shell course
Bash Shell Scripting exercises learn programming the hard way
Bash - Getting started with Bash
Introduction to Bash Shell Scripting, Flavio Copes
shellcheck is your friend when the shell is stubborn.
To make a batch script, use bash or zsh as follows (delete the comments if in zsh):
#!/bin/bash
yaw=-180
# degrees, range -180 to 180. If you want to loop it, stop at 179.
frame=0
# start from 0.
while [ $frame -lt 360 ]
# (-lt = less than) loop from 0 to 359 frames, then stop.
do
ffmpeg -i a/input.tif -hide_banner -vf v360=input=e:output=e:yaw="$yaw" b/"$frame".jpg
yaw=$((yaw + 1))
# increase yaw by one (integer).
frame=$((frame + 1))
# increase image number.
done
Then, add 00 to image 1-9, add 0 to 10-99 for the next step (or use a file renamer):
a=1
for i in *.jpg; do
new=$(printf "%03d.jpg" ${a})
echo renaming ${i} ${new}
mv ${i} ${new}
let a=a+1
done
Make a high quality intermediate movie from the jpeg files in .mov (proRes422 or better) or .mkv format:
ffmpeg -r 30 -i b/%03d.jpg -c:v prores_ks -profile:v 3 -vendor apl0 -bits_per_mb 8000 -r 30 -pix_fmt yuv422p10le proRes422.mov
ffmpeg -i proRes422.mov -hide_banner -vf "v360=input=e:output=ball:pitch=0:interp=cubic:w=2048:h=2048" -pix_fmt yuv420p ball.mp4
pitch= 90 68 45 22 0 -22 -45 -68 -90The v360 filter has an alpha mask option: Build mask in alpha plane for all unmapped pixels by marking them fully transparent. Boolean value, by default disabled. Set to true with "alpha_mask=1". Apart from ball, the orthographic and perspective format have unmapped pixels that produces working alpha, any more?
ffmpeg -i proRes422.mov -hide_banner -vf "v360=input=e:output=ball:pitch=30:interp=cubic:w=2048:h=2048:alpha_mask=1" -c:v prores_ks -profile:v 4444 -alpha_bits 8 -bits_per_mb 8000 -pix_fmt yuva444p10le ball30alpha.mov
ffmpeg -i proRes422.mov -i ball30alpha.mov -hide_banner -filter_complex "overlay=x=W=4096:y=H=2048:x=w=2048:y=h=2048:x=1024:y=0,zscale=1080:540" -pix_fmt yuv420p -c:v libx264 -color_primaries bt709 -colorspace bt709 -color_range tv -color_trc 709 -movflags +faststart -preset slow -crf 18 ball_overlay1080f.mp4