in broadcast-monitoring/src/audio_detect/app/audio_detect.py [0:0]
def execute_ffmpeg(input_file, processors=None, **kwargs):
"""
Run ffmpeg with a set of audio processors to add filters to a call
and process the results into a dict
"""
if processors is None:
processors = [
AudioProcessor('volumedetect', with_volumedetect, parse_volume_output),
AudioProcessor('silencedetect', with_silencedetect, parse_silence_output)
]
stream = ffmpeg.input(input_file)
for with_filter in [ap.with_filter for ap in processors]:
stream = with_filter(stream, **kwargs)
ret_code, out = ffmpeg.output(stream, '-', format='null').run(quiet=True)
if ret_code:
raise RuntimeError
output_lines = out.decode('utf-8').splitlines()
return {ap.name: ap.output_processor(output_lines) for ap in processors}