gopro-telemetry-exporter/bin/gopro-telemetry-exporter.js

48 lines
1.3 KiB
JavaScript
Executable File

#!/usr/bin/env node
'use strict';
const gpmfExtract = require('gpmf-extract');
const goproTelemetry = require(`gopro-telemetry`);
const fs = require('fs');
const minimist = require('minimist');
const _ = require('lodash');
const { version } = require(__dirname + '/../package');
async function main(options) {
if (options.version) {
return console.log(`gopro-telemetry-exporter v${version}`)
}
const res = await gpmfExtract(bufferAppender(options.input, 10 * 1024 * 1024));
function bufferAppender(path, chunkSize) {
return function (mp4boxFile) {
var stream = fs.createReadStream(path, { highWaterMark: chunkSize });
var bytesRead = 0;
stream.on('end', () => {
mp4boxFile.flush();
});
stream.on('data', chunk => {
var arrayBuffer = new Uint8Array(chunk).buffer;
arrayBuffer.fileStart = bytesRead;
mp4boxFile.appendBuffer(arrayBuffer);
bytesRead += chunk.length;
});
stream.resume();
};
}
goproTelemetry(res, _.omit(options, ['_', 'input', 'output']), telemetryData => {
if (options.preset === 'csv') {
telemetryData = _.values(telemetryData)[0];
} else if (!_.isString(telemetryData)) {
telemetryData = JSON.stringify(telemetryData);
}
fs.writeFileSync(options.output, telemetryData);
});
}
main(minimist(process.argv.slice(2)));