Source code for lecture2notes.end_to_end.frames_extractor

import logging
import os

from .helpers import make_dir_if_not_exist

logger = logging.getLogger(__name__)


[docs]def extract_frames(input_video_path, quality, output_path, extract_every_x_seconds): """Extracts frames from `input_video_path` at quality level `quality` (best quality is 2) every `extract_every_x_seconds seconds` and saves them to `output_path`""" quality = str(quality) output_path = str(output_path) extract_every_x_seconds = str(extract_every_x_seconds) logger.debug( "Received inputs\ninput_video_path=" + str(input_video_path) + "\nquality=" + str(quality) + "\noutput_path=" + str(output_path) ) make_dir_if_not_exist(output_path) command = ( "ffmpeg -i " + str(input_video_path) + ' -vf "fps=1/' + str(extract_every_x_seconds) + '" -q:v ' + str(quality) + " " + str(output_path) + "/img_%05d.jpg" ) logger.debug("Running command: " + command) os.system(command) for filename in os.listdir(output_path): if filename.endswith(".jpg"): new_number = int(filename.split("_")[1].split(".")[0]) * int( extract_every_x_seconds ) new_filename = "img_" + str(new_number).zfill(5) + ".jpg" os.rename( os.path.join(output_path, filename), os.path.join(output_path, new_filename), ) logger.info( "Frame extraction successful. Returning output_path=" + str(output_path) ) return output_path