Vargol / spatial-media

Specifications and tools for 360º video and spatial audio. Modified for Google's VR180
53 stars 11 forks source link

zlib.error: Error -3 while decompressing data: invalid stored block lengths #9

Closed MajorMurphy closed 8 months ago

MajorMurphy commented 1 year ago

Attempting to inject metadata into a stereoscopic VR180 mp4 file:

PS C:\Users\user\source\spatial-media> python.exe spatialmedia -i -s left-right -m equirectangular HET_0002_render_yt.mp4 HET_0002_render_yt_injected.mp4 Processing: C:\Users\major\Vuze VR Studio\Renders\HET_0002_render_yt.mp4 Traceback (most recent call last): File "C:\Users\major\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Users\major\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code exec(code, run_globals) File "C:\Users\major\source\spatial-media\spatialmedia\__main__.py", line 247, in <module> main() File "C:\Users\major\source\spatial-media\spatialmedia\__main__.py", line 223, in main metadata_utils.inject_metadata(args.file[0], args.file[1], metadata, File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\metadata_utils.py", line 410, in inject_metadata inject_mpeg4(infile, outfile, metadata, console, force_v1_360_equi_metadata) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\metadata_utils.py", line 334, in inject_mpeg4 mpeg4_file = mpeg.load(in_fh) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\mpeg4_container.py", line 42, in load contents = container.load_multiple(fh, 0, size) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 106, in load new_box.contents = load_multiple( File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 106, in load new_box.contents = load_multiple( File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 106, in load new_box.contents = load_multiple( File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 106, in load new_box.contents = load_multiple( File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 106, in load new_box.contents = load_multiple( File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 106, in load new_box.contents = load_multiple( File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 106, in load new_box.contents = load_multiple( File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 118, in load_multiple new_box = load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\container.py", line 55, in load return sv3d.load(fh, position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\sv3d.py", line 85, in load new_box.projection_box = mesh_projection.load(fh, projection_position, end) File "C:\Users\major\source\spatial-media\spatialmedia\..\spatialmedia\mpeg\mesh_projection.py", line 66, in load mesh_data = zlib.decompress(fh.read(size - 16), -15) zlib.error: Error -3 while decompressing data: invalid stored block lengths

MS Windows 10.0.22621.1105 and Python 3.10.2

The mp4 file was rendered by Vuze VR Studio 3.4.7387, using with default settings for Youtube: h264 encoder, 1:1 ratio, 3840x3840 resolution. If uploaded directly to Youtube, processing never completes. (file is only 40MiB and <5 seconds)

Does anyone have any suggestions? It would be helpful if anyone could share an example VR180 file which can be successfully processed and uploaded to Youtube.

Thanks

Vargol commented 1 year ago

Looks like bad data in the headers, my tools have found the VR180 metadata put in by Vuze VR Studio, but if can't decompress the compressed mesh data. I've not see bad data from Vuze VR Studio but then again I used the Mac version and not very often, I use ffmpeg myself.

Here's a working injected file using my tool

https://www.dropbox.com/s/vwdz6k5asby1odx/output_injected.mp4?dl=0

and the youtube upload

https://youtu.be/70Wn-ipjcIs

You could 'save' the processed file by using a hex editor, look for the text proj it should be in the middle of this grouping if you find more than one svhd proj prhd

There will be other characters around and between that grouping, but they should be there Change a character in proj to something else e.g. prof being careful not to delete or add an extra character. Then it should run through the spatial media editor to add the metadata.

MajorMurphy commented 8 months ago

Sorry for the late reply. Thanks for the help resolving the issue, and providing such a useful tool!