UNPKG

avg-cli

Version:

CLI tools for AVG.js

87 lines (67 loc) 2.9 kB
'use strict'; function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const ffmpeg = require('fluent-ffmpeg'); const ffmpegPath = require('ffmpeg-static').path; const path = require('path'); const execFile = require('child_process').execFile; const fs = require('fs-extra'); const ora = require('ora'); const getFileListByExtension = require('../utils/getFileListByExtension.js'); ffmpeg.setFfmpegPath(ffmpegPath); function execFilePromise(exec, params) { return new Promise((resolve, reject) => { execFile(exec, params, function (err) { if (err) { reject(err); } else { resolve(); } }); }); } function changeExtension(filename) { const basename = filename.substr(0, filename.lastIndexOf('.')); return basename + '.mp3'; } /** * Convert all images in ./assets to webp format, * and output to ./dist/assets * * @param {string} dir project path */ module.exports = (() => { var _ref = _asyncToGenerator(function* (dir, options, onProgress) { let spinner = ora('正在优化音频...').start(); options = Object.assign({ sourceExtensions: ['wav', 'mp3', 'ogg'], // 目标扩展名设置目前是无效的,强制为webp targetExtension: 'mp3' }, options); let compressOptions; // if (options.lossless) { // compressOptions = ['-lossless', '-z', '6']; // } else { // compressOptions = ['-af', '-q', options.quality]; // } const fileList = yield getFileListByExtension(path.resolve(dir, 'assets'), [...options.sourceExtensions, ...options.targetExtension]); for (const file of fileList) { const originFilename = path.resolve(dir, 'assets', file); const webpFilename = changeExtension(path.resolve(dir, 'dist/assets', file)); spinner.text = `正在优化音频...${ file }`; fs.ensureDirSync(path.dirname(webpFilename)); // 判断是否为 targetExtension 格式,若为是,直接拷贝,否则进行格式转换 if (path.extname(file) === `.${ options.targetExtension }`) { fs.copySync(originFilename, webpFilename); } else { yield new Promise(function (resolve, reject) { ffmpeg(originFilename).save(webpFilename).on('error', reject).on('end', resolve); }); // await execFilePromise(cwebp, [...compressOptions, , '-o', ]); } } spinner.succeed('优化音频'); }); return function (_x, _x2, _x3) { return _ref.apply(this, arguments); }; })();