You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.7 KiB
Python

#!/usr/bin/python3
import os
import glob
import re
from datetime import datetime, timedelta
from pytimeparse.timeparse import timeparse
silences = []
os.chdir("/srv/recording/silence")
for s in glob.glob("*.txt"):
with open(s, 'r') as f:
t = f.read()
# parse start time from the filename
start_of_flac = datetime.strptime(s, "%Y-%m-%d_%H-%M-%S.flac.txt")
# flacs are not necessarily 1 hour long, but ffmpeg thankfully also writes
# out some timestamps, so we use the last one to determine the length
length_of_flac = None
for l in t.split("\n"):
m = re.match(r"size=.* time=([0-9:.]+) .*", l)
if m:
length_of_flac = timeparse(m.group(1))
silence_start = None
for l in t.split("\n"):
m = re.search(r"silence_start: ([-0-9.]+)", l)
if m:
silence_start = float(m.group(1))
silence_end = length_of_flac # fallback
m = re.search(r"silence_end: ([-0-9.]+)", l)
if m:
silence_end = float(m.group(1))
silences.append((start_of_flac + timedelta(seconds=silence_start), start_of_flac + timedelta(seconds=silence_end)))
# reset
silence_start = None
silence_end = length_of_flac
# if there is no "end of silence", ffmpeg does not report it
if silence_start:
silences.append((start_of_flac + timedelta(seconds=silence_start), start_of_flac + timedelta(seconds=silence_end)))
silences = sorted(silences)
FORMAT="%Y-%m-%d %H:%M:%S"
for silence_start, silence_end in silences:
duration = silence_end - silence_start
print("%s;%s;%d" % (silence_start.strftime(FORMAT), silence_end.strftime(FORMAT), round(duration.total_seconds())))