Merge pull request #393 from Willy-JL/frame-progress

Use frames for progress ratio
This commit is contained in:
jeromewu 2022-08-25 14:21:59 +08:00 committed by GitHub
commit c50695401b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 2 deletions

View File

@ -25,6 +25,8 @@ module.exports = (_options = {}) => {
let logging = optLog; let logging = optLog;
let progress = optProgress; let progress = optProgress;
let duration = 0; let duration = 0;
let frames = 0;
let readFrames = false;
let ratio = 0; let ratio = 0;
const detectCompletion = (message) => { const detectCompletion = (message) => {
@ -53,11 +55,26 @@ module.exports = (_options = {}) => {
prog({ duration: d, ratio }); prog({ duration: d, ratio });
if (duration === 0 || duration > d) { if (duration === 0 || duration > d) {
duration = d; duration = d;
readFrames = true;
} }
} else if (readFrames && message.startsWith(' Stream')) {
const match = message.match(/([\d\.]+) fps/);
if (match) {
const fps = parseFloat(match[1]);
frames = duration * fps;
} else {
frames = 0;
};
readFrames = false;
} else if (message.startsWith('frame') || message.startsWith('size')) { } else if (message.startsWith('frame') || message.startsWith('size')) {
const ts = message.split('time=')[1].split(' ')[0]; const ts = message.split('time=')[1].split(' ')[0];
const t = ts2sec(ts); const t = ts2sec(ts);
const f = parseFloat(message.match(/frame=\s*(\d+)/)[1]);
if (frames) {
ratio = Math.min(f / frames, 1);
} else {
ratio = t / duration; ratio = t / duration;
};
prog({ ratio, time: t }); prog({ ratio, time: t });
} else if (message.startsWith('video:')) { } else if (message.startsWith('video:')) {
prog({ ratio: 1 }); prog({ ratio: 1 });

View File

@ -1,4 +1,6 @@
let duration = 0; let duration = 0;
let frames = 0;
let readFrames = false;
let ratio = 0; let ratio = 0;
const ts2sec = (ts) => { const ts2sec = (ts) => {
@ -14,11 +16,26 @@ module.exports = (message, progress) => {
progress({ duration: d, ratio }); progress({ duration: d, ratio });
if (duration === 0 || duration > d) { if (duration === 0 || duration > d) {
duration = d; duration = d;
readFrames = true;
} }
} else if (readFrames && message.startsWith(' Stream')) {
const match = message.match(/([\d\.]+) fps/);
if (match) {
const fps = parseFloat(match[1]);
frames = duration * fps;
} else {
frames = 0;
};
readFrames = false;
} else if (message.startsWith('frame') || message.startsWith('size')) { } else if (message.startsWith('frame') || message.startsWith('size')) {
const ts = message.split('time=')[1].split(' ')[0]; const ts = message.split('time=')[1].split(' ')[0];
const t = ts2sec(ts); const t = ts2sec(ts);
const f = parseFloat(message.match(/frame=\s*(\d+)/)[1]);
if (frames) {
ratio = Math.min(f / frames, 1);
} else {
ratio = t / duration; ratio = t / duration;
};
progress({ ratio, time: t }); progress({ ratio, time: t });
} else if (message.startsWith('video:')) { } else if (message.startsWith('video:')) {
progress({ ratio: 1 }); progress({ ratio: 1 });