import cv2
import os
import sys

# Function to extract frames from a video until reaching the desired frame count
def extract_frames(video_file):
    cap = cv2.VideoCapture(video_file)

    frame_rate = 2  # Desired frame rate (1 frame every 0.5 seconds)
    frame_count = 0

    # Get the video file's name without extension
    video_name = os.path.splitext(os.path.basename(video_file))[0]

    # Create an output folder with a name corresponding to the video
    output_directory = f"{video_name}_frames"
    os.makedirs(output_directory, exist_ok=True)

    while True:
        ret, frame = cap.read()

        if not ret:
            break

        frame_count += 1

        # Only extract frames at the desired frame rate
        if frame_count % int(cap.get(5) / frame_rate) == 0:
            output_file = f"{output_directory}/frame_{frame_count}.png"
            cv2.imwrite(output_file, frame)
            print(f"Frame {frame_count} has been extracted and saved as {output_file}")
        if frame_count >= 30:
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    if len(sys.argv)<2:
        print("Usage:\n  < mp4 file name >")
        sys.exit()
    if 2== len(sys.argv):
        files = sys.argv[1:]
        video_file = files[0]
        sys.exit(extract_frames(video_file))
    else:

        sys.exit()




标签: none

评论已关闭