写点什么

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:007429
用户头像

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

关注

评论 1 条评论

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

利用Shell二次封装Elasticsearch客户端:简化数据检索与操作

测吧(北京)科技有限公司

测试

RocketMQ 流数据库解析:如何实现一体化流处理?

阿里巴巴云原生

阿里云 RocketMQ 云原生

如何利用ChatGPT进行翻译--精准翻译篇

三七互娱后端技术团队

AI翻译

聊聊低代码产品的应用场景

互联网工科生

TikTok直播专线:解决出海网络问题痛点,提升商业效率

Ogcloud

海外直播专线 海外直播 tiktok直播 tiktok直播专线 tiktok直播网络

大模型+医疗,优质数据助力新生态建立

澳鹏Appen

数据标注 大模型 医疗大模型

AI足球教练上岗利物浦,射门机会提高13%!来自DeepMind,网友:这不公平

Openlab_cosmoplat

AI

左手医生:医疗 AI 企业的云原生提效降本之路

阿里巴巴云原生

阿里云 容器 云原生

深度解析代码变更对业务的影响范围:业务影响范围关联分析

测吧(北京)科技有限公司

测试

实战代码静态分析工具:利用语法树数据工具提升代码质量

测吧(北京)科技有限公司

测试

自定义Elasticsearch索引模式:优化数据存储结构以提高检索效率

测吧(北京)科技有限公司

测试

数据要素×工业制造:500强大型制造集团携手奇点云,以数据为经营管理提效

奇点云

数字化 奇点云 数据要素 工业制造

代码覆盖率提升策略:利用静态分析工具优化测试覆盖率

测吧(北京)科技有限公司

测试

AlphaGPT在法律大模型圈子火了,案件仅需3分钟搞定

科技汇

【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit

HarmonyOS SDK

HarmonyOS

JVM字节码分析与修改:探索代码覆盖率底层实现框架

测吧(北京)科技有限公司

测试

一个基于.NET Core构建的简单、跨平台、模块化的商城系统

不在线第一只蜗牛

小程序 .net core

【FAQ】HarmonyOS SDK 闭源开放能力 —Scan Kit

HarmonyOS SDK

HarmonyOS

如何提升买家对独立站的信任感?提升转化率的技巧

技术冰糖葫芦

API 接口 API 文档

码上时刻|通过逻辑视图 Logic View 快速实现批流一体

Kyligence

互联网公司裁员现象调查:探寻背后原因与应对策略

小魏写代码

数字化工厂MES/MOM一体化解决方案PPT

工赋开发者社区

如何利用ChatGPT进行翻译--通用翻译篇

三七互娱后端技术团队

AI翻译

搭建Elasticsearch、Kibana和Logstash环境:构建强大的数据分析平台

测吧(北京)科技有限公司

测试

利用Elasticsearch进行文本数据的深度分析

测吧(北京)科技有限公司

测试

数据可视化与分析:利用Kibana展现数据的视觉化洞见

测吧(北京)科技有限公司

测试

JavaScript混淆工具选择与使用指南

深入了解一下http和https的区别

秃头小帅oi

Alpha律所管理系统,助力律师团队管理提效再升级

科技汇

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