UNPKG

ffcreator

Version:

FFCreator is a lightweight and flexible short video production library

125 lines (104 loc) 3.98 kB
const path = require('path'); const colors = require('colors'); import { FFCreator, FFImage, FFScene } from "ffcreator"; const createFFTask = () => { const bg1 = path.join(__dirname, '../../examples/assets/imgs/album/02.jpeg'); const bg2 = path.join(__dirname, '../../examples/assets/imgs/album/03.jpeg'); const logo1 = path.join(__dirname, '../../examples/assets/imgs/logo/logo1.png'); const logo2 = path.join(__dirname, '../../examples/assets/imgs/logo/logo2.png'); const img1 = 'https://gw.alicdn.com/imgextra/i3/O1CN01uRz3de23mzWofmPYX_!!6000000007299-2-tps-143-59.png'; const img2 = 'http://qzonestyle.gtimg.cn/qz-proj/weishi-pc/img/index/logo-l@2x.png'; const img3 = 'https://mat1.gtimg.com/sports/sports/3.png'; const img4 = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'; const img5 = path.join(__dirname, '../../examples/assets/imgs/txlogo.png'); const img6 = path.join(__dirname, '../../examples/assets/imgs/baidu.png'); const audio = path.join(__dirname, '../../examples/assets/audio/05.wav'); const outputDir = path.join(__dirname, './output/'); const cacheDir = path.join(__dirname, './cache/'); const imgs = [img1, img2, img3, img4, img5, img6]; const effects = shuffle([ 'backIn', 'rotateIn', 'backInLeft', 'fadeInUp', 'zoomIn', 'fadeInDown', 'fadeInDownBig', ]); // create creator instance const width = 800; const height = 600; const creator = new FFCreator({ cacheDir, outputDir, width, height, log: true, parallel: 8, //renderClarity: 'high', // render: 'canvas', // audio, }); // create FFScene const scene1 = new FFScene(); const scene2 = new FFScene(); scene1.setBgColor('#00cd1d'); scene2.setBgColor('#b33771'); // scene1.setFXAA(true); // add scene1 background const fbg1 = new FFImage({ path: bg1, x: width / 2, y: height / 2 }); scene1.addChild(fbg1); for (let i = 0; i < imgs.length; i++) { const d = 80; const x = randomA2B(d, width - d); const y = randomA2B(d, height - d); const fimg = new FFImage({ path: imgs[i], x, y }); fimg.addEffect(effects[i], randomA2B(1, 2), randomA2B(0.8, 5)); scene1.addChild(fimg); } // add logo const flogo1 = new FFImage({ path: logo1, x: width / 2 - 200, y: 100 }); flogo1.setScale(0.5); scene1.addChild(flogo1); const flogo2 = new FFImage({ path: logo1, x: width / 2 + 200, y: 100 }); scene1.addChild(flogo2); scene1.setDuration(8); scene1.setTransition('InvertedPageCurl', 1.5); creator.addChild(scene1); // add scene2 background const fbg2 = new FFImage({ path: bg2, x: width / 2, y: height / 2 }); scene2.addChild(fbg2); // add logo const flogo3 = new FFImage({ path: logo2, x: width / 2, y: height / 2 - 80 }); flogo3.setScale(0.9); flogo3.addEffect('fadeInDown', 1, 1.2); scene2.addChild(flogo3); scene2.setDuration(5); creator.addChild(scene2); creator.start(); //creator.openLog(); creator.on('start', () => { console.log(`FFCreator start`); }); creator.on('error', e => { console.log(colors.red(`FFCreator error: ${e.error}`)); }); 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; }; function randomA2B(a:number, b: number, int?: number) { const result = Math.random() * (b - a) + a; return int ? Math.floor(result) : result; } function shuffle(array: string[]) { return array.sort(() => 0.5 - Math.random()); }