0

I'm working on a library that injects/embeds/writes metadata into a .mp4 file to allow the video to be displayed correctly as a 360 video. The input file is a standard .mp4 file in the equirectangular format which I need to inject the proper metadata to get it to display as a 360 video. I know tools like Google's Spatial Media Tool exist but if possible I would like to do it with FFmpeg.

The metadata injected by the Spatial Media tool looks like this and is what I am trying to achieve:

<?xml version="1.0"?><rdf:SphericalVideo
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:GSpherical="http://ns.google.com/videos/1.0/spherical/"><GSpherical:Spherical>true</GSpherical:Spherical><GSpherical:Stitched>true</GSpherical:Stitched><GSpherical:StitchingSoftware>Spherical Metadata Tool</GSpherical:StitchingSoftware><GSpherical:ProjectionType>equirectangular</GSpherical:ProjectionType></rdf:SphericalVideo>

These are all the things I have tried which did not work:

Method 1

ffmpeg -i input.mp4 -movflags use_metadata_tags -metadata Spherical=true -metadata Stitched=true -metadata ProjectionType=equirectangular -metadata StitchingSoftware=StreetviewJourney -codec copy output.mp4

I have tried many variations of it like adding GSpherical: and xmp: to the metadata tag.

Method 2

When I extract the metadata using ffmpeg it contains the spherical tag in the logs but not when I output it to a ffmetadata file. This was the command I used: ffmpeg -i injected.mp4 -map_metadata -1 -f ffmetadata data.txt

This is the output of the log:

 fps, 60 tbr, 15360 tbn, 120 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Side data:
      spherical: equirectangular (0.000000/0.000000/0.000000)

Method 3

I also tried to get the metadata using this command: ffprobe -v error -select_streams v:0 -show_streams -of default=noprint_wrappers=1 injected.mp4

This was the logs it outputted:

TAG:handler_name=VideoHandler
side_data_type=Spherical Mapping
projection=equirectangular
yaw=0
pitch=0
roll=0

I then tried to use this command but it didn't work:

ffmpeg -i chapmanspeak.mp4 -movflags use_metadata_tags -metadata side_metadata_type="Spherical Mapping" -metadata projection=equirectangular -metadata yaw=0 -metadata pitch=0 -metadata roll=0 -codec copy output.mp4

2 Answers 2

0

Metadata is not the same as frame side data. FFmpeg tool currently cannot do this, you need to program own thing using available API.

4
  • What C# API can do this?
    – TrueCP5
    Commented Aug 21, 2019 at 12:42
  • FFmpeg is written in C, not C#.
    – user12174
    Commented Aug 22, 2019 at 7:48
  • Of course but you can use FFmpeg in almost any language with a wrapper. But that doesn't answer my question.
    – TrueCP5
    Commented Aug 22, 2019 at 8:00
  • Something like this, but note that that may not be really enough at all as relevant stuff in muxer is not implemented by FFmpeg at all: ffmpeg.org/doxygen/3.3/group__lavu__video__spherical.html
    – user12174
    Commented Aug 22, 2019 at 9:26
0

you can try something like this if you just want to transcode instead of writing metadata freshly into the file

sudo ffmpeg -i 360video.MP4 -vcodec libx264 -strict unofficial -vprofile high  -acodec aac -f mp4  another.mp4
1
  • 3
    there is no reason to use sudo here.
    – polemon
    Commented Jul 20, 2020 at 8:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.