YT_Video / video.py
Shami96's picture
Create video.py
8ab8202 verified
import subprocess
from pathlib import Path
import cv2
from config import FRAMES_SUBDIR
def ensure_dir(p: Path):
p.mkdir(parents=True, exist_ok=True)
def extract_audio_ffmpeg(video_path: Path, wav_path: Path, sr: int = 16000):
ensure_dir(wav_path.parent)
cmd = [
"ffmpeg", "-y",
"-i", str(video_path),
"-vn", # no video
"-ac", "1",
"-ar", str(sr),
str(wav_path),
]
subprocess.run(cmd, check=True)
return wav_path
def extract_frames(video_path: Path, out_dir: Path, interval_sec: float, max_frames: int):
ensure_dir(out_dir)
cap = cv2.VideoCapture(str(video_path))
if not cap.isOpened():
raise RuntimeError("Cannot open video")
fps = cap.get(cv2.CAP_PROP_FPS) or 25.0
step = max(int(fps * interval_sec), 1)
idx, saved = 0, 0
while True:
ok, frame = cap.read()
if not ok:
break
if idx % step == 0:
(out_dir / f"frame_{saved:05d}.jpg").write_bytes(
cv2.imencode(".jpg", frame, [int(cv2.IMWRITE_JPEG_QUALITY), 92])[1].tobytes()
)
saved += 1
if saved >= max_frames:
break
idx += 1
cap.release()
return saved
def prepare_dirs(out_root: Path, video_file: Path):
base = video_file.stem
run_dir = out_root / base
frames_dir = run_dir / FRAMES_SUBDIR
ensure_dir(run_dir)
ensure_dir(frames_dir)
return run_dir, frames_dir