You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.0 KiB
37 lines
1.0 KiB
const execa = require('execa');
|
|
|
|
function parseFps(fps) {
|
|
const match = typeof fps === 'string' && fps.match(/^([0-9]+)\/([0-9]+)$/);
|
|
if (match) {
|
|
const num = parseInt(match[1], 10);
|
|
const den = parseInt(match[2], 10);
|
|
if (den > 0) return num / den;
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
async function readFileInfo(ffprobePath, p) {
|
|
const { stdout } = await execa(ffprobePath, [
|
|
'-select_streams', 'v:0', '-show_entries', 'stream', '-of', 'json', p,
|
|
]);
|
|
const json = JSON.parse(stdout);
|
|
const stream = json.streams[0];
|
|
|
|
const rotation = stream.tags && stream.tags.rotate && parseInt(stream.tags.rotate, 10);
|
|
return {
|
|
// numFrames: parseInt(stream.nb_frames, 10),
|
|
duration: parseFloat(stream.duration, 10),
|
|
width: stream.width, // TODO coded_width?
|
|
height: stream.height,
|
|
framerateStr: stream.r_frame_rate,
|
|
rotation: !Number.isNaN(rotation) ? rotation : undefined,
|
|
};
|
|
}
|
|
|
|
const multipleOf2 = (x) => (x + (x % 2));
|
|
|
|
module.exports = {
|
|
parseFps,
|
|
readFileInfo,
|
|
multipleOf2,
|
|
};
|