opencv-python提取文件夹中所有视频并取视频第一秒最后一帧和最后一秒第一帧并存入新文件夹
时间: 2023-08-14 12:02:28 浏览: 143
你可以使用OpenCV库来提取文件夹中所有视频的第一秒最后一帧和最后一秒第一帧,并将它们保存到新的文件夹。以下是一个示例代码,可以帮助你完成这个任务:
```python
import cv2
import os
def extract_frames(input_file, output_folder):
# 打开视频文件
cap = cv2.VideoCapture(input_file)
# 获取视频的帧率和总帧数
fps = cap.get(cv2.CAP_PROP_FPS)
total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
# 计算第一秒和最后一秒的帧号
first_frame = int(fps)
last_frame = int(total_frames - fps)
# 设置视频读取的帧号
cap.set(cv2.CAP_PROP_POS_FRAMES, first_frame)
# 读取第一秒最后一帧
ret, frame = cap.read()
output_file = os.path.join(output_folder, f"{os.path.splitext(input_file)[0]}_first_frame.jpg")
cv2.imwrite(output_file, frame)
# 设置视频读取的帧号
cap.set(cv2.CAP_PROP_POS_FRAMES, last_frame)
# 读取最后一秒第一帧
ret, frame = cap.read()
output_file = os.path.join(output_folder, f"{os.path.splitext(input_file)[0]}_last_frame.jpg")
cv2.imwrite(output_file, frame)
# 释放视频对象
cap.release()
def extract_frames_from_folder(folder_path, output_folder):
# 遍历文件夹中的所有文件
for root, dirs, files in os.walk(folder_path):
for file in files:
# 检查文件是否为视频文件
if file.endswith(('.mp4', '.avi', '.mkv')):
input_file = os.path.join(root, file)
extract_frames(input_file, output_folder)
# 定义输入文件夹和输出文件夹的路径
input_folder = 'path/to/input/folder'
output_folder = 'path/to/output/folder'
# 调用函数提取视频帧
extract_frames_from_folder(input_folder, output_folder)
```
请确保已经安装了`opencv-python`库,并将代码中的`input_folder`和`output_folder`变量替换为实际的文件夹路径。提取的帧将以`.jpg`格式保存在输出文件夹中,并使用每个视频文件的基本文件名加上`_first_frame.jpg`和`_last_frame.jpg`后缀命名。
阅读全文