Source code for draugr.ffmpeg_utilities.extract

import subprocess
from pathlib import Path
from typing import Optional

from apppath import ensure_existence
from warg import Number

FORMAT_LIST = [".mp4", ".avi", ".mkv", ".flv", ".mov"]
AUDIO_FORMAT = ".aac"

__all__ = ["extract_frames"]


[docs]def extract_frames( file_path: Path, frame_out_dir: Optional[Path] = None, audio_out_dir: Optional[Path] = None, rate: Number = 25, frame_format: str = "jpg", extract_sound: bool = True, ffmpeg_path: Path = "ffmpeg", ): """ :param file_path: :type file_path: :param frame_out_dir: :type frame_out_dir: :param audio_out_dir: :type audio_out_dir: :param rate: :type rate: :param frame_format: :type frame_format: :param extract_sound: :type extract_sound: :param ffmpeg_path: :type ffmpeg_path: """ root_dir = file_path.parent if frame_out_dir is None: frame_out_dir = ensure_existence(root_dir / file_path.stem / "frames") if audio_out_dir is None: audio_out_dir = ensure_existence(frame_out_dir.parent / "audio") if file_path.is_file() and file_path.suffix in FORMAT_LIST: print(f"start extracting {file_path} frames") subprocess.call( [ str(ffmpeg_path), "-i", file_path, "-r", str(rate), "-f", "image2", "-y", "-qscale:v", "2", str(frame_out_dir / f"%d.{frame_format}"), ] ) print(f"end extracting {file_path} frames") if extract_sound: print(f"start extracting {file_path} audio") subprocess.call( [ str(ffmpeg_path), "-i", file_path, "-vn", "-acodec", "copy", "-y", str(audio_out_dir / f"track{AUDIO_FORMAT}"), ] ) print(f"end extracting {file_path} audio") else: print(f"{file_path} is not a video file")
if __name__ == "__main__": # a = Path.home() / "DataWin" / "DeepFake" / "Frontier" / "Originals" / "thomas_old_high_res.mp4" a = ( Path.home() / "SynologyDrive" / "Frontier" / "Fra Frontier" / "Personer" / "Peter AG" / "Peter AG 1983+1991.mp4" ) ffmpeg_path = "ffmpeg" if False: ffmpeg_path = ( Path.home() / "OneDrive - Alexandra Instituttet" / "Applications" / "ffmpeg-5.0-essentials_build" / "bin" / "ffmpeg.exe" ) extract_frames( a, ffmpeg_path=ffmpeg_path, )