38 lines
1,005 B
Python
38 lines
1,005 B
Python
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", "*.speex"]
|
|
|
|
@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)
|