29
29
parser .add_argument ('--end-time' , type = float , help = 'End time (seconds)' )
30
30
parser .add_argument ('--padding' , type = float , default = 0. , help = 'Output silence padding (seconds)' )
31
31
parser .add_argument ('--min-chunk-time' , type = float , default = 0. , help = 'Minimum chunk duration' )
32
+ parser .add_argument ('--max-silence-time' , type = float , help = 'Maximum silence time before guaranteed chunk splitting' )
32
33
parser .add_argument ('--metadata-filename' , help = 'Optional metadata output file' )
33
34
parser .add_argument ('-v' , dest = 'verbose' , action = 'store_true' , help = 'Verbose mode' )
34
35
@@ -110,7 +111,7 @@ def _makedirs(path):
110
111
raise
111
112
112
113
113
- def combine_chunks (chunk_times , min_chunk_time ):
114
+ def combine_chunks (chunk_times , min_chunk_time , max_silence_time = None ):
114
115
chunk_times = copy .copy (chunk_times )
115
116
pop_chunk = lambda chunk_times : (chunk_times [0 ][0 ], chunk_times [0 ][1 ], chunk_times [1 :])
116
117
new_chunk_times = []
@@ -120,7 +121,11 @@ def combine_chunks(chunk_times, min_chunk_time):
120
121
time = end_time - start_time
121
122
while time < min_chunk_time and len (chunk_times ) != 0 :
122
123
# Combine with next chunk.
123
- _ , end_time , chunk_times = pop_chunk (chunk_times )
124
+ next_start_time , next_end_time , chunk_times = pop_chunk (chunk_times )
125
+ if max_silence_time is not None and next_start_time - end_time > max_silence_time :
126
+ new_chunk_times .append ((start_time , end_time ))
127
+ start_time = next_start_time
128
+ end_time = next_end_time
124
129
time = end_time - start_time
125
130
new_chunk_times .append ((start_time , end_time ))
126
131
return new_chunk_times
@@ -135,12 +140,13 @@ def split_audio(
135
140
end_time = None ,
136
141
padding = 0. ,
137
142
min_chunk_time = 0. ,
143
+ max_silence_time = None ,
138
144
metadata_filename = None ,
139
145
verbose = False ,
140
146
):
141
147
chunk_times = get_chunk_times (in_filename , silence_threshold , silence_duration , start_time , end_time )
142
148
if min_chunk_time > 0. :
143
- chunk_times = combine_chunks (chunk_times , min_chunk_time )
149
+ chunk_times = combine_chunks (chunk_times , min_chunk_time , max_silence_time )
144
150
145
151
metadata = []
146
152
for i , (start_time , end_time ) in enumerate (chunk_times ):
0 commit comments