init repo
This commit is contained in:
commit
0c5b9b5464
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
node_modules
|
12
add_speed_overlay.sh
Executable file
12
add_speed_overlay.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
for videoFile in "$@"
|
||||||
|
do
|
||||||
|
echo "Extracting gpx for $videoFile"
|
||||||
|
./gopro-telemetry-exporter --input $videoFile --output "${videoFile%.*}.gpx" --GPS5Fix 3 --preset gpx --groupTimes 200
|
||||||
|
gpsbabel -i gpx -f "${videoFile%.*}.gpx" -x track,speed -o subrip -F - | grep -v Lat > "${videoFile%.*}.srt"
|
||||||
|
ffmpeg -i "${videoFile%.*}.srt" "${videoFile%.*}.ass"
|
||||||
|
sed -i 's/^Style: .*/Style: Default,SquareFont,12,\&Hffffff,\&Hffffff,\&H0,\&H0,0,0,0,0,100,100,0,0,1,1,0,1,10,10,10,0/' "${videoFile%.*}.ass"
|
||||||
|
ffmpeg -i $videoFile -vcodec h264_nvenc -vf subtitles="${videoFile%.*}.ass" -preset bd -b:v 20M "${videoFile%.*}.with_speed_overlay.mp4"
|
||||||
|
done
|
||||||
|
|
34
gopro-telemetry-exporter
Executable file
34
gopro-telemetry-exporter
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/bin/node
|
||||||
|
const gpmfExtract = require('gpmf-extract');
|
||||||
|
const goproTelemetry = require(`gopro-telemetry`);
|
||||||
|
const fs = require('fs');
|
||||||
|
const minimist = require('minimist');
|
||||||
|
const _ = require('lodash');
|
||||||
|
|
||||||
|
async function main(options) {
|
||||||
|
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']), telemetry => {
|
||||||
|
fs.writeFileSync(options.output, telemetry);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
main(minimist(process.argv.slice(2)));
|
3175
package-lock.json
generated
Normal file
3175
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
package.json
Normal file
18
package.json
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"name": "gopro-extract",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "gpx-extract.js",
|
||||||
|
"dependencies": {
|
||||||
|
"gopro-telemetry": "^1.1.34",
|
||||||
|
"gpmf-extract": "^0.1.21",
|
||||||
|
"lodash": "^4.17.20",
|
||||||
|
"minimist": "^1.2.5"
|
||||||
|
},
|
||||||
|
"devDependencies": {},
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user