写点什么

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

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

关注

评论 1 条评论

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

【跨国数仓迁移最佳实践4】MaxCompute 企业级能力升级:跨域访问控制与数据安全特性增强

阿里云大数据AI技术

人工智能 云计算 大数据 数据安全 数据迁移

AI技术在舆情监测中的创新应用与发展趋势

沃观Wovision

人工智能 AI+ 沃观Wovision 舆情监测系统

YashanDB STRING_TO_ARRAY函数

YashanDB

数据库

2025 WAIC 世界人工智能大会有哪些亮点?

GPU算力

为什么上了ERP系统后,员工效率反而变得更低了呢?

优秀

ERP ERP系统

五年磨一剑:Agent 时代追风不如造风

阿里巴巴云原生

阿里云 云原生 AI Agent

【MySQL索引失效场景】索引失效原因及最左前缀原则详解

不在线第一只蜗牛

MySQL 数据库

Vibecoding 新体验:实测 Qwen3 Coder 代码生成效果

阿里巴巴云原生

阿里云 云原生 agent Function AI

365 步数运动宝:创新运动营销解决方案

微擎应用市场

京东零售在智能供应链领域的前沿探索与技术实践

京东零售技术

【线程池饱和策略】线程池饱和策略及自定义方法

不在线第一只蜗牛

Java

全新 MQTT 订阅、BLOB 类型、多级存储支持:TDengine 时序数据库最新版本亮点速览

TDengine

tdengine 时序数据库 tsdb 国产时序数据库

WAIC现场速递:AI热浪扑面而来|小奇说

奇点云

聚焦大模型训练效率提升 北大依托昇腾突破细粒度混合并行技术

极客天地

企业私有化即时通讯工具如何选?

BeeWorks

即时通讯 IM 私有化部署

为什么选择 BeeWorks Meet?企业会议系统的私有化必要性

BeeWorks

即时通讯 IM 私有化部署

深度拆解LLM的核心技术栈,助您掌握从模型选型到部署优化的全流程

聚客AI学院

人工智能 agent 大模型落地 AI 智能体 RAG应用

英特尔的“变”与“稳”:在代工战局中寻找自己的节奏

科技热闻

龙蜥受邀参加2025开放计算技术大会,解码基础模型驱动下的系统创新与生态共建

OpenAnolis小助手

开源 AI 操作系统 龙蜥社区

100%开源!行业首个企业级智能体

京东零售技术

YashanDB STDDEV_SAMP函数

YashanDB

数据库

YashanDB STRING_AGG函数

YashanDB

数据库

融媒体平台如何借力海外舆情监测提升国际传播影响力?

沃观Wovision

海外舆情监控 沃观Wovision 舆情监测系统

助推宝:一站式营销拓客解决方案

微擎应用市场

朋友圈广告助手:高效流量变现工具

微擎应用市场

LoongCollector:构建智能时代的数据采集新范式

阿里巴巴云原生

阿里云 云原生 AI Agent

sql优化谓词下推在join场景中的应用

天翼云开发者社区

数据库 sql

Vercel 发布 AI SDK 5,引入语音 API;Ollama 新版本支持多模态交互 丨日报

声网

JUC并发—并发安全集合二

量贩潮汐·WholesaleTide

安全 JUC

where 1 = 1的作用?会影响性能吗?count(*) 和 count(1)哪个快?

电子尖叫食人鱼

数据库 sql

55款主流认证类SDK适配鸿蒙5,让数字签名、身份认证更安全更高效

新消费日报

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