Linux下ffmpeg添加Facebook/transform代码块实现将全景视频的球模型转换成立方体模型
Facebook事实上已开始在平台中支持360度全景视频的流播,但公司对此并不满足。其工程师更是基于锥体几何学设计出了一套全新的视频编码,号称最高能将全景视频的文件大小减少80%。(VR最新突破:全景视频压缩率达80%,即将普及爆发)

1、Facebook开源了其将2:1球模型视频转换成立方体模型的代码
https://github.com/facebook/transform
README:
# Transform Transform is a video filter that transforms video in equirectangular projection into a cubemap projection ## Building Transform is implemented as an ffmpeg video filter. To build Transform, follow these steps: . Checkout the source for ffmpeg
. Copy `vf_transform.c` to the libavfilter subdirectory in ffmpeg source
. Edit `libavfilter/allfilters.c` and register the filter by adding the line: `REGISTER_FILTER(TRANSFORM, transform, vf);` in the video filter registration section
. Edit `libavfilter/Makefile` and add the filter to adding the line: `OBJS-$(CONFIG_TRANSFORM_FILTER) += vf_transform.o` in the filter section
. Configure and build ffmpeg as usual ## Running Check out the options for the filter by running `ffmpeg -h filter=transform`
A typical execution would be something like `ffmpeg -i input.mp4 -vf transform=input_stereo_format=MONO:w_subdivisons=:h_subdivisons=:max_cube_edge_length=`
2、facebook/transform代码实现浅析
2.1、据facebook称将球模型转成立方体模型科技减少25%的数据量

2.2、转换成四棱锥可以减少80%的数据量,但这部分代码没有开源。

2.3、现有球模型是怎么展开成2:1的视频的,以地球仪和世界地图为例:

2.4、根据其开源代码在linux下用ffmpeg实现的结果,实现方法参见:Linux下编译ffmpeg并用GDB调试 以及根据README修改相应源码



2.5、立方体展开成十字形的结果:

2.6、源码的转换核心是坐标之间的转换,即怎么把球模型上的点和立方体对应以来,其实现方法是给定立方体模型上的坐标,根据坐标算出α和β(可以想成极坐标,水平一圈360度,上下180度);α、β分别除以360度和180度,按比例找出在球上对应的点(在2:1视频中的像素点)。

2.7、以正前方这个面为例:

2.8、将坐标转换成在空间内的立方体坐标(qx,qy,qz);qz表示球心(立方体中心)到前方平面的距离

2.9、转换成(tx,ty,tz)是考虑到视线可能移动,正前方的面也变了,但此处默认(y,p)都为0;故坐标不变

2.10、在立体空间内算出(α,β),α是水平偏向角,范围:(-180度,180度);β是竖直偏向角,范围:(-90度,90度)

2.11、算出(α,β)角度,就可以根据比例得到对应在2:1视频中相应的像素点


Linux下ffmpeg添加Facebook/transform代码块实现将全景视频的球模型转换成立方体模型的更多相关文章
- linux下永久添加静态路由
在linux下永久添加静态路由有两种方法: 添加路由的命令: 1,route add route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html 分享到:8 发布时 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- Linux下ffmpeg安装与开发配置
Linux下ffmpeg安装与开发配置 1. ffmpeg安装 安装环境: ubuntu 12.04 (1)删除已安装的文件,避免冲突 sudo apt-get remove ffmpeg x26 ...
- Linux下FFmpeg的安装编译过程【转】
本文转载自:http://www.linuxidc.com/Linux/2013-06/85628.htm 详细说下在Linux下FFmpeg的安装编译过程.参考 Ubuntu 10.04安装编译FF ...
- Linux下读写UART串口的代码
Linux下读写UART串口的代码,从IBM Developer network上拿来的东西,操作比較的复杂,就直接跳过了,好在代码能用,记录一下- 两个实用的函数- //////////////// ...
- Linux下9种优秀的代码比对工具推荐
大家好,我是良许. 在我们编写代码的时候,我们经常需要知道两个文件之间,或者同一个文件不同版本之间有什么差异性.在 Windows 下有个很强大的工具叫作 BeyondCompare ,那在 Linu ...
- 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。
在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"LX"替换一个"XL ...
- linux下ffmpeg环境搭建记录
1.Linux下安装yasm 官网下载:http://yasm.tortall.net/Download.html tar -zvxf yasm-1.3.0.tar.gz cd yasm-1.3.0/ ...
随机推荐
- Gamma Correction of OIIO
\apiitem{"oiio:ColorSpace" : string} The name of the color space of the color channels. ...
- 使用InstallUtil安装或卸载服务
使用InstallUtil安装或卸载服务 一.安装服务: C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe D:\MyServ ...
- 二十四、MongoDB数据库的使用
首先按照上一篇文章的介绍,启动并连接数据库 然后我们开始学习如何使用MongoDB数据库: 1.创建数据库 第一步,在cmd窗口执行: use dbname dbname是你打算要创建的数据库名称 执 ...
- 《Think in Java》20 21(并发)
chapter 20 注解 三种标准注解和四种元注解: 编写注解处理器 chapter 21 并发 基本的线程机制 定义任务 package cn.test; public class LiftOff ...
- 关于C#低版本升级高版本时,项目中引用Microsoft.Office.Interop.Word,程序提示不存在类型或命名空间名office.
Report.cs里using Microsoft.Office.Interop.Word;就会报错:编译器错误消息: CS0234: 命名空间“Microsoft.Office”中不存在类型或命名空 ...
- SFML从入门到放弃(0) 配置环境
SFML从入门到放弃(0) 配置环境 恩..开始划水..学sfml的时候顺便做点笔记什么的.. 安装 在linux里面打开终端 然后输入 sudo apt-get install libsfml-de ...
- 使用httpclient对zip格式的响应数据解压
HttpResponse response = httpClient.execute(httpPost); //对zip进行解压 response.setEntity(new GzipDecompre ...
- 基于Java软引用机制最大使用JVM堆内存并杜绝OutOfMemory
题记:说好的坚持一周两篇文章在无数琐事和自己的懒惰下没有做好,在此表达一下对自己的不满并对有严格执行力的人深表敬意!!!! -------------------------------------- ...
- iOS学习笔记(1)--认识Xcode6.1的Interface Builder和常用快捷键
Interface Builder基本界面 红色区域为工具栏(Tool Bar) 蓝色区域为导航区(Navigator Area) 绿色区域为编辑区(Editor Area) 黑色区域是调试区(Deb ...
- 集合之四:List接口
查阅API,看List的介绍.有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...