typeScript 接口(interface)及其与类型别名(type)的区别

article/2025/9/9 21:45:11

背景

最近自己在学习一些视频剪辑相关的工具,像爱剪辑,剪映这些软件。然后就想自己是不是也可以实现一个类似的,轻量级的在线剪辑工具。最后发现这个款node端的工具库FFCreator,接下来简单介绍一下如何来搭建开发环境,和基本的使用

什么是FFCreator

FFCreator是一个基于node.js的轻量、灵活的短视频加工库。您只需要添加几张图片或视频片段再加一段背景音乐,就可以快速生成一个很酷的视频短片。

FFCreator是一种轻量又简单的解决方案,只需要很少的依赖和较低的机器配置就可以快速开始工作。并且它模拟实现了animate.css90%的动画效果,您可以轻松地把 web 页面端的动画效果转为视频。

FFCreator特性

  • 完全基于node.js开发,非常易于使用,并且易于扩展和开发。
  • 依赖很少、易安装、跨平台,对机器配置要求较低。
  • 视频制作速度极快,一个 5 分钟的视频只需要 1-2 分钟。
  • 支持近百种场景炫酷过渡动画效果。
  • 支持图片、声音、视频剪辑、文本等元素。
  • 支持字幕组件、可以将字幕与语音 tts 结合合成音频新闻。
  • 支持图表组件,可以制作数据可视化类视频。
  • 支持简单(可扩展)的虚拟主播,您可以制作自己的虚拟主播。
  • 包含animate.css90%的动画效果,可以将 css 动画转换为视频。

原理简介

大多数视频处理通常离不开FFmpeg这个库,虽然FFmpeg在视频处理方面具有十分强大的功能。 但是在处理精细的动画效果方面FFmpeg就显得力不从心,并且它的使用也很不方便,需要开发去拼接大段的命令行参数。

对于处理更强的动画效果,业内有一种比价流行的方案就是基于After Effectsaerender.exe)的模板方案。但是这种方案也有不少问题(后续会有详细的比较说明) FFCreator使用opengl来处理图形渲染并使用shader后处理来生成转场效果,最后使用FFmpeg合成视频,基于opengl既十分高效又可以支持各种丰富的图形动画。

环境搭建

这里简单记录了我在mackbook和conetos8中搭建的过程和碰到的问题

由于FFCreator依赖ffmpeg,所有需要再先安装ffmpeg

1.macbook安装过程

brew install ffmpeg 

在安装过程碰到一个报错Error: ffmpeg: Failed to download resource "rav1e"

只需要重新执行brew install ffmpeg即可

2.centos8安装过程 由于FFmpeg在centos8中没有对应的存储库,所以需要通过其他的方式来安装,我这边找到一种安装方式,亲测可用

dnf install epel-release dnf-utilsyum-config-manager --set-enabled PowerToolsyum-config-manager --add-repo=<https://negativo17.org/repos/epel-multimedia.repo>dnf install ffmpeg 

查看安装是否成功

ffmpeg -version 

如何使用

1.安装ffcreator包

npm install ffcreator 

如果安装过程中碰到 ode-pre-gyp install --fallback-to-build --update-binary 卡住不动。 可以使用 cnpm来安装。

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install 

2.创建creator入口

const creator = new FFCreator({width: 500,height: 680
}); 

3.创建场景

const scene = new FFScene();
scene.setBgColor("#ffcc22");
scene.setDuration(6);
scene.setTransition("GridFlip", 2);
creator.addChild(scene); 

4.创建图片元素

const image = new FFImage({ path: path.join(__dirname, "./test222.png") });
image.setXY(250, 340);
image.setScale(2);
image.setWH(500, 680);
image.addEffect('fadeInDown', 1, 1);
scene.addChild(image); 

5.创建文字

const text = new FFText({text: '欢迎来到天鹅到家',x: 250,y: 80});text.setColor('#ffffff');text.setBackgroundColor('#b33771');text.addEffect('fadeInDown', 1, 1);text.alignCenter();text.setStyle({padding: [4, 12, 6, 12]});scene.addChild(text); 

