该工具是用python写的一个小工具,使用opencv和tkinter,可以把视频转为图片,opencv支持的该工具就支持,使用方法很简单
1、打开视频路径
2、设置好图片开始的序号,若不输入将默认为从0开始
3、设置好图片后缀名,比如需要jpg格式就输入:.jpg(注意有一个点),不输入则默认为.bmp格式 4、输入帧间隔数,比如输入1,则每隔一帧输出图片,不输入默认为0,不跳帧
5、点击输出视频图片,选择要输出的图片路径(输出路径不能有中文) 如果第二第三步不设置,默认是输出.bmp格式和从0开始排列图片,该软件基于win7打包,win10,win11均可运行
如果第二第三步不设置,默认是输出.bmp格式和从0开始排列图片
该软件基于win11打包
打包好的链接在这:【免费】基于python的视频转图片工具MP4/avi/其他转bmp/jpg/png(不限格式)资源-CSDN文库
百度网盘链接:
链接:https://pan.baidu.com/s/1-OZ8JeGfoXT9E3qu6BwYiA?pwd=1257
提取码:1257
如果运行不了就需要自己运行了,代码都在下面了,有需要自己拿
opencv无法直接打包
opencv在pyinstaller需要以下命令:
pyinstaller -F -w C:\\Users\MSN\Desktop\mp42bmp\application.py --hidden-import opencv-python
上面的路径改成你们自己的py文件下
# -*- coding: utf-8 -*-
from asyncio.windows_events import NULL
from turtle import width
import cv2 as cv
import tkinter as tk
from tkinter import filedialog
class Callback():
def __init__(self):
self.get_fp = NULL
self.get_fp1 = NULL
def Openvideo(self):
self.get_fp = filedialog.askopenfilename()
def Outputvideo(self):
self.get_fp1 = filedialog.askdirectory()#获取目录
#self.get_fp1 = filedialog.asksaveasfilename(title='保存路径', filetypes=[("PNG", ".png"),("JPEG", ".jpg"),("BMP", ".bmp"),("BMP", ".bmp")])
video = cv.VideoCapture(self.get_fp)
if SerialNumberControl.get() == "请输入图片命名开始序号":
i = 0
else :
i = int(SerialNumberControl.get())
if Fileextension.get() == "请输入图片后缀名(.bmp)":
file_extension = ".bmp"
else :
file_extension = str(FileextensionControl.get())
while video.isOpened():
#video.read() : 一次读取视频中的每一帧,会返回两个值;
#res : 为bool类型表示这一帧是否真确读取,正确读取为True,如果文件读取到结尾,它的返回值就为False;
#frame : 表示这一帧的像素点数组
if intextension.get() == "间隔帧数(0)" or int(intextension.get()) == 0:
ret, frame = video.read()
else:
a = 0
intercal = int(intextension.get())
for a in range(0,intercal+1) :#输入1就间隔一张
ret, frame = video.read()
if frame is None:
break
if ret == True:
cv.imshow("result", frame)
#image = cv.cvtColor(frame, cv.COLOR_BGR2RGBA)#转换颜色从BGR到RGBA
#image = Image.fromarray(image)#将图像转换成Image对象
#print(image.height ,image.width)
#Path_string = "./image2bmp/"+str(i)+".bmp"
Path_string = self.get_fp1+"/"+str(i)+file_extension
print(Path_string)
cv.imwrite(Path_string,frame)
i=i+1
#100 : 表示一帧等待一百毫秒在进入下一帧, 0xFF : 表示键入键 27 = esc
if cv.waitKey(10) & 0xFF == 27 :
break
#video.release()释放视频
video.release()
Function = Callback()
ws = tk.Tk()
SerialNumber = tk.StringVar()
Fileextension = tk.StringVar()
intextension = tk.StringVar()
#ws.title('支持:QQ1257784610')
ws.geometry('200x150')
#frame = tk.Frame(ws)
OpenvideoeButton = tk.Button(ws , text = "打开视频路径" , command = Function.Openvideo,width = 10)
OpenvideoeButton.pack()
OutputvideoButton = tk.Button(ws , text = "输出视频图片" , command = Function.Outputvideo,width = 10)
OutputvideoButton.pack()
SerialNumberControl = tk.Entry(ws , width = 20 , textvariable = 1, text = SerialNumber , exportselection = 1)
SerialNumberControl.pack()
SerialNumber.set("请输入图片命名开始序号")
FileextensionControl = tk.Entry(ws , width = 20 , textvariable = 1, text = Fileextension , exportselection = 1)
FileextensionControl.pack()
Fileextension.set("请输入图片后缀名(.bmp)")
intervaltextensionControl = tk.Entry(ws , width = 20 , textvariable = 1, text = intextension , exportselection = 1)
intervaltextensionControl.pack()
intextension.set("间隔帧数(0)")
labeltext = tk.Label(ws,text = "技术支持:QQ1257784610")
labeltext.pack()
ws.mainloop()