From 6e91655583bc6e0340a918d274ce612ce08ef57d Mon Sep 17 00:00:00 2001
From: Sting <lallegre26@gmail.com>
Date: Fri, 14 Jul 2023 12:18:34 +0200
Subject: [PATCH] Add basic jump template to ASS

---
 assUtils.py | 27 ++++++++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/assUtils.py b/assUtils.py
index 3345d5b..e14f20a 100644
--- a/assUtils.py
+++ b/assUtils.py
@@ -39,35 +39,56 @@ ScriptType: v4.00+
 WrapStyle: 0
 ScaledBorderAndShadow: yes
 YCbCr Matrix: None
+PlayResX: 1920
+PlayResY: 1080
 
 [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
+Style: Default,Arial,48,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,8,10,10,10,1
 
 [Events]
 Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
+Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code once all,line_in_retime = -900;    line_out_retime = 300;    fade_in_dur = 200;   fade_out_dur = 200
+Comment: 0,0:00:00.00,0:00:01.68,Default,,0,0,0,code once all,syl_shift = -75;    syl_in_speed = 3.5;     syl_out_speed = 3
+Comment: 0,0:00:03.68,0:00:05.68,Default,,0,0,0,code syl all,bord = line.styleref.outline; shadow = line.styleref.shadow;  blur = 2
+Comment: 0,0:00:05.68,0:00:05.68,Default,,0,0,0,,
+Comment: 0,0:00:05.68,0:00:05.68,Default,,0,0,0,,
+Comment: 10,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("start2syl",line_in_retime,syl_shift)!{\\fad(!fade_in_dur!,0)\\bord!bord!\shad!shadow!\\blur!blur!\\3c!line.styleref.color3!\c!line.styleref.color3!\pos($x,$y)}
+Comment: 20,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("start2syl",line_in_retime,syl_shift)!{\fad(200,0)\\bord0\shad0\c!line.styleref.color2!\pos($x,$y)}
+Comment: 10,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("syl",syl_shift,syl_shift-$dur/syl_in_speed)!{\\3c!line.styleref.color3!\c!line.styleref.color3!\\bord!bord!\shad!shadow!\\blur!blur!\move($x,$y,$x,!$y-($height/8)!,0,!($dur > syl_in_speed * 400 and 400 or $dur/syl_in_speed)!)}
+Comment: 40,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("syl",syl_shift,syl_shift-$dur/syl_in_speed)!{\\bord0\shad0\c!line.styleref.color2!\\t(0,!($dur > syl_in_speed * 400 and 400 or $dur/syl_in_speed)!,\c!line.styleref.color1!)\move($x,$y,$x,!$y-($height/8)!,0,!($dur > syl_in_speed * 400 and 400 or $dur/syl_in_speed)!)}
+Comment: 10,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("postsyl",syl_shift-$dur/syl_in_speed,($lstart + $send + ($dur/12)) < ($lend + 300) and $dur/12 or $lend - $lstart - $send + 300)!{\\3c!line.styleref.color3!\c!line.styleref.color3!\\bord!bord!\shad!shadow!\\blur!blur!\move($x,!$y-($height/8)!,$x,!$y!,0,!$dur/syl_out_speed!)!($lstart + $end + $dur/12) < ($lend + 300) and "" or "\\fad(0,150)"!}
+Comment: 40,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("postsyl",syl_shift-$dur/syl_in_speed,($lstart + $send + ($dur/12)) < ($lend + 300) and $dur/12 or $lend - $lstart - $send + 300)!{\\bord0\shad0\move($x,!$y-($height/8)!,$x,!$y!,0,!$dur/syl_out_speed!)!($lstart + $end + $dur/12) < ($lend + 300) and "" or "\\fad(0,150)"!}
+Comment: 10,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("syl2end",$dur/12,line_out_retime)!{\\fad(0,!fade_out_dur!)\\bord!bord!\shad!shadow!\\blur!blur!\\3c!line.styleref.color3!\c!line.styleref.color3!\pos($x,$y)}
+Comment: 20,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("syl2end",$dur/12,line_out_retime)!{\c!line.styleref.color1!\\fad(0,!fade_out_dur!)\\bord0\shad0\pos($x,$y)}
+Comment: 0,0:00:05.68,0:00:05.68,Default,,0,0,0,,
+Comment: 0,0:00:05.68,0:00:05.68,Default,,0,0,0,,
 '''
         self.file.write(header)
 
     def writeSyls(self, syl_timings, syls_per_line=10000):
+        bottom = False
         last_syl_dur = 500
         syl_index = 0
         while syl_index < (len(syl_timings) - syls_per_line):
             start_time = timeToDate(syl_timings[syl_index][0])
             end_time = timeToDate(syl_timings[syl_index + syls_per_line][0])
-            line = f'Dialogue: 0,{start_time},{end_time},Default,,0,0,0,,'
+            v_margin = (150 if bottom else 50)
+            line = f'Dialogue: 0,{start_time},{end_time},Default,,0,0,{v_margin:d},,'
             for i in range(syl_index, syl_index + syls_per_line):
                 syl_dur = round((syl_timings[i+1][0] - syl_timings[i][0]) * 100)
                 line += f'{{\k{syl_dur:d}}}{syl_timings[i][1]:s}'
             line += '\n'
             self.file.write(line)
             syl_index += syls_per_line
+            bottom = not bottom
 
         start_time = timeToDate(syl_timings[syl_index][0])
         end_time = timeToDate(syl_timings[-1][0] + last_syl_dur//100)
-        line = f'Dialogue: 0,{start_time},{end_time},Default,,0,0,0,,'
+        v_margin = (150 if bottom else 50)
+        line = f'Dialogue: 0,{start_time},{end_time},Default,,0,0,{v_margin:d},,'
         for i in range(syl_index, len(syl_timings) - 1):
             syl_dur = round((syl_timings[i+1][0] - syl_timings[i][0]) * 100)
             line += f'{{\k{syl_dur:d}}}{syl_timings[i][1]:s}'
-- 
GitLab