Fix overwriting variables when running multiple instances.
This commit is contained in:
parent
fcc312abd3
commit
5204a89a0f
@ -1,6 +1,4 @@
|
|||||||
const { defaultArgs, baseOptions } = require('./config');
|
const { defaultArgs, baseOptions } = require('./config');
|
||||||
const { setLogging, setCustomLogger, log } = require('./utils/log');
|
|
||||||
const parseProgress = require('./utils/parseProgress');
|
|
||||||
const parseArgs = require('./utils/parseArgs');
|
const parseArgs = require('./utils/parseArgs');
|
||||||
const { defaultOptions, getCreateFFmpegCore } = require('./node');
|
const { defaultOptions, getCreateFFmpegCore } = require('./node');
|
||||||
const { version } = require('../package.json');
|
const { version } = require('../package.json');
|
||||||
@ -22,7 +20,11 @@ module.exports = (_options = {}) => {
|
|||||||
let ffmpeg = null;
|
let ffmpeg = null;
|
||||||
let runResolve = null;
|
let runResolve = null;
|
||||||
let running = false;
|
let running = false;
|
||||||
|
let customLogger = () => {};
|
||||||
let progress = optProgress;
|
let progress = optProgress;
|
||||||
|
let duration = 0;
|
||||||
|
let ratio = 0;
|
||||||
|
|
||||||
const detectCompletion = (message) => {
|
const detectCompletion = (message) => {
|
||||||
if (message === 'FFMPEG_END' && runResolve !== null) {
|
if (message === 'FFMPEG_END' && runResolve !== null) {
|
||||||
runResolve();
|
runResolve();
|
||||||
@ -30,6 +32,36 @@ module.exports = (_options = {}) => {
|
|||||||
running = false;
|
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 }) => {
|
const parseMessage = ({ type, message }) => {
|
||||||
log(type, message);
|
log(type, message);
|
||||||
parseProgress(message, progress);
|
parseProgress(message, progress);
|
||||||
@ -190,11 +222,12 @@ module.exports = (_options = {}) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const setLogger = (_logger) => {
|
const setLogger = (_logger) => {
|
||||||
setCustomLogger(_logger);
|
customLogger = _logger;
|
||||||
};
|
};
|
||||||
|
|
||||||
setLogging(logging);
|
const setLogging = (_logging) => {
|
||||||
setCustomLogger(logger);
|
logging = _logging;
|
||||||
|
};
|
||||||
|
|
||||||
log('info', `use ffmpeg.wasm v${version}`);
|
log('info', `use ffmpeg.wasm v${version}`);
|
||||||
|
|
||||||
|
@ -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,
|
|
||||||
};
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
Loading…
Reference in New Issue
Block a user