diff --git a/extract.py b/extract.py index c4152e1..3591e25 100644 --- a/extract.py +++ b/extract.py @@ -13,60 +13,67 @@ import sys import shutil # ─── Hardcoded input (relative to this script's directory) ─── -# INPUT_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "/path/to/movie_b.mp4") -INPUT_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "/path/to/movie_a.mkv") +inputs = [ + "/path/to/movie_b.mp4", + "/path/to/movie_a.mkv" +] +INPUT_FILES = [] +for input_file in inputs: + INPUT_FILES.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), input_file)) DURATION = 90 # 1.5 minutes in seconds OUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "extracted") # ─── Check ffmpeg ─── -if shutil.which("ffmpeg") is None: - sys.exit("ERROR: 'ffmpeg' not found on PATH. Install it and try again.") +if shutil.which(f"ffmpeg") is None: + sys.exit(f"ERROR: 'ffmpeg' not found on PATH. Install it and try again.") # ─── Prepare output folder ─── os.makedirs(OUT_DIR, exist_ok=True) -# ─── Derive output filenames ─── -stem = os.path.splitext(os.path.basename(INPUT_FILE))[0] -video_out = os.path.join(OUT_DIR, f"{stem}_video.mkv") -audio_out = os.path.join(OUT_DIR, f"{stem}_audio.mp3") +for INPUT_FILE in INPUT_FILES: -print(f"Input : {INPUT_FILE}") -print(f"Video → {video_out}") -print(f"Audio → {audio_out}") -print("-" * 50) + # ─── Derive output filenames ─── + stem = os.path.splitext(os.path.basename(INPUT_FILE))[0] + video_out = os.path.join(OUT_DIR, f"{stem}_video.mkv") + audio_out = os.path.join(OUT_DIR, f"{stem}_audio.mp3") -# ─── Extract video-only (first 90s, no audio) ─── -cmd_video = [ - "ffmpeg", - "-y", # overwrite output - "-i", INPUT_FILE, - "-t", str(DURATION), - "-an", # no audio - "-c:v", "copy", # copy video stream (no re-encode = fast + lossless) - video_out -] -print("[video] running ffmpeg…") -r = subprocess.run(cmd_video, capture_output=True, text=True) -if r.returncode != 0: - sys.exit(f"ffmpeg (video) failed:\n{r.stderr}") -print("[video] done ✔") + print(f"Input : {INPUT_FILE}") + print(f"Video → {video_out}") + print(f"Audio → {audio_out}") + print(f"-" * 50) -# ─── Extract audio-only (first 90s, no video) ─── -cmd_audio = [ - "ffmpeg", - "-y", - "-i", INPUT_FILE, - "-t", str(DURATION), - "-vn", # no video - "-c:a", "libmp3lame", - "-b:a", "192k", # 192 kbps - audio_out -] -print("[audio] running ffmpeg…") -r = subprocess.run(cmd_audio, capture_output=True, text=True) -if r.returncode != 0: - sys.exit(f"ffmpeg (audio) failed:\n{r.stderr}") -print("[audio] done ✔") + # ─── Extract video-only (first 90s, no audio) ─── + cmd_video = [ + "ffmpeg", + "-y", # overwrite output + "-i", INPUT_FILE, + "-t", str(DURATION), + "-an", # no audio + "-c:v", "copy", # copy video stream (no re-encode = fast + lossless) + video_out + ] + print(f"[video: {stem}] running ffmpeg…") + r = subprocess.run(cmd_video, capture_output=True, text=True) + if r.returncode != 0: + sys.exit(f"ffmpeg (video) failed:\n{r.stderr}") + print(f"[video: {stem}] done ✔") -print("-" * 50) -print("All done. Files are in:", OUT_DIR) + # ─── Extract audio-only (first 90s, no video) ─── + cmd_audio = [ + "ffmpeg", + "-y", + "-i", INPUT_FILE, + "-t", str(DURATION), + "-vn", # no video + "-c:a", "libmp3lame", + "-b:a", "192k", # 192 kbps + audio_out + ] + print(f"[audio: {stem}] running ffmpeg…") + r = subprocess.run(cmd_audio, capture_output=True, text=True) + if r.returncode != 0: + sys.exit(f"ffmpeg (audio) failed:\n{r.stderr}") + print(f"[audio: {stem}] done ✔") + + print(f"-" * 50) +print(f"All done. Files are in:", OUT_DIR)