前期准备:
ffmpeg3.2.10:http://ffmpeg.org/download.html#releases
Transform360:https://github.com/facebook/transform360
其中,ffmpeg有三种压缩包格式,任取一种就行了,我选的gz
不同格式对应不同解压方法,三种格式的解压方法分别是
gz 格式:tar -zxvf ffmpeg-3.2.10.tar.gz
xz 格式:tar -xvJf ffmpeg-3.2.10.tar.xz
bz2格式:tar -jxvf ffmpeg-3.2.10.tar.bz2
而对于transform360插件,下载一个zip格式压缩包,拷贝进系统就好了
zip格式:unzip transform360-master.zip
在桌面建立360文件夹,存放两个压缩包(个人喜好)
Ubuntu16.04上的安装工作
在https://github.com/facebook/transform360上还是有相关步骤的,我在此进行一定的演示操作。
1、安装ffmpeg,OpenCV的dev版本和编解码器库,操作如下
sudo apt-get install ffmpeg
sudo apt-get install libopencv-dev
sudo apt-get install nasm libxvidcore-dev libass-dev libfdk-aac-dev libvpx-dev libx264-dev
2、安装完毕后切换到transform360所在文件夹下,我的是在桌面/360中
指令:
unzip transform360-master.zip解压
cd transform360-master进入文件
cd Transform360进入transform360所在文件夹下
cmake ./
(发现出错,cmake尚未安装,按照所说安装cmake)
指令:
sudo apt install cmake
cmake ./
make
sudo make install
3、复制Transform360文件夹下vf_transform360.c到libavfilter在ffmpeg源中的子目录。
首先解压,再复制
指令:
返回到ffmpeg-3.2.10.tar.gz所在文件夹下(我是cd ..和cd ..)
tar -zxvf ffmpeg-3.2.10.tar.gz
4、编辑libavfilter/allfilters.c并通过在视频筛选器注册部分中添加以下行来注册该过滤器:
将代码REGISTER_FILTER(TRANSFORM360, transform360, vf);复制进去
5、编辑libavfilter/Makefile并将筛选器添加到Filter部分中的以下行:
OBJS-$(CONFIG_TRANSFORM360_FILTER) += vf_transform360.o
6、编辑vf_transform360.c在libavfilter文件夹
这两行代码
#include "transform360/VideoFrameTransformHandler.h"
#include "transform360/VideoFrameTransformHelper.h"
改为
#include "Transform360/Library/VideoFrameTransformHandler.h"
#include "Transform360/Library/VideoFrameTransformHelper.h"
7、在源文件夹中配置ffmpeg:
指令:
(用cd进入ffmpeg-3.2.10文件夹)
./configure --prefix=/usr/local/transform/ffmpeg --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libvpx --enable-libx264 --enable-libxvid --enable-libopencv --extra-libs='-lTransform360 -lstdc++'
如图,再用指令
make
make install (root权限)
完成安装
运行
将input.mp4放入ffmpeg-3.2.10中
打开终端,进入ffmpeg-3.2.10文件,用指令
./ffmpeg -h filter=transform360
然后用指令
./ffmpeg -i input.mp4 -vf transform360="input_stereo_format=2:cube_edge_length=1024:interpolation_alg=cubic:enable_low_pass_filter=1:enable_multi_threading=1:num_vertical_segments=15:adjust_kernel=1" output.mp4
注意:
参数示例:
ffmpeg -i input.mp4
-vf transform360 = “ input_stereo_format = MONO
:cube_edge_length = 512
:interpolation_alg = cubic
:enable_low_pass_filter = 1
:enable_multi_threading = 1
:num_horizo_ntal_segments = 32
:num_vertical_segments = 15
:adjust_kernel = 1 ”
output.mp4
含义:
cube_edge_length:立方体边的长度(对于三次变换,覆盖w和h,默认为0)(从0到16384)(默认值为0)
interpolation_alg:插值算法(从0到4)(默认CUBIC)
enable_low_pass_filter:启用基于低通滤波器的抗锯齿(从0到1)(默认1)
enable_multi_threading:启用多线程以加快基于低通滤波器的抗混叠(从0到1)(默认值为1)
num_horizo_ntal_segments:每个平面平面的水平段数(从1到500)(默认1)
num_vertical_segments:每帧平面垂直段的数量(从2到500)(默认5)
adjust_kernel:启用内核调整(从0到1)(默认值为1)
如图,就开始投影转换啦
转换后就会在目录下生产output.mp4
原视频:
转换后视频: