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

查看视频有多少帧

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)
相关推荐
angushine1 小时前
文本转视频2
人工智能·音视频·语音识别
刘广睿2 小时前
给素材库加语音转写:Whisper 本地部署与批量字幕生成实践
人工智能·aigc·音视频·语音识别·效率工具
benbenAItalk10 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
AI创界者14 小时前
前沿多模态大模型 MiniMax-H3无审查 本地部署与深度实测指南
人工智能·aigc·音视频
世岩清上19 小时前
展厅数字内容同质化严重,怎样打造专属叙事风格?
大数据·前端·javascript·人工智能·html·音视频·展厅改造
LCG元19 小时前
STM32F407 I2S驱动WM8978音频播放实战:PLLI2S时钟整定、DMA双缓冲防爆音与WAV采样率实测
stm32·嵌入式硬件·音视频
jbk331120 小时前
PixiuCut「视频批量分割」支持智能镜头分割、按时长、按数量分割,可定义最小时长避免无效片段等多可选参数可设置
人工智能·音视频·剪辑软件·剪映自动化软件
投票竞赛20 小时前
作品投票版权注意事项,线上评选上传图片视频须知
python·音视频
byte轻骑兵1 天前
【AVDTP】规范精讲[13]: 吃透内容保护机制,打通蓝牙音视频版权加密全流程
人工智能·音视频·avrcp·蓝牙耳机·蓝牙音频
世岩清上1 天前
文旅历史展厅纪录片式视频,怎样弱化说教感提升自主观看欲?
人工智能·音视频·宣传片·展厅改造