字节笔记本
2026年2月22日
FFCreator:基于 Node.js 的轻量短视频加工库
FFCreator 是一个基于 Node.js 的轻量、灵活的短视频加工库。您只需要添加几张图片或视频片段再加一段背景音乐,就可以快速生成一个很酷的视频短片。本文将详细介绍 FFCreator 的核心特性、安装方法和使用示例。
项目简介
FFCreator 由腾讯新闻前端团队(tnfe)开发维护,是一个开源的短视频生成工具。截至目前,该项目在 GitHub 上已获得超过 3.1k stars,是一款非常受欢迎的视频处理库。
今天,短视频已成为一种越来越流行的媒体传播形式。像微视和抖音这种 app 每天都会生产成千上万个精彩短视频,而这些视频也为产品带来了巨大的流量和人气。随之而来,如何让用户可以快速生产一个短视频;或者产品平台如何利用已有的图片、视频、音乐素材批量合成大量视频就成为一个技术难点。
FFCreator 是一种轻量又简单的解决方案,只需要很少的依赖和较低的机器配置就可以快速开始工作。并且它模拟实现了 animate.css 90%的动画效果,您可以轻松地把 web 页面端的动画效果转为视频。
核心特性
- 完全基于 Node.js 开发:非常易于使用,并且易于扩展和开发
- 依赖少、易安装:跨平台,对机器配置要求较低
- 视频制作速度极快:一个 5 分钟的视频只需要 1-2 分钟
- 丰富的过渡动画:支持近百种场景炫酷过渡动画效果
- 多元素支持:支持图片、声音、视频剪辑、文本等元素
- 字幕组件:可以将字幕与语音 TTS 结合合成音频新闻
- 图表组件:可以制作数据可视化类视频
- 虚拟主播支持:支持简单(可扩展)的虚拟主播,您可以制作自己的虚拟主播
- CSS 动画转换:包含 animate.css 90%的动画效果,可以将 CSS 动画转换为视频
技术栈
- Node.js >= 8.0.0 - 运行环境
- FFmpeg - 视频编码处理
- node-canvas - 图形渲染
- headless-gl - 无头环境下的 WebGL 支持
安装指南
前置要求
- Node.js >= 8.0.0
- FFmpeg 已安装
1. 安装 node-canvas 及 headless-gl 依赖
注意:若是有显示设备的电脑,比如 Windows、Mac OSX 系统的个人 PC 电脑或者有显卡或显示设备的 server 服务器,则可跳过这一步无需安装此依赖。
CentOS / Redhat / Fedora 系统:
sudo yum install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel
sudo yum install mesa-dri-drivers Xvfb libXi-devel libXinerama-devel libX11-develDebian / Ubuntu 系统:
sudo apt-get install libcairo2-dev libjpeg-dev libpango1.0-dev libgif-dev build-essential g++
sudo apt-get install libgl1-mesa-dev xvfb libxi-dev libx11-dev2. 安装 FFmpeg
FFCreator 依赖于 FFmpeg,因此您需要安装 FFmpeg 的常规版本:
3. 安装 FFCreator
npm install ffcreator --save
# 或
yarn add ffcreator快速开始
const { FFScene, FFText, FFVideo, FFAlbum, FFImage, FFCreator } = require("ffcreator");
// 创建 FFCreator 实例
const creator = new FFCreator({
cacheDir,
outputDir,
width: 800,
height: 450
});
// 创建场景
const scene = new FFScene();
scene.setBgColor("#ffcc22");
scene.setDuration(6);
scene.setTransition("GridFlip", 2);
creator.addChild(scene);
// 创建图片并添加动画效果
const image = new FFImage({ path: path.join(__dirname, "../assets/01.jpg") });
image.addEffect("moveInUp", 1, 1);
image.addEffect("fadeOutDown", 1, 4);
scene.addChild(image);
// 创建文本
const text = new FFText({ text: "hello 你好", x: 400, y: 300 });
text.setColor("#ffffff");
text.setBackgroundColor("#000000");
text.addEffect("fadeIn", 1, 1);
scene.addChild(text);
// 创建多图相册
const album = new FFAlbum({
list: [img1, img2, img3, img4],
x: 250,
y: 300,
width: 500,
height: 300,
});
album.setTransition('zoomIn');
album.setDuration(2.5);
album.setTransTime(1.5);
scene.addChild(album);
// 创建视频片段
const video = new FFVideo({ path, x: 300, y: 50, width: 300, height: 200 });
video.addEffect("zoomIn", 1, 0);
scene.addChild(video);
// 输出视频
creator.output(path.join(__dirname, "../output/example.mp4"));
creator.start();
// 事件监听
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} `);
});使用示例
场景 1:添加背景音乐
// 添加全局背景音乐
const creator = new FFCreator({
cacheDir,
outputDir,
audio: path, // 背景音乐路径
});
// 或者动态添加
creator.addAudio({ path, loop, start });场景 2:为场景添加独立音乐
// 为每个场景添加自己的单独音乐,多用在自动配音场景
scene.addAudio(path);
// 或
scene.addAudio({ path, loop, start });场景 3:视频片段处理
const video = new FFVideo({ path, x: 100, y: 150, width: 500, height: 350 });
video.setTimes('00:00:18', '00:00:33'); // 设置视频片段时间
video.setAudio(true); // 开启视频背景音乐
creator.addChild(video);性能优化
FFCreator 3.0+ 使用 Node Stream 进行数据缓存,相比之前版本不但节省了磁盘空间而且加工速度得到进一步提升。
Stream 设置
const creator = new FFCreator({
cacheDir,
outputDir,
parallel: 10, // 单次并行渲染的视频分帧数目
highWaterMark: '6mb', // 水位线设置
pool: true, // 开启对象池方式
});参数说明:
| 参数 | 说明 |
|---|---|
parallel | 修改单次并行渲染的视频分帧数目,根据机器配置合理设置 |
highWaterMark | 水位线设置,控制内存使用 |
pool | 开启或关闭对象池方式,优化内存管理 |
启动项目
有显示设备的电脑
npm start无显示设备的服务器
使用 xvfb-run 命令启动程序:
xvfb-run -s "-ac -screen 0 1280x1024x24" npm start常见问题
1. 安装时提示错误 missing package 'xi'
错误信息:
No package 'xi' found
解决:
yum install libXi-devel libXinerama-devel libX11-devel2. 报错 doesn't support WebGL
解决: 使用 xvfb-run 启动:
xvfb-run -s "-ac -screen 0 1280x1024x24" npm start3. Npm 安装报错 node-pre-gyp
原因: Node 版本问题,v15 会出现此问题
解决: 将 Node 版本降低到 v14
相关项目
- shida - 基于 FFCreator 的可视化拖拽搭建短视频 Web 项目
- FFAIVideo - 利用 AI 大模型自动生成短视频
- awesome-ffcreator - FFCreator 相关开源项目和教程文章合集
项目链接
- GitHub 仓库:https://github.com/tnfe/FFCreator
- 官方文档:https://tnfe.github.io/FFCreator/
- 在线演示:https://tnfe.github.io/FFCreator/#/demo/normal
- License:MIT