initial commit

This commit is contained in:
2025-11-14 18:30:49 +01:00
commit d5a0bd0fdf
6 changed files with 283 additions and 0 deletions

45
convert.py Normal file
View File

@ -0,0 +1,45 @@
import os
import subprocess
from pathlib import Path
from concurrent.futures import ProcessPoolExecutor, as_completed
import multiprocessing
def convert_file(filepath, out_dir):
filename = os.path.basename(filepath)
basename, _ = os.path.splitext(filename)
out_filename = basename + ".m4a"
out_path = os.path.join(out_dir, out_filename)
# ffmpeg command to copy audio
proc = subprocess.run(
["ffmpeg", "-i", filepath, "-vn", "-c:a", "copy", out_path],
capture_output=True
)
if proc.returncode != 0:
return f"ERROR: Failed to convert {filename}\n{proc.stderr.decode()}"
return f"Converted: {filename}"
def main():
cwd = Path.cwd()
in_dir = cwd / "playlists"
out_dir = cwd / "audios"
os.makedirs(out_dir, exist_ok=True)
files = [str(in_dir / f) for f in os.listdir(in_dir) if f.lower().endswith(('.mp4', '.mkv', '.mov'))]
# Use number of CPU cores, with 16 files max per core
num_cores = multiprocessing.cpu_count()
max_workers = min(len(files), num_cores)
print(f"Converting {len(files)} files using {max_workers} workers...")
results = []
with ProcessPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(convert_file, f, str(out_dir)): f for f in files}
for future in as_completed(futures):
print(future.result())
if __name__ == "__main__":
main()