render subtitles
This commit is contained in:
parent
083934582a
commit
130c790dc7
1 changed files with 104 additions and 0 deletions
104
subtitles.py
Normal file
104
subtitles.py
Normal file
|
@ -0,0 +1,104 @@
|
|||
#!/usr/bin/python3
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import subprocess
|
||||
from collections import defaultdict
|
||||
import string
|
||||
from glob import glob
|
||||
from copy import deepcopy
|
||||
|
||||
import ox
|
||||
import ox.web.auth
|
||||
|
||||
|
||||
base_url = 'http://127.0.0.1:2620'
|
||||
|
||||
FRAME_DURATION = 1/60
|
||||
MAX_DURATION = 40
|
||||
|
||||
HIDDEN_TAGS = [
|
||||
"women with white males",
|
||||
"gene z hanrahan"
|
||||
]
|
||||
|
||||
# items to not use at all
|
||||
BLACKLIST = [
|
||||
'XN'
|
||||
]
|
||||
|
||||
api = None
|
||||
|
||||
def get_api():
|
||||
global api
|
||||
if not api:
|
||||
api = ox.API(base_url + '/api/')
|
||||
api.signin(**ox.web.auth.get('cdosea'))
|
||||
|
||||
|
||||
def get_subtitles():
|
||||
get_api()
|
||||
items = api.find({
|
||||
'query': {
|
||||
'conditions': [{'key': 'tags', 'value': 'Vocal', 'operator': '=='}]
|
||||
},
|
||||
'keys': ['id', 'title'],
|
||||
'range': [0, 1000]})['data']['items']
|
||||
for item in items:
|
||||
'''
|
||||
info = api.findMedia({
|
||||
'query': {
|
||||
'conditions': [
|
||||
{'key': 'id', 'operator': '==', 'value': item['id']}
|
||||
]
|
||||
},
|
||||
'keys': ['id', 'extension'],
|
||||
'range': [0, 1]
|
||||
})['data']['items'][0]
|
||||
'''
|
||||
item['subtitles'] = api.get({'id': item['id'], 'keys': ['layers']})['data']['layers']['subtitles']
|
||||
|
||||
return items
|
||||
|
||||
def get_subtitles(items, id):
|
||||
for item in items:
|
||||
if item['title'].startswith(id):
|
||||
return deepcopy(item['subtitles'])
|
||||
|
||||
def render_subtitles(item_json, output_json, output_srt):
|
||||
with open(item_json) as fd:
|
||||
item = json.load(fd)
|
||||
|
||||
subtitles = []
|
||||
position = 0
|
||||
for clip in item['vocals']:
|
||||
if not clip.get('blank'):
|
||||
# vocals/A/A4_chaton.wav
|
||||
id = clip['path'].split('/')[-1][:2]
|
||||
clip_subtitles = get_subtitles(items, id)
|
||||
for sub in clip_subtitles:
|
||||
srt = {}
|
||||
srt['in'] = sub['in'] + position
|
||||
srt['out'] = sub['out'] + position
|
||||
srt['value'] = sub['value'].replace('<br>', '')
|
||||
subtitles.append(srt)
|
||||
position += clip['duration']
|
||||
|
||||
with open(output_srt, 'wb') as fd:
|
||||
fd.write(ox.srt.encode(subtitles))
|
||||
with open(output_json, 'w') as fd:
|
||||
json.dump(subtitles, fd, indent=4, ensure_ascii=False)
|
||||
|
||||
if __name__ == '__main__':
|
||||
if os.path.exists('subtitles.json'):
|
||||
items = json.load(open('subtitles.json'))
|
||||
else:
|
||||
items = get_subtitles()
|
||||
with open('subtitles.json', 'w') as fd:
|
||||
json.dump(items, fd, indent=4, ensure_ascii=False)
|
||||
|
||||
for item_json in glob('output/*/*.json'):
|
||||
prefix = 'public/' + item_json.split('/')[-1][0].lower() + item_json.split('/')[-2] + '.1080p.'
|
||||
output_json = prefix + 'json'
|
||||
output_srt = prefix + 'srt'
|
||||
render_subtitles(item_json, output_json, output_srt)
|
Loading…
Reference in a new issue