Add elapsed time in progress callback
This commit is contained in:
parent
93cf474b9e
commit
85ad653a28
@ -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",
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
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;
|
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;
|
||||||
}
|
}
|
||||||
|
@ -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() {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
|
Loading…
Reference in New Issue
Block a user