• Stars
    star
    2,816
  • Rank 16,167 (Top 0.4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 4 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A fast video processing library based on node.js (一个基于node.js的高速视频制作库)

English | 简体中文

NPM Version Package License Travis CI Code Style PRs Node Version

Overview

FFCreator is a lightweight and flexible short video processing library based on Node.js. You only need to add some pictures, music or video clips, you can use it to quickly create a very exciting video album.

Nowadays, short video is an increasingly popular form of media communication. Like weishi and tiktok is full of all kinds of wonderful short videos. So how to make users visually create video clips on the web easily and quickly. Or based on pictures Text content, dynamic batch generation of short videos is a technical problem.

FFCreator is a lightweight and flexible solution that requires few dependencies and low machine configuration to start working quickly. And it simulates 90% animation effects of animate.css. You can easily convert the animation effects on the web page side into videos.

Using FFCreator and vue.js, you can develop a web project that builds video by dragging and dropping, just as the h5 building tool. You can check it here.

When you need to process a lot of video clips and need faster synthesis speed, FFCreatorLite is a better choice, please click here for details.

For more introduction, please see here

Features

  • Based on node.js development, it is very simple to use and easy to expand and develop.
  • Very few dependencies, easy to install, cross platform, just a common configuration linux server.
  • The video processing speed is very fast, a 5 minute video only needs 1-2 minutes.
  • Nearly a hundred kinds of scene transition animation effects.
  • Support picture, sound, video clips, text and other elements.
  • Contains most animation effects of animate.css, css animation is converted to video.
  • Support subtitle components, can combine subtitles to speech to produce audio news.
  • Support chart components, you can make data visualization videos.
  • Support simple (expandable) VTuber, you can add YouTuber based on sequence frames.

Demo

Useage

Install npm Package

npm install ffcreator --save

Note: To run the preceding commands, Node.js and npm must be installed.

Node.js

const { FFScene, FFText, FFVideo, FFAlbum, FFImage, FFCreator } = require("ffcreator");

// Create FFCreator instance
const creator = new FFCreator({
    cacheDir,
    outputDir,
    width: 800,
    height: 450
});

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

// Create Image and add animation effect
const image = new FFImage({ path: path.join(__dirname, "../assets/01.jpg") });
image.addEffect("moveInUp", 1, 1);
image.addEffect("fadeOutDown", 1, 4);
scene.addChild(image);

// Create Text
const text = new FFText({ text: "hello 你好", x: 400, y: 300 });
text.setColor("#ffffff");
text.setBackgroundColor("#000000");
text.addEffect("fadeIn", 1, 1);
scene.addChild(text);

// Create a multi-photo Album
const album = new FFAlbum({
    list: [img1, img2, img3, img4],   // Picture collection for album
    x: 250,
    y: 300,
    width: 500,
    height: 300,
});
album.setTransition('zoomIn');      // Set album switching animation
album.setDuration(2.5);             // Set the stay time of a single sheet
album.setTransTime(1.5);            // Set the duration of a single animation
scene.addChild(album);

// Create Video
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();        // Start processing
creator.closeLog();     // Close log (including perf)

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

Some great open source projects developed based on FFCreator and excellent tutorial articles here

About Audio

Sound is the soul of a video. FFCreator supports multiple ways to add audio. You can not only add global background music, but also set your own voice or soundtrack for each individual scene.

  • In FFVideo - Turn on video background music (default off).
const video = new FFVideo({ path, x: 100, y: 150, width: 500, height: 350 });
video.setTimes('00:00:18', '00:00:33');
video.setAudio(true); // Turn on
  • Add a global background audio.
const creator = new FFCreator({
  cacheDir,
  outputDir,
  audio: path, // background audio
});

// or
creator.addAudio({ path, loop, start });
  • Add your own separate music for each scene.
scene.addAudio(path);
// or
scene.addAudio({ path, loop, start });

About Cache

FFCreator3.0+ uses node Stream for data caching. The original version frees up disk space and further improves the speed.

Stream settings

  • By setting parallel (or frames) to modify the number of video frames for a single parallel rendering.

    Note: This should be set reasonably according to the actual configuration of your machine, not that the larger the value, the better.

parallel: 10,
  • Set highWaterMark, you can learn about the highWaterMark water mark from here.
highWaterMark: '6mb',
  • Set the pool to turn on or off the object pool mode.
pool: true,

Installation

1. Install node-canvas and headless-gl dependencies

If it is a computer with a display device, such as a personal pc computer with windows, Mac OSX system, or a server server with a graphics card or display device, you can skip this step without installing this dependency.

If you are using Centos, Redhat, Fedora system, you can use yum to install.

sudo yum install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel

InstallXvfb and Mesa

sudo yum install mesa-dri-drivers Xvfb libXi-devel libXinerama-devel libX11-devel

If you are using Debian, ubuntu system, you can use apt to install.

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-dev

2. Because FFCreator depends on FFmpeg, you need to install a regular version of FFmpeg

For a more detailed tutorial, please check here

Start Up

If it is a computer with a display device, such as a personal pc computer or a server server with a graphics card or display device, start normally npm start

Otherwise, You must use the xvfb-run script command to start the program to use webgl under the Linux server

xvfb-run more detailed command parameters http://manpages.ubuntu.com/manpages/xenial/man1/xvfb-run.1.html

xvfb-run -s "-ac -screen 0 1280x1024x24" npm start

Questions

  1. During installation warning missing package'xi'
No package 'xi'

foundgyp: Call to 'pkg-config --libs-only-l x11 xi xext' returned exit status 1 while in angle/src/angle.gyp. while loading dependencies of binding.gyp while trying to load binding.gyp

Solution

yum install libXi-devel libXinerama-devel libX11-devel
  1. Start node app and prompt error message doesn't support WebGL....

Solution

The node app should be started as follows.

xvfb-run -s "-ac -screen 0 1280x1024x24" npm start
  1. Npm install error ERR! command sh -c node-pre-gyp install --fallback-to-build

Solution

It may be caused by your node version. If it is nodev15, there will be this problem. Automattic/node-canvas#1645 . Please use the stable version of node.js. For example, nodev14 (even version).

Contribute

You are very welcome to join us in developing FFCreator, if you want to contribute code, please read here.

License

MIT

More Repositories

1

TNT-Weekly

🙈 🙉 🙊 每周为您推荐国内外前端领域最新的优秀文章以及行业进展
5,158
star
2

awesome-blackmagic

🎭 ♠♥奇技淫巧 💠黑魔法大集合♦♣ 👺
1,027
star
3

wp2vite

一个让webpack项目支持vite的前端项目的转换工具。A front-end project automatic conversion tool。
JavaScript
709
star
4

shida

《视搭》是一个视频可视化搭建项目。您可以通过简单的拖拽方式快速生产一个短视频,使用方式就像易企秀或Maka 等 h5 搭建工具一样的简单,仅抛砖引玉希望您喜欢。
Vue
569
star
5

FEDiagram

图说前端>>收集各种前端技术图谱 🚕🚖🚗🚚🚛🚜
440
star
6

csijs

CSI.JS是一个特别的前端日志系统,帮你快速重建犯罪现场。
JavaScript
275
star
7

bbo

bbo is a utility library of zero dependencies for javascript. 🍖🌭🍔
JavaScript
275
star
8

vue3-infinite-list

一个支持百万数量级的Vue3无限滚动列表组件
TypeScript
224
star
9

limu

High performance immutable lib alternative to immer with the same api, based on shallow copy on read and mark modified on write mechanism.
JavaScript
217
star
10

awesome-state

collection of state management lib
187
star
11

transx

一个小巧玲珑的 vue 组件切换动画库, 支持 20 几种动画切换方式
JavaScript
183
star
12

clean-state

🐻 A pure and compact state manager, using React-hooks native implementation, automatically connect the module organization architecture. 🍋
TypeScript
120
star
13

tntweb-admin

react admin management system template
CSS
38
star
14

awesome-ffcreator

awesome ffcreator projects
30
star
15

jscalpel

A small feature library that makes it easier to manipulate objects
JavaScript
27
star
16

manage-table

对antd的table进行扩展,支持配置展示列
JavaScript
13
star
17

data-filler

make your backend response data shape reliable, with data-filler you can stay away from optional chain
JavaScript
2
star
18

html3canvas

html convert to canvas
TypeScript
1
star
19

hel

a solution of using micro module for frontend development
TypeScript
1
star