1
0

Add source code

This commit is contained in:
ami 2025-01-29 21:50:27 -05:00
parent 79142076e1
commit 7e9ddc61ac
No known key found for this signature in database
2 changed files with 176 additions and 0 deletions

106
src/encode.py Normal file
View File

@ -0,0 +1,106 @@
import sys
import argparse
import subprocess
import pandas as pd
def run_cmd(cmd):
try:
subprocess.run(cmd, check = True,
stdout = subprocess.DEVNULL,
stderr = subprocess.DEVNULL)
except subprocess.CalledProcessError:
sys.exit(1)
def encode():
parser = argparse.ArgumentParser()
parser.add_argument(
"-t", "--track_file",
type = str,
help = "Path to input track file.",
required = True)
parser.add_argument(
"-id", "--identifier",
type = str,
help = "Identifier code for the given track.",
required = True)
parser.add_argument(
"-m", "--metadata_file",
type=str,
help="Path to .csv metadata file.",
required=True)
parser.add_argument(
"-a", "--artwork_dir",
type=str,
help="Path to directory containing artwork files.",
required=True)
parser.add_argument(
"-o", "--output_file",
type=str,
help="Path to .csv file to store individual sample metadata.",
required=True)
args = parser.parse_args()
metadata_df = pd.read_csv(args.metadata_file)
track_metadata = metadata_df[metadata_df["Code"] == args.identifier]
if track_metadata["File Extension"].item() != ".flac":
cmd = [
"ffmpeg",
"-i", args.track_file,
"-vn",
"-c:a", "flac",
args.output_file
]
else:
cmd = [
"cp",
args.track_file,
args.output_file
]
run_cmd(cmd)
# Remove any existing metadata.
cmd = [
"metaflac",
"--remove-all-tags",
args.output_file
]
run_cmd(cmd)
# Remove any existing album artwork.
cmd = [
"metaflac",
"--remove",
"--block-type=PICTURE,PADDING",
"--dont-use-padding",
args.output_file
]
run_cmd(cmd)
cmd = [
"metaflac",
"--remove-tag=COVERART",
args.output_file
]
run_cmd(cmd)
# Write the new metadata.
cmd = [
"metaflac",
f"--set-tag=ALBUM={track_metadata['Album'].item()}",
f"--set-tag=ARTIST={track_metadata['Artist'].item()}",
f"--set-tag=TITLE={track_metadata['Title'].item()}",
f"--set-tag=TRACKNUMBER={track_metadata['Track'].item()}",
f"--set-tag=DATE={track_metadata['Year'].item()}",
f"--set-tag=DISCNUMBER={track_metadata['Disc'].item()}",
f"--import-picture-from={args.artwork_dir}/{track_metadata['Artwork File'].item()}",
args.output_file
]
run_cmd(cmd)
if __name__ == "__main__":
encode()

70
src/install.py Normal file
View File

@ -0,0 +1,70 @@
import os
import sys
import argparse
import subprocess
import pandas as pd
def run_cmd(cmd):
try:
subprocess.run(cmd, check = True,
stdout = subprocess.DEVNULL,
stderr = subprocess.DEVNULL)
except subprocess.CalledProcessError:
sys.exit(1)
def install():
parser = argparse.ArgumentParser()
parser.add_argument(
"-td", "--track_dir",
type = str,
help = "Path to directory with processed track files.",
required = True)
parser.add_argument(
"-m", "--metadata_file",
type=str,
help="Path to .csv metadata file.",
required=True)
parser.add_argument(
"-d", "--dir",
type=str,
help="Target directory to install files.",
required=True)
args = parser.parse_args()
metadata_df = pd.read_csv(args.metadata_file)
track_list = os.listdir(args.track_dir)
for track in track_list:
track_metadata = metadata_df[metadata_df["Code"] == track.split(".")[0]]
# Create album directory (if it does not exist).
album_dir = os.path.join(args.dir, track_metadata["Album"].item())
cmd = [
"mkdir",
"-p",
album_dir
]
run_cmd(cmd)
# Copy song to target directory.
disc_number = track_metadata["Disc"].item()
track_number = track_metadata["Track"].item()
song_title = track_metadata["Title"].item()
song_title = song_title.replace("/", " - ")
track_path = os.path.join(
album_dir,
f"{disc_number:>02}-{track_number:>02} {song_title}")
cmd = [
"cp",
os.path.join(args.track_dir, track),
track_path
]
run_cmd(cmd)
if __name__ == "__main__":
install()