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