1
+ # TODO:
2
+ # 1. auto save
1
3
import mimetypes
2
4
import os .path
3
5
19
21
)
20
22
from core .audio import generate_audio , generate_subtitle
21
23
from core .downloader import download
24
+ from core .utils import _write_vtt , parse_vtt
22
25
from core .video import generate_video
23
- from core .utils import parse_vtt , _write_vtt
24
26
25
27
if "subtitle_path" not in st .session_state :
26
28
st .session_state .update (
27
29
{
28
30
"segments" : [],
31
+ "replaced_segments" : [],
29
32
"current_seg_index" : 0 ,
30
33
"current_time" : 0 ,
31
34
"vtt_content" : "" ,
@@ -46,6 +49,7 @@ def wrapper(label, *args, **kwargs):
46
49
widget_value = f (* args , ** kwargs )
47
50
st .session_state .widget_values [label ] = widget_value
48
51
return widget_value
52
+
49
53
return wrapper
50
54
51
55
@@ -80,8 +84,6 @@ def wrapper(label, *args, **kwargs):
80
84
81
85
st .write ("## Subtitle" )
82
86
83
- subtitle_auto_save = st .checkbox ('Audo Save' )
84
-
85
87
language : str = (
86
88
st .selectbox (
87
89
"Language" ,
@@ -109,12 +111,14 @@ def wrapper(label, *args, **kwargs):
109
111
110
112
video_path = st .text_input ("Video Path or URL" )
111
113
subtitle_path = st .text_input ("VTT Path or URL" , value = st .session_state .subtitle_path )
112
- if subtitle_path :
114
+
115
+ if subtitle_path and not st .session_state .segments :
113
116
with open (subtitle_path ) as f :
114
117
content = f .read ()
115
118
st .session_state .vtt_content = content
116
119
if not st .session_state .segments :
117
120
st .session_state .segments = parse_vtt (content )
121
+ st .session_state .replaced_segments = parse_vtt (content )
118
122
119
123
120
124
def get_current_vtt_content () -> str :
@@ -123,11 +127,12 @@ def get_current_vtt_content() -> str:
123
127
return ""
124
128
if not values ["video_component" ]:
125
129
return ""
126
- current_time = values ["video_component" ][' current_time' ]
130
+ current_time = values ["video_component" ][" current_time" ]
127
131
for index , seg in enumerate (st .session_state .segments ):
128
132
if seg .start <= current_time <= seg .end :
129
- st .session_state [' current_seg_index' ] = index
133
+ st .session_state [" current_seg_index" ] = index
130
134
return seg .text
135
+ return ""
131
136
132
137
133
138
def subtitle_callback (path : str ) -> None :
@@ -152,8 +157,8 @@ def save_callback() -> None:
152
157
if not subtitle_path :
153
158
st .error ("Subtitle is required." )
154
159
else :
155
- _write_vtt (st .session_state .segments , subtitle_path )
156
- st .success ( f"Subtitle saved" )
160
+ _write_vtt (st .session_state .replaced_segments , subtitle_path )
161
+ st .session_state . segments = st . session_state . replaced_segments
157
162
158
163
159
164
def preview_callback () -> None :
@@ -170,6 +175,7 @@ def preview_callback() -> None:
170
175
current_time = "" ,
171
176
)
172
177
178
+
173
179
def generate_callback () -> None :
174
180
if not video_path :
175
181
st .error ("Video Path or URL is required." )
@@ -216,7 +222,4 @@ def generate_callback() -> None:
216
222
217
223
current_vtt = st .text_input ("Subtitle" , value = get_current_vtt_content ())
218
224
if st .session_state .segments and current_vtt :
219
- st .session_state .segments [st .session_state .current_seg_index ].text = current_vtt
220
-
221
- if subtitle_auto_save and subtitle_path and st .session_state .segments :
222
- _write_vtt (st .session_state .segments , subtitle_path )
225
+ st .session_state .replaced_segments [st .session_state .current_seg_index ].text = current_vtt
0 commit comments