From 55111b1d9ef76d1d3d679991f113fd8eaef5714d Mon Sep 17 00:00:00 2001 From: Jona Heitzer Date: Mon, 3 Nov 2025 19:14:59 +0100 Subject: [PATCH] Initial Commit --- .gitignore | 5 +++++ flac2alac.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 56 insertions(+) create mode 100644 .gitignore create mode 100644 flac2alac.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..13551a4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +bin +*.log +include +lib +pyvenv.cfg diff --git a/flac2alac.py b/flac2alac.py new file mode 100644 index 0000000..e3f7ad9 --- /dev/null +++ b/flac2alac.py @@ -0,0 +1,50 @@ +import argparse +import logging +import subprocess +import pathlib + +from tqdm.contrib.concurrent import thread_map + +logging.basicConfig( + filename='flac2alac.log', + filemode='a', + format='%(asctime)s - %(levelname)s - %(message)s', + level=logging.INFO +) + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('-s', '--source', required=True) + parser.add_argument('-d', '--destination', required=True) + parser.add_argument('-j', '--jobs', type=int, default=1) + return parser.parse_args() + +def convert(job): + job['dst'].parent.mkdir(exist_ok=True) + try: + subprocess.run([ + 'ffmpeg', + '-y', # overwrite if exists + '-i', str(job['src']), + '-vn', # no video + '-c:a', 'alac', + str(job['dst']) + ], check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + logging.info(f'Converted {job["src"]}') + except subprocess.CalledProcessError: + logging.error(f'Failed to convert {job["src"]}') + +def main(): + args = parse_args() + + src = pathlib.Path(args.source) + dst = pathlib.Path(args.destination) + jobs = list(map( + lambda s: { 'src': s, 'dst': (dst / s.relative_to(src)).with_suffix('.m4a') }, + sorted(src.glob('**/*.flac')) + )) + + thread_map(convert, jobs, max_workers=args.jobs) + +if __name__ == '__main__': + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..85745ae --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +tqdm==4.67.1