From f7318f0bc7984601a0c4210033af2519e7c83314 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 3 Oct 2020 09:33:44 -0400 Subject: [PATCH] Tools: Add a script for finding common tags of music files I want to know the bare minimum of what tags can be relied on in my music, so this script can help me set default / fallback tags. Signed-off-by: Anna Schumaker --- tools/common_tags.py | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tools/common_tags.py diff --git a/tools/common_tags.py b/tools/common_tags.py new file mode 100644 index 0000000..5d81eb9 --- /dev/null +++ b/tools/common_tags.py @@ -0,0 +1,47 @@ +#!/usr/bin/python +# Copyright 2020 (c) Anna Schumaker +# +# Use Mutagen to generate a list of common tag names for +# all music files in the requested directory +import mutagen +import os +import pathlib +import sys + +if len(sys.argv) != 2 or not os.path.isdir(sys.argv[1]): + print(f"Usage: {sys.argv[0]} DIRECTORY") + sys.exit(1) + +print() +print(f"Reading directory {sys.argv[1]}:") + +files = [ ] +for entry in pathlib.Path(sys.argv[1]).rglob("*"): + if os.path.isfile(entry): + files += [ entry ] + +print(f" Found {len(files)} files") + +read = 0 +skip = 0 +unique = None +for f in files: + try: + keys = set(mutagen.File(f).keys()) + if unique == None: + unique = keys + else: + unique = unique.intersection(keys) + read += 1 + except Exception as e: + #print(e) + skip += 1 + +print(f" Read {read} files, skipped {skip}") + +tags = list(unique) +tags.sort() +print(f" There are {len(tags)} common tags:") +for t in tags: + print(f" {t}") +print()