Files
yaml-audio-metadata/src/main.py
2025-11-06 19:04:36 +01:00

49 lines
1.5 KiB
Python

import os
import click
import yaml
import eyed3
from eyed3.core import Date
@click.command()
@click.option("--config", prompt="Config path", help="A path to the yaml config")
def run(config):
config_dir = os.path.dirname(config)
data = read_one_block_of_yaml_data(config)
if isinstance(data, list):
for idx, track in enumerate(data):
print(track["title"])
audiofile = eyed3.load(f"{config_dir}/{track["file"]}")
audiofile.initTag()
# Set tags
audiofile.tag.artist = track["artist"]
audiofile.tag.album = track["album"]
audiofile.tag.title = track["title"]
audiofile.tag.track_num = idx + 1
audiofile.tag.comment = track["comment"]
date_str = track["release_date"]
date_obj = Date.parse(date_str)
audiofile.tag.original_release_date = date_obj
with open(f"{config_dir}/{track["cover"]}", "rb") as cover_art:
audiofile.tag.images.set(
3, cover_art.read(), "image/png", "Cover (front)"
)
with open(f"{config_dir}/{track["lyrics"]}", "r", encoding="utf-8") as f:
text = f.read()
audiofile.tag.lyrics.set(text)
audiofile.tag.save()
else:
raise Exception("Wrong data type, expected list")
def read_one_block_of_yaml_data(filename):
with open(filename) as f:
return yaml.safe_load(f)
raise Exception("File doesn't exist")
if __name__ == "__main__":
run()