Skip to content

Instantly share code, notes, and snippets.

@bleader
Created May 9, 2015 07:44
Show Gist options
  • Save bleader/5844671e36cc4f13e4f9 to your computer and use it in GitHub Desktop.
Save bleader/5844671e36cc4f13e4f9 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python2
# gpx
import gpxpy
import gpxpy.gpx
# srt
import pysrt
#misc
import argparse
import os
import sys
# parse argument
parser = argparse.ArgumentParser(description='Convert gpx info to srt')
parser.add_argument('-i', '--input',
required=True,
help='input gpx file')
parser.add_argument('-o', '--output',
default='out.srt',
help='output file, default to out.srt')
parser.add_argument('-f', '--force', action='store_true',
help='force overwritting output file')
parser.add_argument('-s', '--start', type=int,
help='start time offset in gpx, in seconds')
parser.add_argument('-e', '--end', type=int,
help='end time from start of gpx, in seconds')
args = parser.parse_args()
# parse gpx
gpx_file = open(args.input, 'r')
gpx = gpxpy.parse(gpx_file)
# open srt
if not os.path.isfile(args.output):
open(args.output, 'a').close()
else:
if not args.force:
print "Output file %s exists, use -f to force overwritting." % args.output
sys.exit(1)
else:
open(args.output, 'w').close()
sub = pysrt.open(args.output)
prev = 0
index = 0
for track in gpx.tracks:
for segment in track.segments:
for point in segment.points:
if prev == 0:
prev = point
start = point
continue
else:
diff = point.time_difference(start)
if diff < args.start or diff > args.end:
prev = point
continue
speed = point.speed_between(prev)
if speed != None:
start_time = pysrt.SubRipTime(seconds=point.time_difference(start) - args.start)
speed = point.speed_between(prev) * 3.6
item = pysrt.SubRipItem(start=start_time, text="speed: %f" %
speed, index=index)
index += 1
sub.append(item)
prev = point
sub.save()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment