function extractAudio(fileinfo) { let tempAudioPath = '/tmp/' + fileinfo.source.name + '.flac'; fileinfo.destination.temp.audio = tempAudioPath; return new Promise((resolve, reject) => { ffmpeg(fileinfo.destination.temp.video) .videoBitrate(19200) .inputOptions('-vn') .format('flac') .audioChannels(1) .output(tempAudioPath) .on('end', function () { console.log('extracted audio'); resolve(fileinfo); }) .on('error', function (err, stdout, stderr) { reject(err); }) .run(); }); }
let convertAudiobook = (input, output, activationBytes, duration) => { return new Promise((resolve, reject) => { ffmpeg(input) .audioCodec('copy') .noVideo() .inputOptions([`-activation_bytes ${activationBytes}`]) .output(output) .on('end', () => { console.log('') // fix stdout resolve() }) .on('error', (err) => { console.log('') // fix stdout reject(err) }) .on('start', (cmd) => { logger.log('debug', cmd) }) .on('progress', (msg) => { process.stdout.write(`Converting Audiobook (using ${activationBytes} for decryption) ... ${currentTimemarkToPercent(msg.timemark, duration)}%` + '\r') }) .run() }) }
let addLoopedImage = (input, output, image, duration) => { return new Promise((resolve, reject) => { ffmpeg(input) .input(image) .inputOptions(['-r 1', '-loop 1']) .audioCodec('copy') .outputOptions(['-shortest']) .output(output) .on('end', () => { console.log('') // fix stdout resolve() }) .on('error', (err) => { console.log('') // fix stdout reject(err) }) .on('start', (cmd) => { logger.log('debug', cmd) }) .on('progress', (msg) => { process.stdout.write(`Adding looped cover image to Audiobook ... ${currentTimemarkToPercent(msg.timemark, duration)}%` + '\r') }) .run() }) }