基于python的视频转图片工具 MP4/avi/其他转bmp/jpg/png(不限格式)

该工具是用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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值