From 044e5bb9214385739a7cc88de6cfe0527da89e96 Mon Sep 17 00:00:00 2001 From: Benno Lang Date: Wed, 22 Jan 2025 20:51:04 +1030 Subject: [PATCH] Report audio duration of each episode being processed And, in new verbose mode, report when audio files are skipped (as they have been previously processed) --- lib/args.py | 3 +++ lib/files.py | 14 ++++++++++++++ process | 9 ++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/args.py b/lib/args.py index 89b59d0..332cdcf 100644 --- a/lib/args.py +++ b/lib/args.py @@ -4,6 +4,7 @@ import sys isNumber = re.compile('^[0-9]+$') class Options: + verbose = False loadFeed = True downloadEpisodes = True generate = True @@ -56,6 +57,8 @@ def read(): opts.downloadEpisodes = False elif arg == "--no-gen" or arg == "--skip-gen": opts.generate = False + elif arg == "--verbose": + opts.verbose = True elif arg == 'new': opts.episodes = 'new' elif arg == 'old': diff --git a/lib/files.py b/lib/files.py index d1cdc44..76eac1d 100644 --- a/lib/files.py +++ b/lib/files.py @@ -1,6 +1,7 @@ import glob import re import lib.fetcher as fetcher +import mutagen import os import os.path @@ -76,6 +77,19 @@ def saveEpisode(podcast, episode): def findAudio(): return glob.glob('podcasts/*/*/*.m[4p][a3]') +def getAudioLength(audioFile): + audio = mutagen.File(audioFile) + totalLength = audio.info.length + hours = int(totalLength // 3600) + totalLength -= 3600 * hours + minutes = int(totalLength // 60) + totalLength -= 60 * minutes + seconds = int(totalLength) + if hours == 0: + return f"{minutes}:{seconds}" + else: + return f"{hours}:{minutes}:{seconds}" + def getLangCode(audioFile): parts = audioFile.split('/') return parts[1] diff --git a/process b/process index d688fcc..4dad37c 100755 --- a/process +++ b/process @@ -22,11 +22,18 @@ if not options.generate: exit(0) audioFiles = files.findAudio() for audioFile in audioFiles: - print(f"Audio: {audioFile}") + audioLength = files.getAudioLength(audioFile) language = files.getLangCode(audioFile) + skipped = True if not files.hasTranscript(audioFile): + skipped = False + print(f"Transcribing audio: {audioFile} ({audioLength})", flush=True) files.generateFromAudio(audioFile, 'transcribe') if language in config['translate'] and not files.hasTranslation(audioFile): + skipped = False + print(f"Translating audio: {audioFile} ({audioLength})", flush=True) files.generateFromAudio(audioFile, 'translate') + if skipped and options.verbose: + print(f"Skipped audio: {audioFile} ({audioLength})")