Skip to content

Commit

Permalink
Merge pull request #393 from Willy-JL/frame-progress
Browse files Browse the repository at this point in the history
Use frames for progress ratio
  • Loading branch information
jeromewu committed Aug 25, 2022
2 parents eb96336 + c309c56 commit c506954
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
19 changes: 18 additions & 1 deletion src/createFFmpeg.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ module.exports = (_options = {}) => {
let logging = optLog;
let progress = optProgress;
let duration = 0;
let frames = 0;
let readFrames = false;
let ratio = 0;

const detectCompletion = (message) => {
Expand Down Expand Up @@ -53,11 +55,26 @@ module.exports = (_options = {}) => {
prog({ duration: d, ratio });
if (duration === 0 || 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')) {
const ts = message.split('time=')[1].split(' ')[0];
const t = ts2sec(ts);
ratio = t / duration;
const f = parseFloat(message.match(/frame=\s*(\d+)/)[1]);
if (frames) {
ratio = Math.min(f / frames, 1);
} else {
ratio = t / duration;
};
prog({ ratio, time: t });
} else if (message.startsWith('video:')) {
prog({ ratio: 1 });
Expand Down
19 changes: 18 additions & 1 deletion src/utils/parseProgress.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
let duration = 0;
let frames = 0;
let readFrames = false;
let ratio = 0;

const ts2sec = (ts) => {
Expand All @@ -14,11 +16,26 @@ module.exports = (message, progress) => {
progress({ duration: d, ratio });
if (duration === 0 || 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')) {
const ts = message.split('time=')[1].split(' ')[0];
const t = ts2sec(ts);
ratio = t / duration;
const f = parseFloat(message.match(/frame=\s*(\d+)/)[1]);
if (frames) {
ratio = Math.min(f / frames, 1);
} else {
ratio = t / duration;
};
progress({ ratio, time: t });
} else if (message.startsWith('video:')) {
progress({ ratio: 1 });
Expand Down

0 comments on commit c506954

Please sign in to comment.