写点什么

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

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

关注

评论 1 条评论

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

揭秘元宇宙背后的最炫科技风

云计算 华为云 元宇宙

国内首批!腾讯云EdgeOne通过信通院边缘计算最新评估

极客天地

2023-07-03:讲一讲Redis缓存的数据一致性问题和处理方案。

福大大架构师每日一题

redis 底层原理 福大大架构师每日一题

SQL 优化(四):如何使用 join

hungxy

火山引擎 DataLeap 构建Data Catalog系统的实践(一):背景与调研思路

字节跳动数据平台

HarmonyOS极客松“上分秘籍”! 高手们顶峰相见!

HarmonyOS开发者

HarmonyOS

大模型加速学科升级,飞桨赋能北邮“X+大模型”特色小学期

飞桨PaddlePaddle

人工智能 百度 paddle 百度飞桨

一篇文章带你上手性能测试框架K6

QE_LAB

自动化测试框架 测试自动化 #性能测试

合作、参与、让开源更易用 | 亚马逊的开源文化

亚马逊云科技 (Amazon Web Services)

云计算

第九届“互联网+”大赛产业赛道百度命题正式公布!57道命题,等你揭榜!

飞桨PaddlePaddle

人工智能 百度

对线面试官-Redis(五 为什么这么快为什么能抗住高并发)

派大星

Java 面试题

代码随想录训练营 Day06 - 哈希表(上)

jjn0703

inBuilder今日分享丨系统集成系列之异构接入

inBuilder低代码平台

集成

语音房源码搭建技术分享之降噪功能详解

山东布谷科技

软件开发 源码搭建 语音房源码 语音房

POCO库的安装与基础知识说明

芯动大师

EMAS热修复Sophix适配App加固的技术方案

移动研发平台EMAS

阿里云EMAS 移动热修复 app热修复 app加固

算法复杂度介绍

宁静知行者

算法

谁是家居智能化时代“头号玩家”? 小度全屋智能将登陆中国建博会

新消费日报

软件DevOps云化发展的趋势 【课程限时免费】

云计算 DevOps 云原生 华为云 华为开发者大会2023

扫光动效在移动端应用实践

百度Geek说

动效 移动端 企业号 7 月 PK 榜

技术分享| 融合通讯的架构介绍

anyRTC开发者

音视频 MCU mesh SFU 融合通讯

组合框架:融合创新技术,实现一次编码多平台运行

FinFish

flutter 跨端开发 小程序容器 跨端框架 跨端应用开发

用ChatGPT搞定K8s!

互联网工科生

k8s kubernetes 运维 ChatGPT

时序数据库 TDengine 与 DBeaver 达成合作,生态系统再壮大

爱倒腾的程序员

涛思数据 tdengine 时序数据库

如何自动化测试你的接口?—— Rest Assured

不在线第一只蜗牛

自动化 自动化测试 API

浪潮信息直播高能预告!令人感兴趣的高性能架构、CXL技术、数据库等硬件相关技术分享来了 | 第 83-85 期

OpenAnolis小助手

开源 高性能架构 龙蜥大讲堂 RDMA 浪潮信息

2023 MWC上海:移动云勇担新基建国家队 引领算网新趋势

极客天地

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