53 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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())))
 |