I normally use Pano2VR 5 (https://ggnome.com/) on my old Apple computer with Mac OS 10.14.6, (where I still have QuickTime Pro) to convert QTVRs to html5. When that doesn't work, ffmpeg might work.
Extract zipped file
"mh.mov.zip"
Open the QTVR file in ffmpeg:
ffmpeg -i mh.mov
and you get this metadata from the file:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mh.mov': Metadata : creation_time : 1998-09-21T11:56:24.000000Z Duration : 00:00:01.00, start: 0.000000, bitrate: 1759 kb/s Stream #0:0[0x1](eng): Data: none (qtvr / 0x72767471), 0 kb/s (default) Metadata : creation_time : 1998-09-21T11:56:24.000000Z handler_name : QTVR Media Handler Stream #0:1[0x2](eng): Data: none, 1 kb/s (default) Metadata : creation_time : 1998-09-21T11:56:24.000000Z handler_name : Panorama Media Handler Stream #0:2[0x3](eng): Video: cinepak (cvid / 0x64697663), rgb24, 144x480, 78 kb/s, 1 fps, 1 tbr, 3600 tbn Metadata : creation_time : 1998-09-21T11:56:24.000000Z handler_name : Apple Video Media Handler vendor_id : appl encoder : Cinepak Stream #0:3[0x4](eng): Video: mjpeg (Baseline) (jpeg / 0x6765706A), yuvj420p(pc, bt470bg/unknown/unknown), 576x160 [SAR 72:72 DAR 18:5], 1649 kb/s, 12 fps, 12 tbr, 3600 tbn Metadata : creation_time : 1998-09-21T11:56:24.000000Z handler_name : Apple Video Media Handler vendor_id : appl encoder : Photo - JPEGHere you can see that the pano is 1 s at 12 fps 576x160 px.
-map
ffmpeg -i mh.mov dir/%02d.jpg
To rotate tiles 90° clockwise:
ffmpeg transpose filter
"transpose=0"
90° counter-clockwise and vertical flip (default)
"transpose=1"
90° clockwise
"transpose=2"
90° counter-clockwise
"transpose=3"
90° clockwise and vertical flip
"transpose=2,transpose=2"
180°
Flip images horizontally:"hflip"
Flip images vertically:"vflip"
ffmpeg tile filter
You can combine two or more filters, you just need a comma:
ffmpeg -i dir/%02d.jpg -vf "tile=1x12,transpose=1" mh.jpg
Here the tiles are combined for circular projection, 1920x576 px. Pano2VR or similar can make the HTML5 files.
ffmpeg -i mh.jpg -vf "pad=1920:960:(ow-iw)/2:(oh-ih)/2" mh_eq1.jpg
ffmpeg -i mh.jpg -vf "pad=1920:960:1920:192" mh_eq2.jpg
ffmpeg -i mh.jpg -vf "pad=1920:960:0:192" mh_eq3.jpg
ffmpeg -i dir/%02d.jpg -vf "tile=1x12,transpose=1,pad=1920:960:0:192" mh_eq.jpg
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ffmpeg -i dac2epFL.mov
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'dac2epFL.mov': Metadata: creation_time : 2002-10-09T21:04:37.000000Z Duration: 00:00:02.00, start: 0.000000, bitrate: 12498 kb/s Stream #0:0[0x1](eng): Data: none (qtvr / 0x72767471), 0 kb/s (default) Metadata: creation_time : 2002-10-09T21:04:37.000000Z handler_name : QTVR Media Handler Stream #0:1[0x2](eng): Data: none, 20 kb/s (default) Metadata: creation_time : 2002-10-09T21:04:37.000000Z handler_name : QTVR Panorama Media Handler Stream #0:2[0x3](eng): Video: mjpeg (Baseline) (jpeg / 0x6765706A), yuvj420p(pc, bt470bg/unknown/unknown), 400x400 [SAR 72:72 DAR 1:1], 11968 kb/s, 75 fps, 75 tbr, 3600 tbn Metadata: creation_time : 2002-10-09T21:04:37.000000Z handler_name : Apple Video Media Handler vendor_id : appl encoder : Photo - JPEG Stream #0:3[0x4](eng): Video: mjpeg (Baseline) (jpeg / 0x6765706A), yuvj420p(pc, bt470bg/unknown/unknown), 21x21 [SAR 72:72 DAR 1:1], 471 kb/s, 75 fps, 75 tbr, 3600 tbn Metadata: creation_time : 2002-10-09T21:04:37.000000Z handler_name : Apple Video Media Handler vendor_id : appl encoder : Photo - JPEGThe interesting parts are:
ffmpeg -i dac2epFL.mov dir/%3d.jpg
ffmpeg -i dir/%3d.jpg -hide_banner -vf "tile=5x5,tile=6x1" cm.jpg
ffmpeg -i cm.jpg -vf "v360=c6x1:c6x1:in_forder=frblud" strip.jpg
ffmpeg -i strip.jpg -vf "v360=c6x1:c6x1:out_forder=frblud" frblud.jpg
ffmpeg -i strip.jpg -vf "v360=c6x1:e" dacapo.jpg
ffmpeg -i cm.jpg -vf "v360=c6x1:e:in_forder=frblud" dacapo.jpg
ffmpeg -i dir/%d.jpg -vf "scale=w=512:h=512,tile=3x3" 1.png
ffmpeg -pattern_type glob -i "dir/*.jpg" -vf "scale=512:512,tile=3x3" 1.png
ffmpeg -i dir/%d.tif -filter_complex "tile=6x1" cubemap.tif
ffmpeg -i cubemap.tif -vf "v360=c6x1:e" equirectangular.tif
But if the tiles in one of the six directories look like this (with a total of 129 tiles):
c0_l0_0_0.jpg, 514x514 px
c0_l0_0_1.jpg, 514x514 px
c0_l0_0_2.jpg, 514x514 px
c0_l0_0_3.jpg, 377x514 px
c0_l0_1_0.jpg, 514x514 px
c0_l0_1_1.jpg, 514x514 px
c0_l0_1_2.jpg, 514x514 px
c0_l0_1_3.jpg, 377x514 px
c0_l0_2_0.jpg, 514x514 px
c0_l0_2_1.jpg, 514x514 px
c0_l0_2_2.jpg, 514x514 px
c0_l0_2_3.jpg, 377x514 px
c0_l0_3_0.jpg, 514x377 px
c0_l0_3_1.jpg, 514x377 px
c0_l0_3_2.jpg, 514x377 px
c0_l0_3_3.jpg, 377x377 px
next dir:
c1_l0_0_0.jpg, 514x514 px
etc.
exiftool (not ffmpeg!)
I used exiftool to get the list with sizes, "-csv" gives me comma separated values, "dir" is the folder containing the files:
exiftool -ImageSize -csv dir > sizes.txt
I shorten the file names here, adding them together:
0_0.jpg + 0_1.jpg + 0_2.jpg = 0.png 1542x514 (horizontal)
1_0.jpg + 1_1.jpg + 1_2.jpg = 1.png 1542x514
2_0.jpg + 2_1.jpg + 2_2.jpg = 2.png 1542x514
ffmpeg -pattern_type glob -i "dir/*.jpg" -vf "tile=3x1" dir/0.png
or
ffmpeg -i dir/%02d.jpg -filter_complex "tile=3x1" dir/0.png
0.png + 0_3.jpg = 0a.png 1919x514
1.png + 1_3.jpg = 1a.png 1919x514
2.png + 2_3.jpg = 2a.png 1919x514
ffmpeg -i dir/0.png -i dir/0_3.jpg -filter_complex hstack dir/0a.png
You can have more than two sources in hstack and vstack: "hstack=inputs=3"
0a.png + 1a.png + 2a.png = 012.png 1919x1542 vertical
3_0.jpg + 3_1.jpg + 3_2.jpg = 3210.png 1542x377 horizontal
3210.png + 3_3.jpg = 3233.png 1919x377 horizontal
And a final addition and we get the first cubic frame of the panorama at 1919x1919 px.
012.png + 3233.png = frame1919.png 1919x1919 px vertical
Now there is one problem with this. The file is odd sized. This is not good for file compression. Some codecs won't work with odd sized files. Scale to a near even number to keep size divisible by at least 2 (preferably 4, 8 or 16)
ffmpeg -i frame1919.png -vf "scale=1920:1920" frame1.tif
Repeat for the next five directories.
And then combine the cubic frames and convert them to equirectangular as above.