feat: refactor: extract.py to accept multiple input files and improve output directory handling

This commit is contained in:
Hannes committed 2026-09-13 21:23:15 +02:00
1 parent cd5a090ca5
commit 0ba475ac87
1 file changed
+35 -28
+35 -28
View File
@@ -13,30 +13,37 @@ import sys
import shutil import shutil
# ─── Hardcoded input (relative to this script's directory) ─── # ─── Hardcoded input (relative to this script's directory) ───
# INPUT_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "/home/honney/Videos/Drachenzähmen/Drachenzaehmen.mp4") inputs = [
INPUT_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "/home/honney/Videos/Drachenzähmen/How to Train Your Dragon.mkv") "/home/honney/Videos/Drachenzähmen/Drachenzaehmen.mp4",
"/home/honney/Videos/Drachenzähmen/How to Train Your Dragon.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 DURATION = 90 # 1.5 minutes in seconds
OUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "extracted") OUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "extracted")
# ─── Check ffmpeg ─── # ─── Check ffmpeg ───
if shutil.which("ffmpeg") is None: if shutil.which(f"ffmpeg") is None:
sys.exit("ERROR: 'ffmpeg' not found on PATH. Install it and try again.") sys.exit(f"ERROR: 'ffmpeg' not found on PATH. Install it and try again.")
# ─── Prepare output folder ─── # ─── Prepare output folder ───
os.makedirs(OUT_DIR, exist_ok=True) os.makedirs(OUT_DIR, exist_ok=True)
# ─── Derive output filenames ─── for INPUT_FILE in INPUT_FILES:
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")
print(f"Input : {INPUT_FILE}") # ─── Derive output filenames ───
print(f"Video → {video_out}") stem = os.path.splitext(os.path.basename(INPUT_FILE))[0]
print(f"Audio → {audio_out}") video_out = os.path.join(OUT_DIR, f"{stem}_video.mkv")
print("-" * 50) audio_out = os.path.join(OUT_DIR, f"{stem}_audio.mp3")
# ─── Extract video-only (first 90s, no audio) ─── print(f"Input : {INPUT_FILE}")
cmd_video = [ print(f"Video → {video_out}")
print(f"Audio → {audio_out}")
print(f"-" * 50)
# ─── Extract video-only (first 90s, no audio) ───
cmd_video = [
"ffmpeg", "ffmpeg",
"-y", # overwrite output "-y", # overwrite output
"-i", INPUT_FILE, "-i", INPUT_FILE,
@@ -44,15 +51,15 @@ cmd_video = [
"-an", # no audio "-an", # no audio
"-c:v", "copy", # copy video stream (no re-encode = fast + lossless) "-c:v", "copy", # copy video stream (no re-encode = fast + lossless)
video_out video_out
] ]
print("[video] running ffmpeg…") print(f"[video: {stem}] running ffmpeg…")
r = subprocess.run(cmd_video, capture_output=True, text=True) r = subprocess.run(cmd_video, capture_output=True, text=True)
if r.returncode != 0: if r.returncode != 0:
sys.exit(f"ffmpeg (video) failed:\n{r.stderr}") sys.exit(f"ffmpeg (video) failed:\n{r.stderr}")
print("[video] done ✔") print(f"[video: {stem}] done ✔")
# ─── Extract audio-only (first 90s, no video) ─── # ─── Extract audio-only (first 90s, no video) ───
cmd_audio = [ cmd_audio = [
"ffmpeg", "ffmpeg",
"-y", "-y",
"-i", INPUT_FILE, "-i", INPUT_FILE,
@@ -61,12 +68,12 @@ cmd_audio = [
"-c:a", "libmp3lame", "-c:a", "libmp3lame",
"-b:a", "192k", # 192 kbps "-b:a", "192k", # 192 kbps
audio_out audio_out
] ]
print("[audio] running ffmpeg…") print(f"[audio: {stem}] running ffmpeg…")
r = subprocess.run(cmd_audio, capture_output=True, text=True) r = subprocess.run(cmd_audio, capture_output=True, text=True)
if r.returncode != 0: if r.returncode != 0:
sys.exit(f"ffmpeg (audio) failed:\n{r.stderr}") sys.exit(f"ffmpeg (audio) failed:\n{r.stderr}")
print("[audio] done ✔") print(f"[audio: {stem}] done ✔")
print("-" * 50) print(f"-" * 50)
print("All done. Files are in:", OUT_DIR) print(f"All done. Files are in:", OUT_DIR)