如何在FFmpeg连接文件时保留附属数据?

8
我有多个360度视频,希望在ffmpeg中进行拼接。这个指令本身很简单:
ffmpeg -f concat -i 0036_concat.txt -c copy -strict unofficial 36.mp4

其中0036_concat.txt只是文件列表。我遇到的问题是我无法让FFmpeg保留边缘数据。简单来说,源文件上运行ffprobe会包含以下内容:

Side data:
  spherical: equirectangular (0.000000/0.000000/0.000000)

我真的没办法让它传递到输出文件。

这个问题有一个适用于单个文件的解决方案,但在连接多个文件时不起作用。

如果有人知道如何注入整个字符串,我会很满意。


你能提供0036_concat.txt中列出的个别文件的链接吗? - llogan
@llogan -- 文件内容只是 file 'name.mp4'\nfile 'name2.mp4',等等。 - user578895
@llogan -- 不好意思,我看错了。这是一个1秒钟的剪辑:https://www.dropbox.com/s/qntwf6m85sxvar9/GS020101.mp4?dl=0 - user578895
这个有帮助吗?https://dev59.com/e2gt5IYBdhLWcg3w7ByL#50580239 - Tarun Lalwani
@TarunLalwani -- 很遗憾,不行。我之前看过那个答案,但不明白为什么它不起作用,我猜测这实际上不是 ffmpeg 中的“元数据”。关于边缘数据几乎没有文档资料。 - user578895
2个回答

5

显然,ffmpeg不支持那个。很多人建议为FFmpeg开发自己的扩展,但我觉得这太过于复杂。

相反地,我使用Google spatialmedia成功地将需要添加的附加数据(side data)添加到了由FFmpeg拼接而成的输出视频中。它非常简单,只需要:

python spatialmedia -i 36.mp4  equirectangular.mp4

您可以从其官方仓库获取spatialmedia。下载最新版本的发行版,解压缩后,您将能够直接运行上面的命令。
如果您没有安装Python,则需要先安装它。 这就是您所需的全部内容。
下面我会添加一个涉及到你自己的视频的例子。
我下载了你的示例文件,并创建了下面的文件列表: enter image description here 运行ffprobe GS020101.mp4,我们可以看到Side data: spherical: equirectangular (0.000000/0.000000/0.000000)在那里。 enter image description here 运行ffmpeg -f concat -i 0036_concat.txt -c copy -strict unofficial output.mp4 运行ffprobe output.mp4,如您所预期的那样,其中没有side data。 enter image description here 运行python spatialmedia -i output.mp4 equirectangular.mp4 enter image description here 运行ffprobe equirectangulat.mp4这次您可以成功看到预期的side dataenter image description here

1
很遗憾,这并没有真正回答问题。我知道空间媒体注入器,但并不是我所有的东西都是等距圆形的,所以它无法使用。 - user578895
这是我迄今为止找到的唯一答案,使我能够将一个糟糕拼接的360度视频上传到YouTube。谢谢!只需要解决我的拼接问题! - Trook2007

4

虽然看起来ffmpeg不支持此功能,但我发现ExifTool似乎可以胜任。在您的ffmpeg合并之后运行此命令:

exiftool -tagsFromFile first_file_inside_concat_file.mp4 -all:all 36.mp4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接