diff --git a/src/createFFmpeg.js b/src/createFFmpeg.js index c5425ce..f53d090 100644 --- a/src/createFFmpeg.js +++ b/src/createFFmpeg.js @@ -1,6 +1,4 @@ const { defaultArgs, baseOptions } = require('./config'); -const { setLogging, setCustomLogger, log } = require('./utils/log'); -const parseProgress = require('./utils/parseProgress'); const parseArgs = require('./utils/parseArgs'); const { defaultOptions, getCreateFFmpegCore } = require('./node'); const { version } = require('../package.json'); @@ -22,7 +20,11 @@ module.exports = (_options = {}) => { let ffmpeg = null; let runResolve = null; let running = false; + let customLogger = () => {}; let progress = optProgress; + let duration = 0; + let ratio = 0; + const detectCompletion = (message) => { if (message === 'FFMPEG_END' && runResolve !== null) { runResolve(); @@ -30,6 +32,36 @@ module.exports = (_options = {}) => { running = false; } }; + const log = (type, message) => { + customLogger({ type, message }); + if (logging) { + console.log(`[${type}] ${message}`); + } + }; + const ts2sec = (ts) => { + const [h, m, s] = ts.split(':'); + return (parseFloat(h) * 60 * 60) + (parseFloat(m) * 60) + parseFloat(s); + }; + const parseProgress = (message, progress) => { + if (typeof message === 'string') { + if (message.startsWith(' Duration')) { + const ts = message.split(', ')[0].split(': ')[1]; + const d = ts2sec(ts); + progress({ duration: d, ratio }); + if (duration === 0 || duration > d) { + duration = d; + } + } else if (message.startsWith('frame') || message.startsWith('size')) { + const ts = message.split('time=')[1].split(' ')[0]; + const t = ts2sec(ts); + ratio = t / duration; + progress({ ratio, time: t }); + } else if (message.startsWith('video:')) { + progress({ ratio: 1 }); + duration = 0; + } + } + }; const parseMessage = ({ type, message }) => { log(type, message); parseProgress(message, progress); @@ -190,11 +222,12 @@ module.exports = (_options = {}) => { }; const setLogger = (_logger) => { - setCustomLogger(_logger); + customLogger = _logger; }; - setLogging(logging); - setCustomLogger(logger); + const setLogging = (_logging) => { + logging = _logging; + }; log('info', `use ffmpeg.wasm v${version}`); diff --git a/src/utils/log.js b/src/utils/log.js deleted file mode 100644 index bb2f0fb..0000000 --- a/src/utils/log.js +++ /dev/null @@ -1,24 +0,0 @@ -let logging = false; -let customLogger = () => {}; - -const setLogging = (_logging) => { - logging = _logging; -}; - -const setCustomLogger = (logger) => { - customLogger = logger; -}; - -const log = (type, message) => { - customLogger({ type, message }); - if (logging) { - console.log(`[${type}] ${message}`); - } -}; - -module.exports = { - logging, - setLogging, - setCustomLogger, - log, -}; diff --git a/src/utils/parseProgress.js b/src/utils/parseProgress.js deleted file mode 100644 index dc1658a..0000000 --- a/src/utils/parseProgress.js +++ /dev/null @@ -1,28 +0,0 @@ -let duration = 0; -let ratio = 0; - -const ts2sec = (ts) => { - const [h, m, s] = ts.split(':'); - return (parseFloat(h) * 60 * 60) + (parseFloat(m) * 60) + parseFloat(s); -}; - -module.exports = (message, progress) => { - if (typeof message === 'string') { - if (message.startsWith(' Duration')) { - const ts = message.split(', ')[0].split(': ')[1]; - const d = ts2sec(ts); - progress({ duration: d, ratio }); - if (duration === 0 || duration > d) { - duration = d; - } - } else if (message.startsWith('frame') || message.startsWith('size')) { - const ts = message.split('time=')[1].split(' ')[0]; - const t = ts2sec(ts); - ratio = t / duration; - progress({ ratio, time: t }); - } else if (message.startsWith('video:')) { - progress({ ratio: 1 }); - duration = 0; - } - } -};