欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用FFmpeg进行360全景视频格式转换:filter v360

程序员文章站 2022-03-22 08:31:49
简要介绍如何使用FFmpeg filter v360 进行全景视频格式转换。 v360支持多种投影格式相互转换,包括ERP(等距柱状投影), EAC(等角度立方体), cubemap(立方体)等。对于立方体,支持设置输出面的顺序,以及对某一个面进行旋转。...

1. FFmpeg v360介绍

FFmpeg在目前最新版4.3中加入了一个新的filter v360,功能是对不同投影格式的360度全景视频做格式转换。在此之前据我了解只有很多小的第三方的实现,现在FFmpeg终于加入了这个功能。
官方文档: FFmpeg v360 filter.

2. 用法和参数

官方示例:实现从ERP到立方体的转换:

ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_pad=0.01 output.mkv

解释一下参数的含义:
最基本的参数格式如下:

v360=input_format:output_format

其中input_format和output_format分别是原始投影格式和目标投影格式。
e: ERP 投影格式
c: 立方体投影格式
c3x2: c后面加3x2指的是输出立方体视频的排列方式。目前支持三种:3x2, 1x6, 6x1
如果对于输入输出中的格式还有额外的参数要求,使用如下格式:

v360=input_format:output_format:format_1:arg_name=value

这里format_1指某个你要具体设置的格式,在冒号后面用arg_name= value的格式加具体参数。
在这个官方示例中,对于立方体还有额外的参数设置: cubic:out_pad=0.01, 这个是指立方体每个面要向外padding的像素数量是边长的1%。具体实现方式还不清楚。

3. v360支持的视频格式

全部支持的格式可以参考文档,这里总结几个我常用的格式。

Format argument Full name Notes
‘e’, ‘equirect’ Equirectangular
‘c3x2’, ‘c6x1’, ‘c1x6’ Cubemap with 3x2/6x1/1x6 layout 大量额外设置可选
‘eac’ Equi-Angular Cubemap
‘tsp’ Truncated square pyramid

4. 立方体(cubemap)额外参数设置

4.1 Padding

4.2 设置不同面输出顺序

使用参数out_forder设置六个用何种顺序排列。对于c3x2, 各个面按从左到右,从上到下排列:
举例:

ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_forder='rludfb' output.mkv

这个命令是指立方体的六个面按right, left, up, down, front, back的顺序输出。这个也是默认顺序。
注意,如果输入的视频不是默认顺序,则需要用in_forder来声明输入的顺序。举例:

ffmpeg -i input.mkv -vf v360=c3x2:e:cubic:in_forder='rludfb' output.mkv

4.3 分别设置每个面的旋转角度

使用参数in_frot和out_frot设置每个面的顺时针旋转角度。举例:

ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_frot='000012' output.mkv

这个命令会将输出的第五个面旋转90度,第六个面旋转180度。
默认是’000000’, 使用0 1 2 3 代表0 90 180 270度的旋转

本文地址:https://blog.csdn.net/qiutiantxwd/article/details/107283224