fix: improve subtitle readability

This commit is contained in:
nightcityblade
2026-06-21 23:21:58 +08:00
parent d9459ebf2d
commit 8c0caf1be0
3 changed files with 23 additions and 10 deletions
+2 -2
View File
@@ -96,11 +96,11 @@ function init_element(lines = 3) {
elem_container = document.createElement('div');
elem_container.id = "transcription";
elem_container.style.cssText = 'padding-top:16px;font-size:18px;position: fixed; top: 85%; left: 50%; transform: translate(-50%, -50%);line-height:18px;width:500px;height:' + (captionLineCount * 30) + 'px;opacity:0.9;z-index:100;background:black;border-radius:10px;color:white;';
elem_container.style.cssText = 'padding:0 24px;font-family:Arial,Helvetica,sans-serif;font-size:22px;font-weight:600;line-height:30px;position:fixed;top:85%;left:50%;transform:translate(-50%,-50%);width:min(80vw,900px);min-height:' + (captionLineCount * 30) + 'px;z-index:2147483647;color:white;text-align:center;letter-spacing:0.01em;text-shadow:0 0 2px #000,0 2px 4px rgba(0,0,0,0.95);cursor:move;';
for (var i = 0; i <= captionLineCount; i++) {
elem_text = document.createElement('span');
elem_text.style.cssText = 'position: absolute;padding-left:16px;padding-right:16px;';
elem_text.style.cssText = 'position:absolute;left:50%;transform:translateX(-50%);max-width:100%;padding:2px 14px;background:rgba(0,0,0,0.72);border-radius:6px;box-decoration-break:clone;-webkit-box-decoration-break:clone;';
elem_text.id = "t" + i;
elem_container.appendChild(elem_text);
+2 -2
View File
@@ -218,11 +218,11 @@ function init_element(lines = 3) {
elem_container = document.createElement('div');
elem_container.id = "transcription";
elem_container.style.cssText = 'padding-top:16px;font-size:18px;line-height:18px;position:fixed;top:85%;left:50%;transform:translate(-50%,-50%);width:500px;height:' + (captionLineCount * 30) + 'px;opacity:0.9;z-index:100;background:black;border-radius:10px;color:white;';
elem_container.style.cssText = 'padding:0 24px;font-family:Arial,Helvetica,sans-serif;font-size:22px;font-weight:600;line-height:30px;position:fixed;top:85%;left:50%;transform:translate(-50%,-50%);width:min(80vw,900px);min-height:' + (captionLineCount * 30) + 'px;z-index:2147483647;color:white;text-align:center;letter-spacing:0.01em;text-shadow:0 0 2px #000,0 2px 4px rgba(0,0,0,0.95);cursor:move;';
for (var i = 0; i <= captionLineCount; i++) {
elem_text = document.createElement('span');
elem_text.style.cssText = 'position: absolute;padding-left:16px;padding-right:16px;';
elem_text.style.cssText = 'position:absolute;left:50%;transform:translateX(-50%);max-width:100%;padding:2px 14px;background:rgba(0,0,0,0.72);border-radius:6px;box-decoration-break:clone;-webkit-box-decoration-break:clone;';
elem_text.id = "t" + i;
elem_container.appendChild(elem_text);
+19 -6
View File
@@ -1,3 +1,5 @@
import os
import shutil
import textwrap
import scipy
import numpy as np
@@ -11,15 +13,26 @@ def clear_screen():
def print_transcript(text, translated=False, timestamps=False):
"""Prints formatted transcript text."""
"""Prints formatted transcript text in a subtitle-like block."""
terminal_width = shutil.get_terminal_size((80, 20)).columns
wrap_width = max(10, min(80, terminal_width - 8))
if timestamps:
lines = []
for t in text:
print(f'[{t["start"]} -> {t["end"]}] {t["text"]}')
prefix = f'[{t["start"]} -> {t["end"]}] '
wrapper = textwrap.TextWrapper(
width=wrap_width,
subsequent_indent=" " * len(prefix),
)
lines.extend(wrapper.wrap(f'{prefix}{t["text"]}'))
else:
wrapper = textwrap.TextWrapper(width=60)
text=" ".join(text) if translated else "".join(text)
for line in wrapper.wrap(text=text):
print(line)
wrapper = textwrap.TextWrapper(width=wrap_width)
transcript = " ".join(text) if translated else "".join(text)
lines = wrapper.wrap(text=transcript)
for line in lines[-3:]:
print(line.center(terminal_width))
def format_time(s):