ffcreator
Version:
FFCreator is a lightweight and flexible short video production library
100 lines (83 loc) • 2.77 kB
text/typescript
const path = require('path');
const colors = require('colors');
const shuffle = require('lodash/shuffle');
import { FFCreator, FFImage, FFScene, FFText } from 'ffcreator';
const width = 600;
const height = 400;
const logo1 = path.join(__dirname, '../../examples/assets/imgs/logo/logo1.png');
const logo2 = path.join(__dirname, '../../examples/assets/imgs/logo/logo2.png');
const audio = path.join(__dirname, '../../examples/assets/audio/01.wav');
const outputDir = path.join(__dirname, './output/');
const cacheDir = path.join(__dirname, './cache/');
const transitionDemoTask = () => {
const trans = shuffle(['Windows4', 'Stretch', 'Radiation', 'TricolorCircle', 'cube']);
const order = ['一', '二', '三', '四', '五'];
// create creator instance
const creator = new FFCreator({
cacheDir,
outputDir,
width,
height,
audio,
//cacheFormat:'jpg',
highWaterMark: '10mb',
frames: 6,
debug: false,
});
for (let i = 1; i < 6; i++) {
const transition = trans[i - 1];
const text = `这是第 ${order[i - 1]} 屏`;
const scene = creatScene({ index: i, transition, text });
creator.addChild(scene);
}
creator.openLog();
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(colors.yellow(`FFCreator progress: ${(e.percent * 100) >> 0}%`));
});
creator.on('complete', e => {
console.log(
colors.magenta(`FFCreator completed: \n USEAGE: ${e.useage} \n PATH: ${e.output} `),
);
console.log(colors.green(`\n --- You can press the s key or the w key to restart! --- \n`));
});
return creator;
};
const creatScene = ({
index,
transition,
text,
}: {
index: number;
transition: string;
text: string;
}) => {
const scene = new FFScene();
scene.setBgColor('#3b3a98');
scene.setDuration(5);
scene.setTransition(transition, 1.5);
// bg img
const img = path.join(__dirname, `./assets/imgs/trans/0${index}.jpeg`);
const bg = new FFImage({ path: img, x: width / 2, y: height / 2 });
bg.addEffect({ type: 'zoomingIn', time: 5 });
scene.addChild(bg);
// title text
const ftext = new FFText({ text, x: width / 2, y: height / 2 + 50, fontSize: 38 });
ftext.alignCenter();
ftext.addEffect('fadeInRight', 1, 1.3);
ftext.setStyle({ color: '#30336b', backgroundColor: '#ffffff', padding: 10 });
scene.addChild(ftext);
// add logo2
const logo = index === 1 ? logo2 : logo1;
const flogo = new FFImage({ path: logo, x: width / 2, y: height / 2 - 100 });
flogo.setScale(0.6);
flogo.addEffect('fadeInLeft', 1, 1);
scene.addChild(flogo);
return scene;
};