写点什么

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

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

关注

评论 1 条评论

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

玩转云端| 看天翼云iBox智能盒子如何实现边缘侧的“神机妙算”

天翼云开发者社区

2022年中国快递出海市场发展洞察

易观分析

一带一路 快递

AiTrust下预训练和小样本学习在中文医疗信息处理挑战榜CBLUE表现

汀丶人工智能

nlp

五个堡垒机常见问题解答-行云管家

行云管家

网络安全 堡垒机 资产安全 IT资产安全

KubeEdge SIG AI发布首个分布式协同AI Benchmark调研

华为云开发者联盟

人工智能 深度学习 云原生 华为云 企业号十月 PK 榜

链上量化合约保险交易挖矿dapp系统开发

开发微hkkf5566

面试官竟然问我为啥要用MQ,幸亏我看了参考答案

一灯架构

Java Java 面试 10月月更

程序员脱口秀|10.20 硬核女孩召集!

Jina AI

程序员 活动 1024 活动报名

再添神器!Paddle.js 发布 OCR SDK

百度Geek说

JavaScript paddle 企业号十月 PK 榜

十大 CI/CD 安全风险(五)

SEAL安全

DevOps CI/CD 软件供应链安全 日志记录

【Mybatis】Mybatis generator如何修改Mapper.java文件

石臻臻的杂货铺

mybatis 10月月更

小程序化:企业降本增效新玩法

Speedoooo

小程序 远程办公 数字化管理 数字化办公 小程序容器

如何向大模型注入知识?达摩院通义对话模型SPACE系列探索

阿里技术

人工智能 机器学习 深度学习 NLP 大模型

数字先锋| 铺设一条县域医疗“康庄大道”!

天翼云开发者社区

过等保是什么意思?能简单解释下吗?

行云管家

网络安全 等保 等级保护 过等保

HUAWEI AppGallery Connect全新升级,支持HarmonyOS生态全生命周期服务!

HarmonyOS开发者

HarmonyOS

大数据测试之大数据系统及特点

千锋IT教育

【Mybatis】如何继承Mybatis中的Mapper.xml文件

石臻臻的杂货铺

mybatis 10月月更

读写锁还不会用StampedLock就Out了

JAVA旭阳

Java 并发 10月月更

音频功率放大电路(使用过的语音方案电路记录)

矜辰所致

10月月更 音频功率放大电路 语言模块

【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?

汀丶人工智能

nlp 知识图谱

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析06

桑榆

源码刨析 10月月更 C++

收集yum install安装的软件的全量依赖 rpm 包

琦彦

rpm yum 10月月更

告别丑陋判空,一个Optional类搞定

JAVA旭阳

Java 架构 并发 10月月更

汽车报告丨分析了比亚迪宋全网口碑,我们得出这个结论

前嗅大数据

数据分析 数据采集 爬虫工具 汽车咨询 比亚迪宋

京东云TiDB SQL优化的最佳实践

京东科技开发者

数据库 索引 sql SQL优化 TiDB

颜值经济下,车企的必备武器

华为云开发者联盟

云计算 后端 SaaS 华为云 企业号十月 PK 榜

Web3.0时代,区块链能做什么?

旺链科技

区块链 产业区块链 Web 3.0 企业号十月PK榜

天翼云赋能智慧农业新农人迎来好收成

天翼云开发者社区

聚焦DPU 技术研发与创新 天翼云打造全新一代云计算体系结构

天翼云开发者社区

PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)

汀丶人工智能

NLP 大模型

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