如何使用 FFmpeg 对 MV-HEVC 视频进行编码

如何将 3D 立体视频编码为 MV-HEVC 空间视频,以及如何将 MV-HEVC 空间视频解码为 3D 立体并排视频。

作者:Zachary Handshoe

在 SpatialGen,我们使用定制编码器做了大量工作,这样我们就可以流式传输世界上最具创新性的空间和沉浸式视频。本文将讨论如何利用 FFmpeg 将立体视频编码成 MV-HEVC,这还不是一件容易的事。

什么是 MV-HEVC?

MV-HEVC 是 “多视图高效视频编码 ”的缩写。它主要用于苹果公司的 “空间 ”或 “沉浸式 ”视频。这是一种 3D 视频,通常来自立体源。

3D 视频应该是这样的,左眼在画面的左边,右眼在画面的右边:

如何使用 FFmpeg 对 MV-HEVC 视频进行编码

MV-HEVC 是一种以更高效的方式组织视频数据的编解码器。它的主要优势有两点:

1. 文件大小更小
MV-HEVC 可以存储左眼和右眼之间的差异,而不是完整视图,因此文件大小比立体视频更小。这有助于降低流媒体成本,让低带宽互联网家庭也能观看空间内容。

2. 2D 原生播放功能
MV-HEVC 编解码器能够在 iOS 或 macOS 上以 2D 形式播放。这有助于原生 3D 视频文件吸引更多观众,而不仅仅是那些拥有 Quest 或 Apple Vision Pro 的观众。

如何将 MV-HEVC 解码为立体并排视频

确保拥有最新版本的FFmpeg。本例子在 macOS 上运行 FFmpeg 版本 7.1。

将 MV-HEVC 视频解码为立体 SBS 的 FFmpeg 命令如下:

ffmpeg -i mvhevc_video.mov -filter_complex \ 
“[0:v:view:0][0:v:view:1]hstack” -c:v hevc \ 
-tag:v hvc1 output_sbs.mp4

如何将立体并排视频编码为 MV-HEVC

希望有一天这将是一个简单的命令,但现在,有一个过程。FFmpeg 采用 x265 作为编解码器。MV-HEVC 是 HEVC 编解码器的 “扩展”,是 x265 的通用术语。

虽然 FFmpeg 支持解码 MV-HEVC 视频,但它并不支持 MV-HEVC。要将视频编码为 MV-HEVC,您需要下载最新版本的 x265(截至本文撰写时为 4.0),并从源代码开始构建。结果将不包含元数据,这意味着 Vision Pro 无法将文件识别为空间文件或沉浸式文件。

1)下载或克隆存储库,并确保已安装 4.0 版本。2024 年 9 月 13 日发布的版本支持 MV-HEVC。如果下载了存储库,请确保将其解压缩。bitbucket repo 是存储代码的地方。

我已在 macOS 上进行了测试。根据 x265 的构建文档,Windows 可能需要一些额外步骤。

2) 生成 make 文件。

打开终端,cd 到build文件夹并运行:

cmake -DENABLE_MULTIVIEW=ON ../source

这将生成您的 make 文件。

3)创建可执行文件

由于我们需要支持 MV-HEVC,因此我们需要在调用“make”时设置一个标志

cmake -DENABLE_MULTIVIEW=ON ../source

这将生成一个我们可以用于 MV-HEVC 编码的“x265”可执行文件。

4) 创建输入视频的原始 YUV 文件。这是 x265 可以接收的文件。将来可能会将帧从 FFmpeg 传输到 x265,这样您就不必写入文件了。请注意,这将创建一个大文件。

ffmpeg -i stereo_input.mp4 -pix_fmt yuv420p -f rawvideo stereo_raw.yuv

5) 为 x265 编码器创建mv_config.cfg 文件。此文件指定有关输入文件的详细信息,例如视图数量、格式和输入名称。保存此文件:

#Configure number of views in the multiview input video#
#--num-views <integer>#
--num-views 2

#Configuration for the input format of the video#
#--format <integer>#
# 0 : Two seperate input frames#
# 1 : One input frame with left and right view#
# 2 : One input frame with top and bottom view#
--format 1

#Configure input file path for each view#
##NOTE:Other input parameters such as input-csp/input-depth/fps must be configured through CLI##
--input "stereo_raw.yuv"

6) 运行 x265 编码 MV-HEVC 源。注意:提供正确的 fps 和输入分辨率,如果是 SBS 立体视频,则应为视频宽度的一半。

./x265 --multiview-config mv_config .cfg \ 
--fps  23.98  --input-res  960 x1080 --output mvhevc_output .hevc \ 
--profile main10 --colorprim bt709 \ 
--transfer bt709 --colormatrix bt709

7)将视频合并到容器中播放

ffmpeg -i mvhevc_output.hevc -c copy -tag:v hvc1 output.mov

好了,现在有了一个 MV-HEVC 视频!

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/52887.html

(0)

相关推荐

发表回复

登录后才能评论