我正在开发一个库,它可以将元数据注入/嵌入/写入 .mp4 文件,以便视频能够正确显示为 360 视频。输入文件是等距矩形格式的标准 .mp4 文件,我需要注入适当的元数据才能将其显示为 360 视频。我知道像 Google 的工具空间媒体工具存在,但如果可能的话,我想用 ffmpeg 来实现。
这是我已经尝试过的方法,但它不起作用:
ffmpeg -i input.mp4 -movflags use_metadata_tags -metadata Spherical=true -metadata Stitched=true -metadata ProjectionType=equirectangular -metadata StitchingSoftware=StreetviewJourney -codec copy output.mp4
我尝试了它的许多变体,例如添加GSpherical:
和xmp:
到元数据标签。
空间媒体工具注入的元数据如下所示,这正是我想要实现的:
<?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>
编辑1
当我使用 ffmpeg 提取元数据时,它在日志中包含球形标签,但当我将其输出到 ffmetadata 文件时则不包含。这是我使用的命令:ffmpeg -i injected.mp4 -map_metadata -1 -f ffmetadata data.txt
这是日志的输出:
fps, 60 tbr, 15360 tbn, 120 tbc (default)
Metadata:
handler_name : VideoHandler
Side data:
spherical: equirectangular (0.000000/0.000000/0.000000)
编辑2
我还尝试使用此命令获取元数据:ffprobe -v error -select_streams v:0 -show_streams -of default=noprint_wrappers=1 injected.mp4
这是它输出的日志:
TAG:handler_name=VideoHandler
side_data_type=Spherical Mapping
projection=equirectangular
yaw=0
pitch=0
roll=0
然后我尝试使用这个命令,但是它不起作用: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