6
6
import numpy as np
7
7
8
8
from auto_editor .analyze import FileSetup , Levels
9
- from auto_editor .ffwrapper import FFmpeg , FileInfo
9
+ from auto_editor .ffwrapper import FileInfo
10
10
from auto_editor .lang .palet import Lexer , Parser , env , interpret , is_boolarr
11
11
from auto_editor .lib .data_structs import print_str
12
12
from auto_editor .lib .err import MyError
@@ -121,9 +121,18 @@ def make_sane_timebase(fps: Fraction) -> Fraction:
121
121
return tb
122
122
123
123
124
+ def parse_time (val : str , arr : NDArray , tb : Fraction ) -> int : # raises: `CoerceError`
125
+ if val == "start" :
126
+ return 0
127
+ if val == "end" :
128
+ return len (arr )
129
+
130
+ num = time (val , tb )
131
+ return num if num >= 0 else num + len (arr )
132
+
133
+
124
134
def make_timeline (
125
135
sources : list [FileInfo ],
126
- ffmpeg : FFmpeg ,
127
136
ensure : Ensure ,
128
137
args : Args ,
129
138
sr : int ,
@@ -140,6 +149,7 @@ def make_timeline(
140
149
inp .get_fps () if args .frame_rate is None else args .frame_rate
141
150
)
142
151
res = inp .get_res () if args .resolution is None else args .resolution
152
+
143
153
try :
144
154
start_margin = time (args .margin [0 ], tb )
145
155
end_margin = time (args .margin [1 ], tb )
@@ -176,36 +186,21 @@ def get_speed_index(speed: float) -> int:
176
186
speed_hash [len (speed_map ) - 1 ] = speed
177
187
return len (speed_map ) - 1
178
188
179
- def parse_time (val : str , arr : NDArray ) -> int :
180
- if val == "start" :
181
- return 0
182
- if val == "end" :
183
- return len (arr )
184
- try :
185
- num = time (val , tb )
186
- return num if num >= 0 else num + len (arr )
187
- except CoerceError as e :
188
- log .error (e )
189
-
190
- def mut_set_range (arr : NDArray , _ranges : list [list [str ]], index : float ) -> None :
191
- for _range in _ranges :
192
- assert len (_range ) == 2
193
- pair = [parse_time (val , arr ) for val in _range ]
194
- arr [pair [0 ] : pair [1 ]] = index
195
-
196
189
try :
197
- if len ( args .cut_out ) > 0 :
190
+ for _range in args .cut_out :
198
191
# always cut out even if 'silent_speed' is not 99,999
199
- mut_set_range (speed_index , args .cut_out , get_speed_index (99_999 ))
192
+ pair = [parse_time (val , speed_index , tb ) for val in _range ]
193
+ speed_index [pair [0 ] : pair [1 ]] = get_speed_index (99_999 )
200
194
201
- if len ( args .add_in ) > 0 :
195
+ for _range in args .add_in :
202
196
# set to 'video_speed' index
203
- mut_set_range (speed_index , args .add_in , 1.0 )
197
+ pair = [parse_time (val , speed_index , tb ) for val in _range ]
198
+ speed_index [pair [0 ] : pair [1 ]] = 1
204
199
205
200
for speed_range in args .set_speed_for_range :
206
- speed = speed_range [0 ]
207
- _range = list (speed_range [1 :] )
208
- mut_set_range ( speed_index , [ _range ], get_speed_index (speed ) )
201
+ start_in = parse_time ( speed_range [1 ], speed_index , tb )
202
+ end_in = parse_time (speed_range [2 ], speed_index , tb )
203
+ speed_index [ start_in : end_in ] = get_speed_index (speed_range [ 0 ] )
209
204
except CoerceError as e :
210
205
log .error (e )
211
206
0 commit comments