6.添加事件监听

creator.on('start', () => {console.log(`FFCreator start`);
});
creator.on('error', e => {console.log(`FFCreator error: ${JSON.stringify(e)}`);
});
creator.on('progress', e => {console.log(`FFCreator progress: ${e.state} ${(e.percent * 100) >> 0}%`);
});
creator.on('complete', e => {console.log(`FFCreator completed: \n USEAGE: ${e.useage} \n PATH: ${e.output} `);
}); 

7.添加执行和输出目录

creator.output(path.join(__dirname, "./output/example.mp4"));
creator.start();// 开始加工 

8.通过执行node index.js即可输出视频 测试代码已经提交到github,可以下载来测试。

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享


http://chatgpt.dhexx.cn/article/NErIF6GX.shtml

相关文章

Type Description : This type is a general type that can be used to declare

错误描述&#xff1a; Complex type: param-valueType Description : This type is a general type that can be used to declare parameter/value lists. 解决方法&#xff1a; 把0移到init-param下面

Type and Value

Type and Value 前言一、reflect.Type1.1 数据结构1.2 方法1.2.1 所有类型通用方法1.2.2 不同基础类型的专有方法 二、reflect.Value总结参考资料 前言 reflect.Type和reflect.Value是go 反射的两大基本类型&#xff0c;一个管变量的类型方面&#xff0c;一个管变量的值方面。…

typescript interface 与 type 声明类型的区别

在 typescript 中, 我们定义类型有两种方式&#xff1a; 接口(interface) 和类型别名(type alias) 在官方文档中我们可以看到: Unlike an interface declaration, which always introduces a named object type, a type alias declaration can introduce a name for any kind…

type是什么

作者&#xff1a;newis 链接&#xff1a;https://www.zhihu.com/question/376890141/answer/1302417252 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 程语言的Type的话&#xff0c;有在不同的场景下有不同的意义…

Type-C

一、Type-C 从USB TYPE-C 的Spec上截一个USB TYPE-C母座的pin脚图&#xff1a; 可以看出&#xff0c;母座上有24根信号&#xff0c; 其中电源和地占据了8根&#xff0c;用于提升电流传输能力&#xff0c;剩下16个&#xff1a; &#xff08;1&#xff09;传输USB3数据的RXx和…

Java Type

Type 是Java 编程语言中所有类型的公共高级接口&#xff08;官方解释&#xff09;&#xff0c;也就是Java 中所有类型的”爹“。其中”所有类型“的描述尤为指的关注。它并不是我们平常工作中经常使用的int、String、List、Map等数据类型&#xff0c;而是从Java语言角度磊说&am…

常见USB接口总结:Type-A、Mini-USB、Micro-USB、Type-C等等

写在前面 最近在整理之前的笔记&#xff0c;打算把一些有价值的笔记发到CSDN分享一下。这篇总结参考的链接如下&#xff0c;结合了自己找的一些图片&#xff0c;非原创&#xff0c;侵权的话私聊我删除。 参考文章链接 https://mb.zol.com.cn/514/5147157.html 总览 标准Type-…

# USB Type-A、Type-B、Type-C及MicroUSB、MiniUSB接口定义

USB Type-A、Type-B、Type-C及MicroUSB、MiniUSB接口定义 文章目录 USB Type-A、Type-B、Type-C及MicroUSB、MiniUSB接口定义1 USB Type-A&#xff08;USB-A&#xff09;2 USB Type-B&#xff08;USB-B&#xff09;3 USB Type-C&#xff08;USB-C&#xff09;3.1 24Pin3.2 16Pi…

Java FileReader相对路径

实验一快要到DDL了&#xff0c;今天在用Javac和Java命令手动执行实验一的代码的时候发现一个问题&#xff0c;当时在IDEA中运行正常的代码&#xff0c;在javac编译手动用java执行的时候发现并不能通过&#xff0c;出问题的代码是一段&#xff08;试图&#xff09;使用相对路径来…

详解HTML的相对路径写法,详解URL相对路径的写法

