Transform360 编译指南
该指南指导编译基于Transform360的FFmpeg,并介绍Transform Filter的使用方法。基于这个你可以获取到将等圆柱映射的全景视频转换为正方体映射的全景视频。
什么是Transform360
Transform360的Github地址为: https://github.com/facebook/transform360
其官方介绍为:Transform360 is an equirectangular to cubemap transform for 360 video. 作用就是将图1的视频转换为图2的视频样子。 图1
图2
CubeMap优点
相比于equirectangular,cubemap可以在保持全景效果不变的情况下缩小25%的冗余内容。原因如下:例如平面视频标清的分辨率为 720×480 ,如果用六面体来表示所有的面临的六个面,则至少需要 6×480×480 的大小,而在保持同等清晰度的前提下,采用等圆柱映射在需要 8×480×480 的大小。
通过转换对比可见,等圆柱映射的4K全景视频(3840*1920),转换为相同的正方体映射的分辨率为(2880*1920),文件大小缩小了近1/3(不同视频是有差异)
编译指南
以下命令基于Ubuntu 16.04执行测试通过。
-
下载FFmpeg代码和Transform360代码
git clone https://github.com/facebook/transform360.git git clone https://github.com/FFmpeg/FFmpeg.git
-
将
transform360/Transform_V1/vf_transform_v1.c
文件复制到FFmpeg/libavfilter
文件夹下 - 进入
FFmpeg/libavfilter
文件夹,修改allfilters.c
,在video filter块中添加代码REGISTER_FILTER(TRANSFORM_V1, transform_v1, vf);
- 修改文件
Makefile
,在Filter块中添加代码OBJS-$(CONFIG_TRANSFORM_V1_FILTER) += vf_transform_v1.o
-
回退到
FFmpeg
目录,开始编译。sudo apt install pkg-config yasm libx264-dev ./configure --enable-shared --enable-libx264 --enable-gpl --prefix=/usr/local/ffmpeg make -j8 //8为CPU线程数目,可以加速编译 sudo make install、 sudo vim /etc/ld.so.conf.d/ffmpeg.conf //在文件中添加如下内容: /usr/local/ffmpeg/lib sudo ldconfig
-
到达任意目录,执行
ffmpeg
查看是否正常运行,如果正常则编译完成。
转换视频指南
- 通过
ffmpeg -h filter=transform_v1
可以查看帮助手册 -
转换命令
ffmpeg -i input.mp4 -vf transform_v1="input_stereo_format=MONO :max_cube_edge_length=960 :expand_coef=1.01" -vcodec h264 output.mp4
-
参数说明
input_stereo_format 输入视频格式,不确定可以不选会自动判定
output_layout 输出视频格式,默认CUBEMAP_32
max_cube_edge_length 每个正方形的边长,设置过大会自动设置为视频能转换的最大值
expand_coef 模糊边界参数,默认1.01不建议修改,设置为1的时候视频播放会有边界