Fix overwriting variables when running multiple instances.

This commit is contained in:
rosenrose 2022-02-24 16:29:37 +09:00
parent fcc312abd3
commit 5204a89a0f
3 changed files with 38 additions and 57 deletions

View File

@ -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}`);

View File

@ -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,
};

View File

@ -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;
}
}
};