From 47e8b0d11adc9286ed400eac62230d334657802f Mon Sep 17 00:00:00 2001 From: grglcy Date: Sat, 18 Jan 2025 13:58:10 +0000 Subject: [PATCH] Transcode using track class --- src/transcode/transcoder.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/transcode/transcoder.py b/src/transcode/transcoder.py index b0457da..26ccc7e 100644 --- a/src/transcode/transcoder.py +++ b/src/transcode/transcoder.py @@ -2,6 +2,7 @@ from pathlib import Path import shutil import subprocess from multiprocessing import Pool +from . import Track class Transcoder: @@ -29,17 +30,18 @@ class Transcoder: self.copy_album_art(album, album_out) for file in album.iterdir(): if file.is_file() and file.suffix.lower() == '.flac': - transcode_list.append((str(file), str(album_out / f"{file.stem}.{self.extension}"))) + transcode_list.append(Track(file)) else: print(f"Warning, skipping non-dir '{album}' found in artist '{artist.parts[-1]}'") continue else: print(f"Warning, skipping non-dir '{artist}' found in root") continue - self._transcode(transcode_list, self.encoder) + self._transcode_single_thread(transcode_list, self.encoder) + #self._transcode(transcode_list, self.encoder) def _transcode(self, transcode_list: list, encoder: Path, workers=16): - worker_args = [(row[0], row[1], encoder) for row in transcode_list] + worker_args = [(track, encoder) for track in transcode_list] with Pool(workers) as p: results = p.starmap_async(self.transcode_worker, worker_args) p.close() @@ -48,25 +50,26 @@ class Transcoder: print(result) def _transcode_single_thread(self, transcode_list: list, encoder: Path): - worker_args = [(row[0], row[1], encoder) for row in transcode_list] + worker_args = [(track, encoder) for track in transcode_list] for args in worker_args: print(f"{args[0]}") self.transcode_worker(*args) - def transcode_worker(self, in_track, out_track, encoder): + def transcode_worker(self, track, encoder): enc_filename = encoder.parts[-1] + track_output = track.output_file(self.output_root, self.extension) if enc_filename == "opusenc.exe": additional_args = ('--bitrate', '128', '--music') - subprocess_args = (str(encoder),) + additional_args + (in_track, out_track) + subprocess_args = (str(encoder),) + additional_args + (str(track.path), str(track_output)) elif enc_filename == "qaac64.exe": - additional_args = (in_track, '-o', out_track, '--threading') + additional_args = (str(track), '-o', str(track_output), '--threading') subprocess_args = (str(encoder),) + additional_args try: subprocess.run(subprocess_args, capture_output=True, text=True, check=True) - return f"Transcoded '{in_track}' successfully." + return f"Transcoded '{track}' successfully." except Exception: - return f"ERROR: Transcoding of '{in_track}' failed." + return f"ERROR: Transcoding of '{track}' failed." @staticmethod def copy_album_art(in_dir: Path, out_dir: Path, file_whitelist: list = None):