initial audiobook python script
intendet to relieve all metadata scripts
This commit is contained in:
1 parent
da2981a5be
commit
b32247eff4
1 file changed
+60
@@ -0,0 +1,60 @@
|
||||
#!/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}")
|
||||
Reference in new issue
Block a user