ffmpeg-progress-wrapper
Version:
A simple wrapper that helps with determinng the progress of the ffmpeg conversion
80 lines (64 loc) • 1.85 kB
text/typescript
import pidusage = require('pidusage');
import {Status} from "pidusage";
export function humanTimeToMS(text: string): number {
const parts: number[] = text.split(':').map(p => parseFloat(p));
let time: number = 0;
time += Math.floor(parts.pop() * 1000); //s
time += parts.pop() * 1000 * 60; //m
time += parts.pop() * 1000 * 60 * 60; //h
return time;
}
export async function pidToResourceUsage(pid: number): Promise<Status> {
return await pidusage(pid);
}
export namespace Parse {
export function getDuration(text: string): null | number {
const humanDuration = /duration: ((\d+:?){1,3}.\d+)/i.exec(text);
if (!humanDuration || !humanDuration[1]) {
return null;
}
return humanTimeToMS(humanDuration[1]) / 1000;
}
export function getStart(text: string): number {
return (
parseFloat(
(/start: (-?\d+\.\d+)/i.exec(text) || [])[1]
)
)
}
export function getRes(text: string): { width: number, height: number } {
const searchResult = /([1-9][0-9]*)x([1-9][0-9]*)/i.exec(text);
return {
width: parseInt(searchResult[1]),
height: parseInt(searchResult[2])
}
}
export function getFPS(text: string): number {
return (
parseFloat(
(/(\d+\.?\d*?) fps/i.exec(text) || [])[1]
)
);
}
export function getBitrate(text: string): number | null {
const bitrateRaw = /bitrate: (\d+)(\ ?(k|m|g|t)?b\/s)?/i.exec(text);
if (!bitrateRaw) {
return null;
}
let value = parseInt(bitrateRaw[1]);
// fallthrough on purpose
// noinspection FallThroughInSwitchStatementJS
switch (bitrateRaw[3]) {
case 't':
value *= 1024;
case 'g':
value *= 1024;
case 'm':
value *= 1024;
case 'k':
value *= 1024;
break;
}
return value;
}
}