Skip to content
Extraits de code Groupes Projets
Valider e18fbabb rédigé par Sting's avatar Sting
Parcourir les fichiers

Write syls to ASS file

parent 1f1b9c62
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -6,4 +6,5 @@ ...@@ -6,4 +6,5 @@
!karaUtils.py !karaUtils.py
!autokara.py !autokara.py
!segment.py !segment.py
!assUtils.py
media/ media/
\ No newline at end of file
import numpy as np
import math
def timeToDate(time):
centiseconds, seconds = math.modf(time)
mins = int(seconds // 60)
remainder_sec = (seconds % 60) + centiseconds
hours = int(mins // 60)
remainder_mins = int(mins % 60)
return f'{hours:02d}:{remainder_mins:02d}:{remainder_sec:.2f}'
class AssWriter:
def __init__(self):
self.file = None
def openAss(self, filename):
self.file = open(filename, 'w')
def closeAss(self):
self.file.close()
def writeHeader(self):
header = '''[Script Info]
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None
[Aegisub Project Garbage]
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,48,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
'''
self.file.write(header)
def writeSyls(self, syl_timings):
last_syl_dur = 500
start_time = timeToDate(syl_timings[0])
end_time = timeToDate(syl_timings[-1] + last_syl_dur//100)
line = f'Dialogue: 0,{start_time},{end_time},Default,,0,0,0,,'
for i in range(len(syl_timings) - 1):
syl_dur = round((syl_timings[i+1] - syl_timings[i]) * 100)
line += f'{{\k{syl_dur:d}}}'
line += f'{{\k{last_syl_dur:d}}}\n'
self.file.write(line)
\ No newline at end of file
...@@ -3,11 +3,13 @@ import demucs.separate ...@@ -3,11 +3,13 @@ import demucs.separate
import subprocess import subprocess
import shlex import shlex
from pathlib import Path from pathlib import Path
from assUtils import AssWriter
from segment import Segment from segment import Segment
try: try:
video_file = sys.argv[1] video_file = sys.argv[1]
ass_file = sys.argv[2]
except IndexError: except IndexError:
print("usage : %s video_file" % sys.argv[0]) print("usage : %s video_file" % sys.argv[0])
sys.exit("Invalid Arguments") sys.exit("Invalid Arguments")
...@@ -31,3 +33,10 @@ vocals_file = "./media/vocals/htdemucs/%s/vocals.wav" % basename ...@@ -31,3 +33,10 @@ vocals_file = "./media/vocals/htdemucs/%s/vocals.wav" % basename
seg = Segment(vocals_file) seg = Segment(vocals_file)
onset_times = seg.onsets() onset_times = seg.onsets()
writer = AssWriter()
writer.openAss(ass_file)
writer.writeHeader()
writer.writeSyls(onset_times)
writer.closeAss()
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter