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

查看视频有多少帧

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)
相关推荐
cver12313 小时前
足球视频检测数据集介绍-160张图片-智能体育转播 运动数据分析 自动化视频剪辑 裁判辅助系统 青训技术分析 虚拟现实体验
数据分析·自动化·音视频
来鸟 鸣间13 小时前
MIPI D-PHY 理解
linux·音视频·sensor·mipi
美狐美颜SDK开放平台17 小时前
专业直播美颜SDK如何打造?美型功能开发思路与方案分享
大数据·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
你好音视频17 小时前
FFmpeg FLV解码器原理深度解析
c++·ffmpeg·音视频
行业探路者18 小时前
如何利用活码生成产品画册二维码?
学习·音视频·语音识别·二维码·设备巡检
web前端进阶者19 小时前
webRTC指定设备加自定义用户头像
音视频·webrtc
vfvfb19 小时前
音频批量加速 mp3批量加速1.5倍
音视频
ACP广源盛1392462567320 小时前
GSV6701A@ACP#6701A产品规格详解及产品应用分享
网络·嵌入式硬件·音视频
EasyDSS20 小时前
视频推流平台EasyDSS无人机推流直播在安防监控中的智能应用
音视频·无人机
你好音视频20 小时前
FFmpeg FLV编码器原理深度解析
c++·ffmpeg·音视频