从视频截取每一帧作为图像

查看视频有多少帧

python 复制代码
import cv2

def count_frames_per_second(video_path):
    cap = cv2.VideoCapture(video_path)

    if not cap.isOpened():
        print("Error: Could not open video")
        return None
    
    # Get frames per second
    fps = cap.get(cv2.CAP_PROP_FPS)

    # Get total number of frames
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

    # Calculate total time in seconds
    total_time_seconds = total_frames / fps if fps > 0 else 0

    # Convert total time to minutes and seconds for better readability
    total_minutes = total_time_seconds // 60
    total_seconds = total_time_seconds % 60

    print(f"Frames per second: {fps}")
    print(f"Total frames in the video: {total_frames}")
    print(f"Total time of the video: {int(total_minutes)} minutes and {total_seconds:.2f} seconds")

    cap.release()

    return fps, total_frames, total_time_seconds

# Example usage
video_path = "D:\\WorkSpace\\pitaya_video\\video\\VID_20241015_082527.mp4"  # Change this to your video file path
count_frames_per_second(video_path)

单个视频

python 复制代码
import cv2
import os

def capture_frames(video_path,save_frame_path):
    # Get the video name without extension
    video_name,suffix_mp4 = os.path.splitext(os.path.basename(video_path))    
    # Create a directory to save frames
    frames_dir = os.path.join(save_frame_path, video_name)
    os.makedirs(frames_dir, exist_ok=True)

    # Open the video file
    cap = cv2.VideoCapture(video_path)

    if not cap.isOpened():
        print(f"Error: Could not open video file {video_path}")
        return

    frame_count = 0

    while True:
        # Read a frame from the video
        ret, frame = cap.read()
        
        # Break the loop if there are no more frames
        if not ret:
            break

        # Save the frame as an image file
        frame_filename = os.path.join(frames_dir, f"{video_name}_frame_{frame_count:04d}.jpg")
        cv2.imwrite(frame_filename, frame)
        
        print(f"Saved {frame_filename}")
        frame_count += 1

    # Release the video capture object
    cap.release()
    print(f"Total frames saved: {frame_count}")

# Example usage
video_file_path = "D:\\WorkSpace\\pitaya_video\\video"  # Replace with your video file path
video_file_path = os.path.join(video_file_path,"VID_20241015_082527.mp4")
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image"
capture_frames(video_file_path,save_frame_path)

多个视频

python 复制代码
import cv2
import os

def capture_frames_from_videos(video_directory,save_frame_path):
    # List all video files in the specified directory
    video_files = [f for f in os.listdir(video_directory) if f.endswith('.mp4')]
    
    for video_file in video_files:
        video_path = os.path.join(video_directory, video_file)
        print(f"Processing video: {video_path}")
        
        # Get the video name without extension
        video_name, suffix_mp4= os.path.splitext(video_file)
        
        # Create a directory to save frames
        frames_dir = os.path.join(save_frame_path, video_name)
        os.makedirs(frames_dir, exist_ok=True)

        # Open the video file
        cap = cv2.VideoCapture(video_path)

        if not cap.isOpened():
            print(f"Error: Could not open video file {video_path}")
            continue

        frame_count = 0

        while True:
            # Read a frame from the video
            ret, frame = cap.read()
            
            # Break the loop if there are no more frames
            if not ret:
                break

            # Save the frame as an image file
            frame_filename = os.path.join(frames_dir, f"{video_name}_frame_{frame_count:04d}.jpg")
            cv2.imwrite(frame_filename, frame)
            
            print(f"Saved {frame_filename}")
            frame_count += 1

        # Release the video capture object
        cap.release()
        print(f"Total frames saved for {video_file}: {frame_count}")

# Example usage
video_directory = "D:\\WorkSpace\\pitaya_video\\video"  # Replace with your video directory path
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image"
capture_frames_from_videos(video_directory,save_frame_path)

一秒截取3帧

python 复制代码
import cv2
import os

def capture_frames_from_videos(video_directory, save_frame_path):
    # List all video files in the specified directory
    video_files = [f for f in os.listdir(video_directory) if f.endswith('.mp4')]
    
    for video_file in video_files:
        video_path = os.path.join(video_directory, video_file)
        print(f"Processing video: {video_path}")
        
        # Get the video name without extension
        video_name, _ = os.path.splitext(video_file)
        
        # Create a directory to save frames
        frames_dir = os.path.join(save_frame_path, video_name)
        os.makedirs(frames_dir, exist_ok=True)

        # Open the video file
        cap = cv2.VideoCapture(video_path)

        if not cap.isOpened():
            print(f"Error: Could not open video file {video_path}")
            continue

        # Get the frames per second (fps) of the video
        fps = cap.get(cv2.CAP_PROP_FPS)
        print(f"Frames per second: {fps}")

        # Calculate the interval to capture 3 frames per second
        frame_interval = max(int(fps / 3), 1)  # Ensure at least one frame interval

        frame_count = 0
        saved_frame_count = 0

        while True:
            # Read a frame from the video
            ret, frame = cap.read()
            
            # Break the loop if there are no more frames
            if not ret:
                break

            # Save the frame at specific intervals
            if frame_count % frame_interval == 0:
                frame_filename = os.path.join(frames_dir, f"{video_name}_frame_{saved_frame_count:04d}.jpg")
                cv2.imwrite(frame_filename, frame)
                print(f"Saved {frame_filename}")
                saved_frame_count += 1
            
            frame_count += 1

        # Release the video capture object
        cap.release()
        print(f"Total frames saved for {video_file}: {saved_frame_count}")

# Example usage
video_directory = "D:\\WorkSpace\\pitaya_video\\video"  # Replace with your video directory path
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image"  # Replace with your desired output path
capture_frames_from_videos(video_directory, save_frame_path)
相关推荐
EasyCVR2 小时前
宇视设备视频平台EasyCVR视频融合平台果园/鱼塘/养殖场/菜园有电没网视频监控方案
科技·音视频·视频监控·监控视频接入
ZPeng_csdn5 小时前
视频协议与封装格式
音视频
ai产品老杨5 小时前
深度学习模型量化原理
开发语言·人工智能·python·深度学习·安全·音视频
runing_an_min6 小时前
ffmpeg视频滤镜:网格-drawgrid
ffmpeg·音视频·网格·drawgrid
北京同三维影音设备12 小时前
同三维TK101控制键盘连接和使用视频说明书:控制键盘
计算机外设·音视频
爱莉希雅&&&14 小时前
web前端多媒体标签设置(图片,视频,音频)以及图片热区(usemap)的设置
音视频
cuijiecheng201814 小时前
音视频入门基础:AAC专题(12)——FFmpeg源码中,解码AudioSpecificConfig的实现
ffmpeg·音视频·aac
AirDroid_cn1 天前
iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?
ios·智能手机·音视频·iphone·ipad·投屏·手机投屏
易有AI1 天前
想要音频里的人声,怎么把音频里的人声和音乐分开?
音视频
灵境引路人1 天前
【虚幻引擎UE】UE5 音频共振特效制作
ue5·音视频·虚幻