From ba71d9ad3073940289fb23109900e0ba379404c1 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Tue, 14 Nov 2023 16:32:54 -0800 Subject: [PATCH] Add tasks that Emacsen wrote for generating media info --- tasks.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tasks.py diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..9d59f44 --- /dev/null +++ b/tasks.py @@ -0,0 +1,38 @@ +from invoke import task +from shutil import rmtree, unpack_archive +from os import mkdir +from os.path import isdir, basename +from glob import glob +from itertools import chain +from shlex import quote + +PREP = "assets" +OUTPUT = "output" + +MUSIC_GLOBS = ["*.flac", "*.mp3", "*.ogg", "*.opus", "*.aac"] + +@task +def clean(c): + dirs = [dir for dir in [PREP] if isdir(dir)] + for dir in dirs: + print(f"Removing {dir}") + rmtree(dir) + +@task +def unpack(c): + zipfiles = glob("src/*.zip") + if not isdir(PREP): + mkdir(PREP) + for zipfile in zipfiles: + unpack_archive(zipfile, PREP) + +@task(unpack) +def probe(c): + if not isdir(OUTPUT): + mkdir(OUTPUT) + music_list = list(chain.from_iterable([glob(f"{PREP}/{pat}") for pat in MUSIC_GLOBS])) + for m in music_list: + cmd = f"ffprobe -v quiet -print_format json -show_format {quote(m)}" + result = c.run(cmd) + with open(f"{OUTPUT}/{basename(m)}.json", 'w') as f: + f.write(result.stdout)