虽然现在搭网站都会用各种框架&#xff0c;路径方面使用相对路径可能已经比较少了&#xff0c;不过还是总结一下吧。 假设D盘这个路径下有一些文件&#xff1a; D:\例子\html\images\ D:\例子\html\style\ D:\例子\html\example.html D:\例子\html\tupian.gif 1.若引用的资源和…

Python读取相对路径文件

例如下图目录结构: 第一种情况: 1)xxx.py想要打开a.txt,使用相对路径,有如下两种方式: 思路: xxx.py想打开的是b_file下的文件,XXX.py和b_file都在文件目录之下,两者是同级目录,因此操作就是在当前目录向下搜索,因此就可以很容易理解下面的意思了 特别提示:… \是错…

html 的相对路径和绝对路径

整篇文章是以 src 标签进行演示。 文章目录 一、相对路径 1、同级目录查找 2、上一级目录查找 3、下一级目录查找 二、绝对路径 一、相对路径 &#x1f475;相对路径&#xff1a;从当前所处的目录开始查找。 1、同级目录查找 写法&#xff1a; 1.1.直接写文件名&#xf…

java web项目 相对路径怎么写_理解JavaWeb项目中的路径问题——相对路径与绝对路径...

背景:html 在刚开始学习javaweb,使用servlet和jsp开发web项目的过程当中,一直有一个问题困扰着我:servlet 和 jsp 之间相互跳转,跳转的路径应该如何书写,才能正确的访问到相应的servlet或jsp文件?后来,在课堂上,通过老师的讲解,再加上本身的一些思考和实验,终于对we…

相对路径 各种情况

1.相对路径概念 1.1 相对路径就是相对于目标文件或&#xff08;相对虚拟目录&#xff09;的位置。&#xff0c;请看上图&#xff0c;“a.html” 文件里引用了“b.jpg”图片&#xff0c;由于“b.jpg”图片相对于“a.html”来说&#xff0c;是在同一个目录的,那么要在“a.html”文…

java中相对路径怎么写_java中如何使用相对路径读取文件

java中使用相对路径读取文件的方法:1、使用文件【File file = new File(“src/test.txt”)】方法;2、使用类的相对路径;3、使用当前线程的类加载器;4、读取web工程下的文件。 【相关学习推荐: java中使用相对路径读取文件的方法: 一、简单粗暴的 File file = new File(“…

linux 相对路径当前目录,Linux绝对路径和相对路径

前言 在使用linux远程连接操作文件时,我们就会遇到一个问题就是我们必须知道文件的存放位置,才能准确的找到文件并操作文件,在这里指明文件地址就有两种方式,那就是绝对路径和相对路径。 Linux文件目录 我们知道,Linux 系统中所有的文件(目录)都被组织成以根目录“/”开始…

golang 文件操作时相对路径问题

用os包进行Open,Create等操作的时候&#xff0c;需要传入一个path。 这个path 可以是绝对路径&#xff0c; 也可以是相对路径。 这里主要说一下相对路径的坑&#xff0c;在goland的里 // ./是你当前的工程目录&#xff0c;并不是该go文件所对应的目录。 // 比如myPro…

Java io流使用相对路径读取文件

前言&#xff1a; 在大多数时候我们会需要Java程序读取某个文件&#xff0c;不采用绝对路径读取文件&#xff0c;而采用相对路径读取。方法如下&#xff1a; 在工程目录下读取文件&#xff1a; 文件目录&#xff1a; /*** 工程目录下的相对路径读取文件数据*/ public void …

java读取文件相对路径_Java相对路径读取文件

不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的。 项目的文件夹结构: repathtest ├─src │ └─com │ └─lavasoft │ ├─test │ …

相对路径

相对/绝对路径 顾名思义&#xff0c;相对路径是相对于当前文件的路径。一般是较简短的&#xff0c;那么我们为什么不直接使用绝对路径&#xff0c;也就是文件存放的真实路径&#xff0c;例如&#xff1a;C:\Microsoft\test.txt。 为什么要用相对路径&#xff1f; 当我们把整个…