scripto
This commit is contained in:
parent
2347a998c5
commit
dccdc96146
79
json2srt.py
Executable file
79
json2srt.py
Executable file
|
@ -0,0 +1,79 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# by Bomboclat
|
||||||
|
|
||||||
|
# for great justice!
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
|
|
||||||
|
def convert(seconds):
|
||||||
|
sec_to_convert = seconds
|
||||||
|
converted_sec = timedelta(seconds = sec_to_convert)
|
||||||
|
dot = str(converted_sec).find('.')
|
||||||
|
if dot != -1:
|
||||||
|
timestamp = str(converted_sec)[:-3].replace('.',',')
|
||||||
|
else:
|
||||||
|
timestamp = str(converted_sec).replace('.',',')
|
||||||
|
|
||||||
|
return timestamp
|
||||||
|
|
||||||
|
|
||||||
|
def write_file(srt, outfile):
|
||||||
|
for d in srt:
|
||||||
|
with open(outfile, 'a') as f:
|
||||||
|
for value in d.values():
|
||||||
|
f.write('%s\n' % (str(value)))
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def json_to_srt(f):
|
||||||
|
'''
|
||||||
|
SRT file format:
|
||||||
|
|
||||||
|
sequence number
|
||||||
|
two-hash arrow to separate beginning and ending timecodes
|
||||||
|
caption
|
||||||
|
empty line
|
||||||
|
|
||||||
|
example:
|
||||||
|
1
|
||||||
|
00:00:00,000 --> 00:00:04,440
|
||||||
|
here the subtitle caption string
|
||||||
|
|
||||||
|
2
|
||||||
|
-8<--snip!--
|
||||||
|
'''
|
||||||
|
srt = []
|
||||||
|
for d in f:
|
||||||
|
sequence_number = f.index(d) + 1
|
||||||
|
startstop = convert(float(d['start'])) + " --> " + convert(float(d['end']))
|
||||||
|
#print(startstop)
|
||||||
|
new_sub = { 'seq': sequence_number, 'startstop': startstop, 'caption': d['content'], 'newline': '' }
|
||||||
|
srt.append(new_sub)
|
||||||
|
|
||||||
|
return srt
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# parse command line options
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('-i', '--infile', help='input file in json format', type=argparse.FileType('r'))
|
||||||
|
parser.add_argument('-o', '--outfile', action='store', dest='outfile', help="Directs the output to a name of your choice")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# loads a list of dicts
|
||||||
|
f = json.load(args.infile)
|
||||||
|
outfile = args.outfile
|
||||||
|
srt = json_to_srt(f)
|
||||||
|
write_file(srt, outfile)
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
Loading…
Reference in New Issue
Block a user