avg-cli
Version:
CLI tools for AVG.js
87 lines (67 loc) • 2.9 kB
JavaScript
;
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);
};
})();