【问题标题】:How to "merge" 2 VR180 video files to get a 360 video (2xVR180) output with ffmpeg?如何“合并” 2 个 VR180 视频文件以使用 ffmpeg 获得 360 视频(2xVR180)输出?
【发布时间】:2022-01-21 22:02:07
【问题描述】:

我想知道如何实际使用 ffmpeg 从 2 个不同的 VR180 视频创建 2xVR180 视频文件。 也就是说,正面是一个立体 3D 视频,背面是另一个立体 3D 视频。

视频是在 3D 模式下使用 Insta360 EVO 拍摄的,因此我可以处理 4 个视频文件(左眼 2 个 INSV 文件和右眼其他 2 个 INSV 文件),o 直接使用 2 个拼接的 HEVC/ MP4 文件。

我知道结果不会是 360 度 3D 立体视频,这就是我说“2xVR180”的原因。

感谢您的帮助

【问题讨论】:

    标签: video ffmpeg


    【解决方案1】:

    我终于找到了解决办法!

    “算法”是:

    • 将两个视频文件的左眼与右眼分开
    • 左眼合起来
    • 加入右眼
    • 将左眼与右眼结合
    • 调整视频大小

    结果类似于:

    Front left eye | Back left eye | Front right eye | Back right eye
    

    为了使用 ffmpeg,我使用了以下语法

    ffmpeg -i front_vr180.mp4 -i back_vr180.mp4 -filter_complex "[0:v]crop=2880:2880:0:0[aleft];[0:v]crop=2880:2880:iw-2880:0[aright];[1:v]crop=2880:2880:0:0[bleft];[1:v]crop=2880:2880:iw-2880:0[bright];[aleft][bleft]hstack=inputs=2[left];[aright][bright]hstack=inputs=2[right];[left][right]hstack=inputs=2[full];[full]scale=7680:-1[v]" -map "[v]" -b:v 200M -preset slow -crf 6 full_360VR_test.mp4
    

    我将裁剪过滤器(眼睛分离)与 hstack 过滤器(视频连接)链接起来,最终通过缩放过滤器调整视频大小。

    更多细节:

    • -i front_vr180.mp4 : 我想在我面前看到的 VR180 视频文件
    • -i back_vr180.mp4 : 后面想看的VR180视频文件
    • -filter_complex :我必须应用一系列过滤器才能使其正常工作
    • [0:v]crop=2880:2880:0:0[左]:
      • [0:v] 表示“第一个输入,视频通道”并放在过滤器之前表示这是此过滤器的输入
      • crop=2880:2880:0:0[aleft] 表示将裁剪输入以从 (0,0)(左上角)生成 2880x2880 大小。换句话说,第一个视频(视频A或前面)的左方。 [aleft] 只是一个标签,用于标识此过滤器的结果(视频 A 的左侧部分)
      • 获取 A 视频的右侧部分(正确)以及 B 视频的左侧和右侧部分也是如此
    • [aleft][bleft]hstack=inputs=2[left] 这意味着我会将两个左眼视频并排连接成一个唯一的 [left] 视频。如果 aleft 和 bleft 是 2880x2880 视频,则 [left] 将是 5760x2880 视频。
      • 用右眼获得 [正确] 的效果与 5760x2880 视频相同。
    • [left][right]hstack=inputs=2[full] : 同上逻辑,将[left]和[right]并排放入[full]中,实现3D SBS效果。

    此时,我们会有一个 2xVR180 的视频,但尺寸太大 (11520x2880),需要按比例缩小(例如 8K)。这是通过 [full]scale=7680:-1[v] 完成的。 7680 是宽度,-1 作为高度意味着我们让 ffmpeg 确定正确的高度以保持比例纵横比。这种缩小的结果,[v] 将是 7680x1920。

    • -map "[v]" : 表示只需要视频通道
    • -b:v 200M :此选项设置比特率。值取决于输入的视频文件...更多的比特率意味着更多的细节,但如果输入的比特率低,ffmpeg 不会发明细节。我选择了比特率 = 总和(输入比特率)。
    • crf 6:CRF 表示恒定速率因子。 0 = 无损,51 = 最差质量,使用 x264。
    • 预设慢:嗯,我认为 ffmepg 文档会比我更好地解释这一点。更慢,质量更好:)

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2019-03-30
      • 2018-10-14
      • 1970-01-01
      • 2015-05-09
      • 2018-04-23
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多