#!/usr/bin/env python3 import sys import subprocess from pathlib import Path ROOT = Path(sys.argv[1]) if len(sys.argv) > 1 else Path(".") audio_extensions = { ".m4b", ".m4a", ".mp3", ".flac", ".ogg", } def get_metadata(field, file): try: result = subprocess.run( ["kid3-cli", "-c", f"get {field}", str(file)], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True, ) return result.stdout.strip() except (OSError, subprocess.SubprocessError): return "" # Include ROOT itself, matching find "$ROOT" -type d for directory in [ROOT] + [p for p in ROOT.rglob("*") if p.is_dir()]: audio_files = sorted( ( file for file in directory.iterdir() if file.is_file() and file.suffix.lower() in audio_extensions ), key=lambda p: str(p), ) if not audio_files: continue first_file = audio_files[0] artist = get_metadata("artist", first_file) album = get_metadata("album", first_file) composer = get_metadata("composer", first_file) comment = get_metadata("comment", first_file) print("====≠===============================") print(f"Folder: {directory.name}") print(f"Album: {album}") print(f"Artist: {artist}") print(f"Narrator: {composer}") print(f"Comment: {comment}")