写点什么

Video Renderer:高性能移动 Web 端视频编辑器

  • 2019-09-05
  • 本文字数:990 字

    阅读完需:约 3 分钟

Video Renderer:高性能移动Web端视频编辑器

Video Renderer是一款针对移动 Web 应用开发的高性能视频编辑器。在 2019 伦敦全栈工程师大会(Fullstack London 2019 conference)上,Threads Styling公司的软件开发工程师Forbes Lindesay分享了 Video Renderer 的开发经验。


Canvas API支持在浏览器内编辑视频,但通常用于编辑静态图像。Canvas API 特别适合在画布内渲染单个视频帧甚至是整个视频。


下面给出的代码示例来自“video + canvas = magic”:


function draw(v,c,w,h) {    if(v.paused || v.ended) return false;    c.drawImage(v,0,0,w,h);    setTimeout(draw,20,v,c,w,h);}
复制代码


代码中定义的函数以 HTML 视频元素、Canvas 元素、当前帧的宽度和高度为输入,调用drawImage将视频当前栈复制到 Canvas 元素中,进而调用 setTimeout 设置 20 毫秒超时,形成 50 fps 的流畅视频。


图像一旦复制到 Canvas 中,就可以读取并编辑单个帧。这时,每个帧可视为静态的图像,进而可直接使用 Github 上提供的多种 Canvas 图像操作软件库。


编辑器设计提供的另一项功能是分层(Layering)。对于堆栈,在当前视频之上入栈另一个视频非常易于实现,但绘图和动画的入栈并非易事。这是因为绘图和动画通常含有透明属性,该属性不支持开箱即用。


为解决上述问题,最简单的做法是在服务器添加一步额外的操作。一旦用户上载图像,就创建该图像的黑白拷贝。其中,白色表示图像中的可见部分,黑色表示图像中的透明区域。进而,编辑器使用一种“透明指引机制”,判断图像中应绘制的区域,然后剩余的区域渲染背景视频。


为在服务器端创建上述“透明指引机制”,编辑器设计上使用了FFmpeg软件库提供的 FilterComplex 方法。FFmpeg 支持创建图像过滤器。


需指出的是,在浏览器中构建视频编辑器存在一个局限。尽管视频编辑功能在浏览器中运行得非常好,但是不推荐对压缩视频使用,尤其是在移动端。为解决这一局限,编辑器将复制服务器端编辑的视频,进而使用 FFmpeg 生成并压缩视频。为此,在向服务器发送原始视频的同时,会发送可重现用户已完成编辑操作的一系列指令。


这是一种临时的解决方案。未来,编辑器将考虑使用WebAssembly在浏览器中编译并运行 FFmpeg。事实上,对此Github上已有实验性项目,但是该项目尚未达到可适用于生产环境。


上面介绍了 Threads Styling 移动端视频编辑器的关键技术。该编辑器以 MIT 许可方式提供在Github上。


原文链接:


High Performance Video Editing for the Mobile Web


2019-09-05 08:007208
用户头像

发布了 391 篇内容, 共 135.8 次阅读, 收获喜欢 256 次。

关注

评论 1 条评论

发布
用户头像
赞,最近正好在研究这个
2020-02-23 16:25
回复
没有更多了
发现更多内容

又出神作!阿里技术官再出山,操作性超强的Spring事务+AOP实践手册

比伯

Java 编程 程序员 架构 面试

keycloak集群化的思考

程序那些事

架构设计 架构师 权限系统 程序那些事 集群服务

案例研究之聊聊 QLExpress 源码 (五)

小诚信驿站

刘晓成 小诚信驿站 28天写作 QLExpress源码 聊聊源码

Spring Boot 中的MVC支持

武哥聊编程

Java mvc springboot SpringBoot 2 28天写作

架构师训练营第二周作业 - 命题作业

阿德儿

废弃fastjson!大型项目迁移Gson保姆级攻略

Zhendong

Java json Gson Fastjson

架构师训练营第二周作业 - 学习总结

阿德儿

一周信创舆情观察(1.4~1.10)

统小信uos

京东搜索排序在线学习的 Flink 优化实践

Apache Flink

flink

工信部:推动区块链等与工业互联网的融合技术研究

CECBC

大数据

“直男”审美?不存在的!来看看 “攻城狮”对一款IoT App的UI改造吧!

IoT云工坊

android App 物联网 IoT sdk

全网独家首发!—份破解大厂面试官千层套路的算法+数据结构笔记!真是太TM重要了

比伯

Java 架构 面试 程序人生 算法

不要用+""代替强转

BerryMew

量化交易系统开发软件源码

枪手博弈 - 在强者的世界,弱者的生存法则

石云升

博弈论 28天写作 枪手博弈

区块链:行业应用即将“引爆”

CECBC

区块链

智慧building之一 智能家居

张老蔫

28天写作

Redis 用的很溜,了解过它用的什么协议吗?

古时的风筝

redis RESP Redis 协议

springboot整合Shiro

Java架构师迁哥

区块链未来三年内将广泛落地

CECBC

区块链

数字货币量化对冲搬砖套利交易软件APP系统开发

系统开发

币值管理机器人系统开发|量化交易系统开发

W13902449729

币值管理机器人系统开发 量化交易系统开发

龙归科技 |企业办公自动化的未来

龙归科技

Kubernetes介绍篇:是什么?为什么要用?

xcbeyond

Docker Kubernetes 容器 28天写作 Kubernetes从入门到精通

DevSecOps:好处和挑战

啸天

敏捷开发 运维自动化 DevSecOps 应用安全

三分钟快速掌握 maven插件

田维常

maven

运维大规模ES集群的思考和实践

京东科技开发者

数据库 elasticsearch 数据分析

【Mysql-InnoDB 系列】锁定读

程序员架构进阶

MySQL innodb 锁机制 28天写作

图解 | 原来这就是网络

编程 网络 计算机

TRX智能合约系统开发案例详解

【小菜学网络】MAC地址详解

fasionchan

网络编程 网络协议 TCP/IP

Video Renderer:高性能移动Web端视频编辑器_大前端_Guy Nesher_InfoQ精选文章