mcopy/src/ffprobe/index.ts

104 lines
1.8 KiB
TypeScript

'use strict';
import { exists } from 'fs-extra';
import { exec } from 'exec';
//const spawn = require('spawn');
//const exit = require('exit');
let system = {};
async function info (video : string) {
let cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "${video}"`
let fileExists;
let raw;
let json;
let vid;
try {
fileExists = await exists(video);
} catch (err) {
return exit(err, 5);
}
if (!fileExists) {
//return exit(`File ${video} does not exist`, 6);
console.error(new Error(`File ${video} does not exist`));
return false
}
try {
console.log(cmd);
raw = await exec(cmd);
} catch (err) {
//return exit(err, 7);
console.error(err);
return false
}
try {
json = JSON.parse(raw.stdout);
} catch (err) {
return raw.stdout;
}
if (json && json.streams) {
vid = json.streams.find((stream : any) => {
if (stream.width && stream.height) return stream;
});
}
if (vid) {
json.width = vid.width;
json.height = vid.height;
}
return json;
}
async function frames (video : string) {
let cmd = `ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
let fileExists;
let raw;
let frames;
try {
fileExists = await exists(video);
} catch (err) {
//return exit(err, 5);
console.error(err);
return false
}
if (!fileExists) {
//return exit(`File ${video} does not exist`, 6);
console.error(new Error(`File ${video} does not exist`));
return false;
}
try {
console.log(cmd);
raw = await exec(cmd);
} catch (err) {
console.error(err);
return false;
}
try {
frames = parseInt(raw.stdout)
} catch (err) {
return raw.stdout;
}
return frames;
}
function map (obj : any) {
console.dir(obj);
}
module.exports = (sys : any) => {
system = sys;
return {
info,
frames
}
}