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

查看视频有多少帧

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)
相关推荐
淡淡的香烟5 小时前
Android Camera开发详解
android·音视频
笨笨饿6 小时前
#109_BK7258 蓝牙 A2DP 音频数据通路深度解析
python·stm32·单片机·mcu·物联网·编辑器·音视频
≮傷£≯√10 小时前
图片合并成视频 img2video ffmpeg
ffmpeg·音视频
A133455512 小时前
视频特效字幕怎么翻译?保姆级AI字幕与外挂字幕教程
人工智能·音视频
ViiTor_AI1 天前
从去字幕到 AI 配音:完整视频本地化流程
人工智能·音视频
明德扬1 天前
多路MIPI摄像头如何同步聚合?一文看懂FPGA视频汇聚方案
fpga开发·音视频
折枝吖1 天前
音视频开发-PCM 原理与 AI 模块实战
音视频·pcm
HySpark1 天前
熙瑾·会悟 ASR 实战:Qwen-ASR 漏字导致转写不完整,如何从音频分段到二次校验解决?
音视频·熙瑾会悟
大鹅办公1 天前
酷狗音乐怎么转换MP3格式?4种方法亲测对比+避坑指南(附FFmpeg命令行教程)
ffmpeg·音视频·音频格式
小妖同学学AI1 天前
AI视频生成难在提示词?这个Claude插件让Seedance 2.0效率翻倍,附超全示例!
人工智能·开源·github·音视频