Add elapsed time in progress callback

This commit is contained in:
Jerome Wu 2023-07-23 23:20:58 +08:00
parent 93cf474b9e
commit 85ad653a28
7 changed files with 16 additions and 12 deletions

View File

@ -21,8 +21,8 @@
ffmpeg.on("log", ({ message }) => { ffmpeg.on("log", ({ message }) => {
console.log(message); console.log(message);
}) })
ffmpeg.on("progress", ({ progress }) => { ffmpeg.on("progress", ({ progress, elapsed }) => {
message.innerHTML = `${progress * 100} %`; message.innerHTML = `${progress * 100} %, elapsed: ${elapsed / 1000000} s`;
}); });
await ffmpeg.load({ await ffmpeg.load({
coreURL: "/packages/core/dist/umd/ffmpeg-core.js", coreURL: "/packages/core/dist/umd/ffmpeg-core.js",

View File

@ -119,6 +119,7 @@ export interface LogEvent {
export interface ProgressEvent { export interface ProgressEvent {
progress: number; progress: number;
elapsed: number;
} }
export type ExitCode = number; export type ExitCode = number;

View File

@ -72,8 +72,11 @@ const load = async ({
ffmpeg.setLogger((data) => ffmpeg.setLogger((data) =>
self.postMessage({ type: FFMessageType.LOG, data }) self.postMessage({ type: FFMessageType.LOG, data })
); );
ffmpeg.setProgress((progress: number) => ffmpeg.setProgress((data) =>
self.postMessage({ type: FFMessageType.PROGRESS, data: { progress } }) self.postMessage({
type: FFMessageType.PROGRESS,
data,
})
); );
return first; return first;
}; };

View File

@ -58,7 +58,7 @@ export interface FFmpegCoreModule {
reset: () => void; reset: () => void;
setLogger: (logger: (log: Log) => void) => void; setLogger: (logger: (log: Log) => void) => void;
setTimeout: (timeout: number) => void; setTimeout: (timeout: number) => void;
setProgress: (handler: (progress: number) => void) => void; setProgress: (handler: (progress: number, elapsed: number) => void) => void;
locateFile: (path: string, prefix: string) => string; locateFile: (path: string, prefix: string) => string;
} }

View File

@ -74,8 +74,8 @@ function setProgress(handler) {
Module["progress"] = handler; Module["progress"] = handler;
} }
function receiveProgress(progress) { function receiveProgress(progress, elapsed) {
Module["progress"](progress); Module["progress"]({ progress, elapsed });
} }
function reset() { function reset() {

View File

@ -1505,8 +1505,8 @@ static void print_final_stats(int64_t total_size)
} }
} }
EM_JS(void, send_progress, (double progress), { EM_JS(void, send_progress, (double progress, double elapsed), {
Module.receiveProgress(progress); Module.receiveProgress(progress, elapsed);
}); });
static void print_report(int is_last_report, int64_t timer_start, int64_t cur_time) static void print_report(int is_last_report, int64_t timer_start, int64_t cur_time)
@ -1650,7 +1650,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti
duration = file_duration; duration = file_duration;
} }
} }
send_progress((double)pts_abs / (double)duration); send_progress((double)pts_abs / (double)duration, (double)pts_abs);
secs = FFABS(pts) / AV_TIME_BASE; secs = FFABS(pts) / AV_TIME_BASE;
us = FFABS(pts) % AV_TIME_BASE; us = FFABS(pts) % AV_TIME_BASE;
@ -1736,7 +1736,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti
if (is_last_report) { if (is_last_report) {
// Make sure the progress is ended with 1. // Make sure the progress is ended with 1.
if (pts_abs != duration) send_progress(1); if (pts_abs != duration) send_progress(1, (double)pts_abs);
print_final_stats(total_size); print_final_stats(total_size);
} }
} }

View File

@ -92,7 +92,7 @@ describe(genName("setProgress()"), () => {
it("should handle progress", () => { it("should handle progress", () => {
let progress = 0; let progress = 0;
core.setProgress((_progress) => (progress = _progress)); core.setProgress(({ progress: _progress }) => (progress = _progress));
expect(core.exec("-i", "video.mp4", "video.avi")).to.equal(0); expect(core.exec("-i", "video.mp4", "video.avi")).to.equal(0);
expect(progress).to.equal(1); expect(progress).to.equal(1);
core.FS.unlink("video.avi"); core.FS.unlink("video.avi");