吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 216|回复: 6
收起左侧

[资源求助] 求视频截帧软件

[复制链接]
qiupeiyuan 发表于 2024-9-9 21:58
25吾爱币
求个好用的视频截帧软件,要能一帧一帧的查看、并截取图片,还要能自动把整个视频都拆解成一帧一帧的图片并自动保存。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

鹿坪 发表于 2024-9-10 08:43
PotPlayer,设置里面步进设置为一帧
Cristy 发表于 2024-9-10 09:42
需要python环境并 安装库:
pip install opencv-python Pillow


[Python] 纯文本查看 复制代码
import cv2
import os
from tkinter import *
from tkinter import filedialog
from PIL import Image, ImageTk

class VideoFrameExtractor:
    def __init__(self, master):
        self.master = master
        self.master.title("视频逐帧截取")
        
        self.video_path = ""
        self.cap = None
        self.current_frame = 0
        self.frames = []

        self.label = Label(master)
        self.label.pack()

        self.btn_load = Button(master, text="加载视频", command=self.load_video)
        self.btn_load.pack()

        self.btn_next = Button(master, text="下一帧", command=self.next_frame)
        self.btn_next.pack()

        self.btn_save = Button(master, text="保存当前帧", command=self.save_frame)
        self.btn_save.pack()

        self.btn_extract = Button(master, text="提取所有帧", command=self.extract_frames)
        self.btn_extract.pack()

    def load_video(self):
        self.video_path = filedialog.askopenfilename(title="选择视频文件", filetypes=[("Video Files", "*.mp4;*.avi;*.mov")])
        if self.video_path:
            self.cap = cv2.VideoCapture(self.video_path)
            self.current_frame = 0
            self.frames = []
            self.show_frame()

    def show_frame(self):
        if self.cap is not None:
            self.cap.set(cv2.CAP_PROP_POS_FRAMES, self.current_frame)
            ret, frame = self.cap.read()
            if ret:
                self.frames.append(frame)
                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                img = Image.fromarray(frame)
                img = ImageTk.PhotoImage(img)
                self.label.config(image=img)
                self.label.image = img

    def next_frame(self):
        self.current_frame += 1
        self.show_frame()

    def save_frame(self):
        if self.frames:
            frame_to_save = self.frames[self.current_frame]
            filename = f"frame_{self.current_frame}.jpg"
            cv2.imwrite(filename, frame_to_save)
            print(f"保存帧: {filename}")

    def extract_frames(self):
        if self.cap is not None:
            frame_count = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))
            for i in range(frame_count):
                self.cap.set(cv2.CAP_PROP_POS_FRAMES, i)
                ret, frame = self.cap.read()
                if ret:
                    cv2.imwrite(f"frame_{i}.jpg", frame)
            print("所有帧已提取")

if __name__ == "__main__":
    root = Tk()
    app = VideoFrameExtractor(root)
    root.mainloop()
 楼主| qiupeiyuan 发表于 2024-9-10 14:31
鹿坪 发表于 2024-9-10 08:43
PotPlayer,设置里面步进设置为一帧

VLC可以吗,不想安装potplayer,打开视频比vlc慢很多
 楼主| qiupeiyuan 发表于 2024-9-10 14:34
Cristy 发表于 2024-9-10 09:42
需要python环境并 安装库:
pip install opencv-python Pillow

膜拜大佬

没接触过派森
代码怎么用
Dmark 发表于 2024-9-10 14:53
qiupeiyuan 发表于 2024-9-10 14:34
膜拜大佬

没接触过派森

Python学习全套课程(入门+数据分析+爬虫+云端开发+游戏开发+科学计算+机器学习)
https://www.52pojie.cn/thread-1953744-1-1.html
(出处: 吾爱破解论坛)

你看入门就行了,别看那么多,找自己想要的就行了。
Dmark 发表于 2024-9-10 14:54
qiupeiyuan 发表于 2024-9-10 14:34
膜拜大佬

没接触过派森

不知道就用吾爱的搜索功能,没有再发帖求助
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 00:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表