import cv2
import os

def video_to_frames(video_file, output_folder, quality=95, target_fps=None):
    # Create the output folder if it doesn't exist
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # Open the video file
    cap = cv2.VideoCapture(video_file)
    
    # Check if the video opened successfully
    if not cap.isOpened():
        print(f"Error: Could not open video file {video_file}")
        return
    
    # Get the original FPS of the video
    original_fps = cap.get(cv2.CAP_PROP_FPS)
    
    # Determine the frame interval
    if target_fps is not None and target_fps > 0:
        frame_interval = int(original_fps / target_fps)
    else:
        frame_interval = 1
    
    frame_count = 0
    saved_frame_count = 0
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        
        # Save frame only if it matches the interval
        if frame_count % frame_interval == 0:
            # Write the frame as a JPEG file with the specified quality
            frame_filename = os.path.join(output_folder, f"frame_{saved_frame_count:04d}.jpg")
            cv2.imwrite(frame_filename, frame, [int(cv2.IMWRITE_JPEG_QUALITY), quality])
            saved_frame_count += 1
        
        frame_count += 1
    
    # Release the video capture object
    cap.release()
    print(f"Extracted {saved_frame_count} frames from {video_file} to {output_folder}")

# Example usage
video_file = 'site2_vertical.mp4'
output_folder = './out_site2_vertical'
quality = 100  # JPEG quality (0 to 100)
target_fps = 29  # Target frames per second

video_to_frames(video_file, output_folder, quality, target_fps)
