Spaces:
Runtime error
Runtime error
File size: 2,037 Bytes
1ffed4c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import json
import re
from math import sqrt
import cv2
def get_duration(d):
return d.minutes*60 + d.seconds + d.milliseconds / 1000
def clean_str(str):
str = str.replace("\n", " ")
return re.sub(r'[^A-Za-z0-9 ]+', '', str)
def get_sqrt(n):
"""return the smallest number x such that x**2 > n"""
x = int(sqrt(n))
while x**2 < n:
x = int(x + 1)
return x
def read_and_preprocess_transcript(path, song_name, n_lines=None):
"""
Read transcription file, prepend the songname at the start (before first lyrice line),
set the duration of each lyrics line to last until the next one starts
"""
transcript = json.load(open(path))
for i in range(len(transcript)):
if i < len(transcript) - 1:
transcript[i]['duration'] = transcript[i+1]['start'] - transcript[i]['start']
transcript = [{'text': song_name, 'start': 0, 'duration': transcript[0]['start']}] + transcript
if n_lines is not None:
transcript = transcript[:int(n_lines)]
return transcript
def put_subtitles_on_frame(frame, text, resize_factor=1):
w, h = frame.shape[:2]
frame = cv2.resize(frame, (w*resize_factor, h*resize_factor))
w, h = frame.shape[:2]
kwargs = {
'thickness':2,
'fontScale':0.75,
'fontFace':cv2.FONT_HERSHEY_SIMPLEX
}
(tw, th), _ = cv2.getTextSize(text, **kwargs)
if tw > w:
words = text.split()
first_line = " ".join(words[:len(words) // 2:])
(tw, th), _ = cv2.getTextSize(first_line, **kwargs)
frame = cv2.putText(frame, first_line, (w//2 - tw // 2, h - int(th * 3)), color=(255, 255, 255), **kwargs)
second_line = " ".join(words[len(words) // 2:])
(tw, th), _ = cv2.getTextSize(second_line, **kwargs)
frame = cv2.putText(frame, second_line, (w//2 - tw // 2, h - int(th * 1.5)), color=(255, 255, 255), **kwargs)
else:
frame = cv2.putText(frame, text, (w//2 - tw // 2, h - int(th * 2)), color=(255, 255, 255), **kwargs)
return frame |