这个代码能遍历指定文件夹内的所有视频文件吗?
时间: 2024-03-05 18:47:32 浏览: 60
遍历指定文件夹下所有指定类型文件的代码
可以的,你可以在代码中添加一个遍历文件夹的函数,来遍历指定文件夹内的所有视频文件,并逐个提取视频帧保存到指定的帧图像路径。下面是一个示例代码:
```python
import cv2
import os
def extract_frames(video_path, frames_path):
# 创建一个 VideoCapture 对象
cap = cv2.VideoCapture(video_path)
# 获取视频帧率
fps = cap.get(cv2.CAP_PROP_FPS)
# 获取视频总帧数
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# 获取视频宽度和高度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 逐帧提取图像
for i in range(frame_count):
# 设置帧的位置
cap.set(cv2.CAP_PROP_POS_FRAMES, i)
# 读取一帧图像
ret, frame = cap.read()
# 如果成功读取到一帧图像
if ret:
# 构造保存图像的文件名
filename = os.path.join(frames_path, f"{i}.jpg")
# 保存图像
cv2.imwrite(filename, frame)
# 释放 VideoCapture 对象
cap.release()
def extract_frames_from_folder(video_folder, frames_folder):
# 遍历视频文件夹内的所有视频文件
for video_file in os.listdir(video_folder):
# 如果不是视频文件,则跳过
if not video_file.lower().endswith(('.mp4', '.avi', '.mov')):
continue
# 构造视频文件路径和帧图像保存路径
video_path = os.path.join(video_folder, video_file)
frames_path = os.path.join(frames_folder, os.path.splitext(video_file)[0])
# 创建帧图像保存路径
os.makedirs(frames_path, exist_ok=True)
# 逐帧提取图像
extract_frames(video_path, frames_path)
if __name__ == '__main__':
# 指定视频文件夹路径和帧图像保存路径
video_folder = '/path/to/videos'
frames_folder = '/path/to/frames'
# 逐帧提取图像
extract_frames_from_folder(video_folder, frames_folder)
```
在遍历视频文件夹的函数中,我们使用 os.listdir() 函数来获取视频文件夹内的所有文件和文件夹,并逐个判断是否为视频文件。对于每个视频文件,我们使用 os.path.splitext() 函数来获取文件名和扩展名,并构造帧图像保存路径。最后,我们调用 extract_frames() 函数来逐帧提取图像,并将提取出的图像保存到指定的帧图像保存路径。
请注意,在运行这段代码之前,你需要安装 OpenCV 库,并且需要指定正确的视频文件夹路径和帧图像保存路径。
阅读全文