diff --git a/apps/browser/transcode.html b/apps/browser/transcode.html
index d06cad8..1b2ca23 100644
--- a/apps/browser/transcode.html
+++ b/apps/browser/transcode.html
@@ -21,8 +21,8 @@
ffmpeg.on("log", ({ message }) => {
console.log(message);
})
- ffmpeg.on("progress", ({ progress }) => {
- message.innerHTML = `${progress * 100} %`;
+ ffmpeg.on("progress", ({ progress, elapsed }) => {
+ message.innerHTML = `${progress * 100} %, elapsed: ${elapsed / 1000000} s`;
});
await ffmpeg.load({
coreURL: "/packages/core/dist/umd/ffmpeg-core.js",
diff --git a/packages/ffmpeg/src/types.ts b/packages/ffmpeg/src/types.ts
index 566c8a2..3618901 100644
--- a/packages/ffmpeg/src/types.ts
+++ b/packages/ffmpeg/src/types.ts
@@ -119,6 +119,7 @@ export interface LogEvent {
export interface ProgressEvent {
progress: number;
+ elapsed: number;
}
export type ExitCode = number;
diff --git a/packages/ffmpeg/src/worker.ts b/packages/ffmpeg/src/worker.ts
index 0df7247..a8c8eb2 100644
--- a/packages/ffmpeg/src/worker.ts
+++ b/packages/ffmpeg/src/worker.ts
@@ -72,8 +72,11 @@ const load = async ({
ffmpeg.setLogger((data) =>
self.postMessage({ type: FFMessageType.LOG, data })
);
- ffmpeg.setProgress((progress: number) =>
- self.postMessage({ type: FFMessageType.PROGRESS, data: { progress } })
+ ffmpeg.setProgress((data) =>
+ self.postMessage({
+ type: FFMessageType.PROGRESS,
+ data,
+ })
);
return first;
};
diff --git a/packages/types/types/index.d.ts b/packages/types/types/index.d.ts
index 09b832d..9cd8570 100644
--- a/packages/types/types/index.d.ts
+++ b/packages/types/types/index.d.ts
@@ -58,7 +58,7 @@ export interface FFmpegCoreModule {
reset: () => void;
setLogger: (logger: (log: Log) => void) => 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;
}
diff --git a/src/bind/ffmpeg/bind.js b/src/bind/ffmpeg/bind.js
index 68a5819..b512b5b 100644
--- a/src/bind/ffmpeg/bind.js
+++ b/src/bind/ffmpeg/bind.js
@@ -74,8 +74,8 @@ function setProgress(handler) {
Module["progress"] = handler;
}
-function receiveProgress(progress) {
- Module["progress"](progress);
+function receiveProgress(progress, elapsed) {
+ Module["progress"]({ progress, elapsed });
}
function reset() {
diff --git a/src/fftools/ffmpeg.c b/src/fftools/ffmpeg.c
index 3d296a5..e4f3ff8 100644
--- a/src/fftools/ffmpeg.c
+++ b/src/fftools/ffmpeg.c
@@ -1505,8 +1505,8 @@ static void print_final_stats(int64_t total_size)
}
}
-EM_JS(void, send_progress, (double progress), {
- Module.receiveProgress(progress);
+EM_JS(void, send_progress, (double progress, double elapsed), {
+ Module.receiveProgress(progress, elapsed);
});
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;
}
}
- send_progress((double)pts_abs / (double)duration);
+ send_progress((double)pts_abs / (double)duration, (double)pts_abs);
secs = 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) {
// 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);
}
}
diff --git a/tests/ffmpeg-core.test.js b/tests/ffmpeg-core.test.js
index efb4708..158391e 100644
--- a/tests/ffmpeg-core.test.js
+++ b/tests/ffmpeg-core.test.js
@@ -92,7 +92,7 @@ describe(genName("setProgress()"), () => {
it("should handle progress", () => {
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(progress).to.equal(1);
core.FS.unlink("video.avi");