video - 如何使用 ffmpeg "merge"2 VR180 视频文件获得 360 视频 (2xVR180) 输出?

标签 video ffmpeg

我想知道如何实际使用 ffmpeg 从 2 个不同的 VR180 视频创建 2xVR180 视频文件。
也就是说,正面是一个立体3D视频,背面是另一个立体3D视频。
视频是在 3D 模式下使用 Insta360 EVO 拍摄的,因此我可以处理 4 个视频文件(左眼 2 个 INSV 文件和右眼其他 2 个 INSV 文件),或者直接处理 2 个拼接的 HEVC/MP4 文件。
我知道结果不会是 360 度 3D 立体视频,这就是我说“2xVR180”的原因。
谢谢您的帮助

最佳答案

我终于找到了解决办法!
“算法”是:

  • 将两个视频文件的左眼和右眼分开
  • 加入左眼
  • 加入右眼
  • 右眼加入左眼
  • 调整视频大小

  • 结果是这样的:
    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]裁剪=2880:2880:0:0[左]:
  • [0:v] 表示“第一个输入,视频 channel ”并放在过滤器之前表示这是此过滤器的输入
  • 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]":表示只需要视频 channel
  • -b:v 200M :此选项设置比特率。值取决于输入的视频文件...更多的比特率意味着更多的细节,但如果输入的比特率低,ffmpeg 不会发明细节。我选择了比特率 = 总和(输入比特率)。
  • crf 6 : CRF 表示恒定速率因子。 0 = 无损,51 = 最差质量,使用 x264。
  • 预设慢:嗯,我认为 ffmepg 文档会比我更好地解释这一点。更慢,质量更好:)
  • 关于video - 如何使用 ffmpeg "merge"2 VR180 视频文件获得 360 视频 (2xVR180) 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70419239/

    相关文章:

    Android - 在 SurfaceTexture 上绘制 YouTube 视频

    android - avcodec_encode_video2() 错误 -1 : Could not encode video packet - javacv

    qt - 在 Qt GUI 中显示实时摄像头图像

    video - FFmpeg mov to mp4 to gif

    video - 录制在屏幕上播放的视频或截屏视频的好程序是什么?

    linux - 支持 RTMP 的 FFMPEG 静态构建?

    video - FFmpeg 的 -bt(比特率容差)选项...?

    python - 在android上嵌入纯python(Cpython)

    python-3.x - 将 pi 的 opencv 视频传输到 ffmpeg 以进行 Youtube 流式传输

    ffmpeg - 使用 Ffmpeg 创建快速、保持质量和压缩视频(Mp4)。我需要通过压缩更快地转换和最好的质量