Add elapsed time in progress callback
This commit is contained in:
parent
93cf474b9e
commit
85ad653a28
@ -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",
|
||||
|
@ -119,6 +119,7 @@ export interface LogEvent {
|
||||
|
||||
export interface ProgressEvent {
|
||||
progress: number;
|
||||
elapsed: number;
|
||||
}
|
||||
|
||||
export type ExitCode = number;
|
||||
|
@ -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;
|
||||
};
|
||||
|
2
packages/types/types/index.d.ts
vendored
2
packages/types/types/index.d.ts
vendored
@ -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;
|
||||
}
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user