2019-06-09 00:51:00 +00:00
|
|
|
'use strict';
|
|
|
|
|
2019-06-09 01:43:14 +00:00
|
|
|
import { exists } from 'fs-extra';
|
2019-06-25 01:11:14 +00:00
|
|
|
import { extname } from 'path';
|
2019-06-09 01:43:14 +00:00
|
|
|
import { exec } from 'exec';
|
2019-06-09 00:51:00 +00:00
|
|
|
//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}"`
|
2019-06-09 01:43:14 +00:00
|
|
|
let fileExists;
|
2019-06-09 00:51:00 +00:00
|
|
|
let raw;
|
|
|
|
let json;
|
|
|
|
let vid;
|
|
|
|
|
|
|
|
try {
|
2019-06-09 01:43:14 +00:00
|
|
|
fileExists = await exists(video);
|
2019-06-09 00:51:00 +00:00
|
|
|
} catch (err) {
|
|
|
|
return exit(err, 5);
|
|
|
|
}
|
2019-06-09 01:43:14 +00:00
|
|
|
if (!fileExists) {
|
2019-06-09 00:51:00 +00:00
|
|
|
//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) {
|
2019-06-25 01:11:14 +00:00
|
|
|
const ext : string = extname(video.toLowerCase());
|
|
|
|
let cmd = `ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
|
|
|
|
let backup_cmd = `ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
|
2019-06-09 01:43:14 +00:00
|
|
|
let fileExists;
|
2019-06-09 00:51:00 +00:00
|
|
|
let raw;
|
|
|
|
let frames;
|
|
|
|
|
|
|
|
try {
|
2019-06-09 01:43:14 +00:00
|
|
|
fileExists = await exists(video);
|
2019-06-09 00:51:00 +00:00
|
|
|
} catch (err) {
|
|
|
|
//return exit(err, 5);
|
|
|
|
console.error(err);
|
|
|
|
return false
|
|
|
|
}
|
2019-06-09 01:43:14 +00:00
|
|
|
if (!fileExists) {
|
2019-06-09 00:51:00 +00:00
|
|
|
//return exit(`File ${video} does not exist`, 6);
|
|
|
|
console.error(new Error(`File ${video} does not exist`));
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2019-06-25 01:11:14 +00:00
|
|
|
if (ext === '.mkv') {
|
|
|
|
cmd = backup_cmd;
|
|
|
|
}
|
2019-06-09 00:51:00 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|