使用 FFmpeg v360 过滤器对 180 个 VR 素材进行变形

Posted

技术标签:

【中文标题】使用 FFmpeg v360 过滤器对 180 个 VR 素材进行变形【英文标题】:Unwarping 180 VR Footage with FFmpeg v360 Filter 【发布时间】:2021-07-01 17:27:03 【问题描述】:

我目前正在苦苦挣扎。找了好几天,也没有找到实现我们想做的命令。

我们拥有并排的 equirectangular 格式的 180 度立体 VR 素材,我们希望将其转换为平面格式,以便我们可以使用其他 AI 软件进行处理。

我们已经使用 FFmpeg 将文件沿宽度分成两半,因此我们有一个“右”眼和一个“左”眼视频文件。

对于每个视频文件,我们需要使用 FFmpeg(和 v360 过滤器)将 180 度 equirectangular 素材转换为平坦、未变形的视频文件。

我们已经尝试了以下示例:

ffmpeg -i 2LEFT.mp4 -vf "v360=input=equirect:ih_fov=180:iv_fov=180:output=flat" 2LEFTTEST.mp4

但是,这会导致视频非常扭曲/错位。

我们将不胜感激有关将现在单视场 180 度等距矩形镜头转换为平面视频文件的一些命令示例、提示和建议。

提前感谢您的帮助。

【问题讨论】:

“扁平”是什么意思?等长方形是平的!它是球体的平面投影。发布一些示例图片有助于理解。 【参考方案1】:

我最近遇到了类似的问题。以下是解决方案:如果您的视频已经分成左右视图,只需使用:

ffmpeg -i 2LEFT.mp4 -vf "v360=input=hequirect:output=flat" 2LEFTTEST.mp4

这与您尝试在投影类型中使用的命令不同。通常 VR180 对每只眼睛使用半等距投影。

我个人建议为 YouTube 视频设置输出视野和分辨率:

ffmpeg -i 2LEFT.mp4 -vf "v360=input=hequirect:output=flat:h_fov=100:v_fov=67.5:w=1280:h=720" 2LEFTTEST.mp4

最后,使用 filter_complex,您可以在一个命令中立即将视频剪切成左右视图:

ffmpeg -i 2.mp4 -filter_complex "[0:v]v360=input=hequirect:output=flat:h_fov=100:v_fov=67.5:in_stereo=sbs:out_stereo=sbs:w=1280:h=720[flat];[flat]split[left][right];[left]stereo3d=sbsl:ml[left_mono];[right]stereo3d=sbsl:mr[right_mono]" -map [left_mono] 2LEFTTEST.mp4 -map [right_mono] 2RIGHTTEST.mp4

【讨论】:

非常感谢叶戈尔的回复。我们已经测试了您建议的第一个命令,但它只抓取原始 hequirect 素材的中间焦点部分。我们需要能够展开整个镜头(展平/展开)。这可能吗?然后,我们将进行编辑、升级,然后重新变回 hequirect。 嗨,@TedWilmont。你不能让整个镜头变平,因为通过将一个半球投影到一个平面上,会发生大量信息丢失,并且反向扭曲将变得不可能。 Earth globe may be a good analogy。尽管如此,放大可能在半等距投影中效果很好。其他编辑,例如文本添加,可能存在于 VR180 的特殊编辑器中。

以上是关于使用 FFmpeg v360 过滤器对 180 个 VR 素材进行变形的主要内容,如果未能解决你的问题,请参考以下文章

使用 FFMPEG 一次应用多个过滤器

FFMPEG输出图像自动旋转180度[重复]

使用ffmpeg垂直或水平堆叠(马赛克)几个视频? [关闭]

FFmpeg amix + 音量过滤器创建饱和输出?

ffmpeg过滤器系列:序章,什么是ffmpeg过滤器?ffmpeg过滤器可以用来做什么

ffmpeg过滤器系列:序章,什么是ffmpeg过滤器?ffmpeg过滤器可以用来做什么