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
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())))
|