forked from mifi/editly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.js
37 lines (32 loc) · 1 KB
/
util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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,
};