8000 Add `--padding` in split_silence.py · levankhoabhc/ffmpeg-python@e500364 · GitHub
[go: up one dir, main page]

Skip to content

Commit e500364

Browse files
committed
Add --padding in split_silence.py
1 parent 87f8500 commit e500364

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

examples/split_silence.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626
parser.add_argument('--silence-duration', default=DEFAULT_DURATION, type=float, help='Silence duration')
2727
parser.add_argument('--start-time', type=float, help='Start time (seconds)')
2828
parser.add_argument('--end-time', type=float, help='End time (seconds)')
29-
parser.add_argument('-v', dest='verbose', action='store_true', help='Verbose mode')
29+
parser.add_argument('--padding', type=float, default=0., help='Output silence padding (seconds)')
3030
parser.add_argument('--metadata-filename', help='Optional metadata output file')
31+
parser.add_argument('-v', dest='verbose', action='store_true', help='Verbose mode')
3132

3233

3334
silence_start_re = re.compile(' silence_start: (?P<start>[0-9]+(\.?[0-9]*))$')
@@ -50,7 +51,7 @@ def get_chunk_times(in_filename, silence_threshold, silence_duration, start_time
5051
if end_time is not None:
5152
input_kwargs['t'] = end_time - start_time
5253

53-
p = _logged_popen(
54+
child = _logged_popen(
5455
(ffmpeg
5556
.input(in_filename, **input_kwargs)
5657
.filter_('silencedetect', n='{}dB'.format(silence_threshold), d=silence_duration)
@@ -59,8 +60,8 @@ def get_chunk_times(in_filename, silence_threshold, silence_duration, start_time
5960
) + ['-nostats'], # FIXME: use .nostats() once it's implemented in ffmpeg-python.
6061
stderr=subprocess.PIPE
6162
)
62-
output = p.communicate()[1].decode('utf-8')
63-
if p.returncode != 0:
63+
output = child.communicate()[1].decode('utf-8')
64+
if child.returncode != 0:
6465
sys.stderr.write(output)
6566
sys.exit(1)
6667
logger.debug(output)
@@ -114,6 +115,7 @@ def split_audio(
114115
silence_duration=DEFAULT_DURATION,
115116
start_time=None,
116117
end_time=None,
118+
padding=0.,
117119
metadata_filename=None,
118120
verbose=False,
119121
):
@@ -125,9 +127,9 @@ def split_audio(
125127
out_filename = out_pattern.format(i, i=i)
126128
_makedirs(os.path.dirname(out_filename))
127129

128-
start_text = '{:.02f}'.format(start_time)
129-
end_text = '{:.02f}'.format(end_time)
130-
duration_text = '{:.02f}'.format(time)
130+
start_text = '{:.04f}'.format(start_time)
131+
end_text = '{:.04f}'.format(end_time)
132+
duration_text = '{:.04f}'.format(time)
131133
metadata.append({
132134
'filename': out_filename,
133135
'start': start_text,
@@ -136,16 +138,24 @@ def split_audio(
136138
})
137139
logger.info('{}: start={}, end={}, duration={}'.format(out_filename, start_text, end_text, duration_text))
138140

139-
_logged_popen(
140-
(ffmpeg
141-
.input(in_filename, ss=start_time, t=time)
141+
input = ffmpeg.input(in_filename, ss=start_time, t=time)
142+
if padding > 0.:
143+
silence = ffmpeg.input('anullsrc', format='lavfi', t=padding)
144+
input = ffmpeg.concat(silence, input, silence, v=0, a=1)
145+
146+
child = _logged_popen(
147+
(input
142148
.output(out_filename)
143149
.overwrite_output()
144150
.compile()
145151
),
146152
stdout=subprocess.PIPE if not verbose else None,
147153
stderr=subprocess.PIPE if not verbose else None,
148-
).communicate()
154+
)
155+
out = child.communicate()
156+
if child.returncode != 0:
157+
if not verbose:
158+
sys.stderr.write(out[1].decode('utf-8'))
149159

150160
if metadata_filename is not None:
151161
_makedirs(os.path.dirname(metadata_filename))

0 commit comments

Comments
 (0)
0