#!/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('
', '') 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)