部分代码基于:用python把视频转换为图片_居然.org的博客-CSDN博客_python将视频转化为图片
文中将此方法进行了改进,可以批量将视频文件转换为图片,只需要将你的视频放到指定文件夹下。
首先需要安装库,没有pip的先装一下pip:pip 安装_贪心西瓜的博客-CSDN博客
pip install opencv-python
在Pycharm或其他你正在使用的编译器中建立目录结构如下(名称可自定义,仅供参考,如不想改动代码请按此命名结构建立):
- video2image
- data
- image
- video
- “存放你的视频”(如果是mp4格式那代码就不用修改)
- video2img.py
- data
主体代码video2img.py内容如下:
import cv2
import os
'''
定义保存图片的函数
image:要保存的图片
addr:图片的地址和名称信息
num图片名称的后缀,使用int类型来计数
'''
def save_image(image,addr,num):
address = addr + str(num) + '.jpg'
cv2.imwrite(address,image)
def setDir(filepath):
'''
如果文件夹不存在就创建,如果文件存在就清空!
:param filepath:需要创建的文件夹路径
:return:
'''
if not os.path.exists(filepath):
os.mkdir(filepath)
def video2img(filename,timeF):
# 读取视频文件
vode = cv2.VideoCapture("data/video/"+filename)
# 读帧
success,frame = vode.read()
# 初始化变量
i = 0 # 帧计数
j = 0 # 图片计数
timeF = timeF # 每隔57帧(一秒)保存一张图片,这个要看自己的视频每秒是多少帧
output_path = "data/image/"+filename # 创建文件夹
setDir(output_path)
# 使用循环进行图片的保存
while success:
i = i + 1
if (i % timeF == 0):
j = i +1
save_image(frame, 'data/image/'+filename+'/image_', j)
print(filename+':save image:',j)
success,frame = vode.read()
def listdir(path, list_name):
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
listdir(file_path, list_name)
elif os.path.splitext(file_path)[1]=='.mp4':
list_name.append(file_path.split('\\')[1])
if __name__ == '__main__':
timeF = 30 # 每隔多少帧(一秒)保存一张图片,这个要看自己的视频每秒是多少帧
list_name = []
path = "data/video"
listdir(path,list_name)
for filename in list_name:
video2img(filename,timeF)
print()
函数 listdir 中的‘.mp4’ 可以改成你的视频文件的后缀格式
需要改动的参数为 timeF,表示每隔多少帧保存一张图片。
视频的帧率,右键视频,点击属性,再选择详细信息选项卡,可以看到帧速率。
帧率(Frame rate)是以帧称为单位的位图图像连续出现在显示器上的频率(速率)