吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1873|回复: 36
收起左侧

[Python 原创] 利用ffmpeg提取视频一帧保存成图片

  [复制链接]
zhu2023 发表于 2024-8-13 17:44
做自媒体的朋友经常会给视频制作封面,但又不想单独制作,可以通过提取视频的某一帧保存成图片。下面是用ffmpeg-python制作,带GUI,方便操作。输入源选择视频所在目录即可,并自动将文件夹的名称作为图片名称命名,并存放在该文件夹内,方便分类管理。如果需要将图片加上文字,大佬们可以继续完善。

以下是Python源码
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog, messagebox
import ffmpeg
import os

def extract_frame(input_path, output_path, timestamp='00:00:10', frame_count=1):
    """
    从视频中提取特定时间的帧。

    :param input_path: 输入视频文件的路径。
    :param output_path: 保存提取的图像的路径。
    :param timestamp: 视频中提取帧的时间位置(默认为 '00:00:10')。
    :param frame_count: 要提取的帧数(默认为1,类似于 ffmpeg 中的 -frames:v 1)。
    """
    try:
        (
            ffmpeg
            .input(input_path, ss=timestamp)
            .output(output_path, vframes=frame_count)
            .run(overwrite_output=True)
        )
        messagebox.showinfo("成功", "帧提取成功!")
    except Exception as e:
        messagebox.showerror("错误", f"帧提取失败:{e}")

def select_input_file():
    file_path = filedialog.askopenfilename()
    input_path.set(file_path)

    # 获取输入文件的父文件夹名并生成输出文件名
    folder_name = os.path.basename(os.path.dirname(file_path))
    output_file = os.path.join(os.path.dirname(file_path), f"{folder_name}.png")
    output_path.set(output_file)

def run_extraction():
    if not input_path.get() or not output_path.get():
        messagebox.showwarning("警告", "请先选择输入和输出文件路径。")

        return

    timestamp = timestamp_entry.get()
    extract_frame(input_path.get(), output_path.get(), timestamp)

# 创建主窗口
root = tk.Tk()
root.title("视频帧提取器")

# 定义输入输出路径和时间戳
input_path = tk.StringVar()
output_path = tk.StringVar()

# 创建并放置GUI组件
tk.Label(root, text="输入视频文件:").grid(row=0, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=input_path, width=50).grid(row=0, column=1, padx=5, pady=5)
tk.Button(root, text="选择文件", command=select_input_file).grid(row=0, column=2, padx=5, pady=5)

tk.Label(root, text="输出图像文件:").grid(row=1, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=output_path, width=50).grid(row=1, column=1, padx=5, pady=5)

tk.Label(root, text="时间戳 (HH:MM:SS):").grid(row=2, column=0, padx=5, pady=5)
timestamp_entry = tk.Entry(root)
timestamp_entry.insert(0, "00:00:10")
timestamp_entry.grid(row=2, column=1, padx=5, pady=5)

tk.Button(root, text="提取帧", command=run_extraction).grid(row=3, column=1, padx=5, pady=20)

# 运行主循环
root.mainloop()


免费评分

参与人数 2吾爱币 +8 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
chaozhi + 1 我很赞同!

查看全部评分

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

 楼主| zhu2023 发表于 2024-8-13 20:46
baliao 发表于 2024-8-13 20:28
谢谢大佬分享! 我安装了ffmpeg                        1.4
但发现这个包没有这些属性/方法
             ...


首选系统环境要有ffmpeg,然后在Python里面安装一个命令接口 pip install ffmpeg-python
baliao 发表于 2024-8-13 20:28
谢谢大佬分享! 我安装了ffmpeg                        1.4
但发现这个包没有这些属性/方法
            ffmpeg
            .input(input_path, ss=timestamp)
            .output(output_path, vframes=frame_count)
            .run(overwrite_output=True)
ffmpeg里面只有这几个文件. __ini__.py 里面为空.
2018/09/10  17:51             1,600 audio.py
2018/09/11  16:20             1,187 image.py
2018/10/08  10:54             6,477 stream.py
2018/09/11  16:35             8,471 video.py
2018/09/10  10:02                 0 __init__.py
所以无法运行这个,需要怎么处理? 谢谢!
 楼主| zhu2023 发表于 2024-8-13 20:44
edbb8d40506b 发表于 2024-8-13 20:37
请问大佬,这里的python是利用ffi调用libffmpeg还是用的系统里的ffmpeg二进制呀?

用Python的,  pip install ffmpeg-python 安装
kangta520 发表于 2024-8-13 21:06
本帖最后由 kangta520 于 2024-8-13 21:08 编辑

出现问题AttributeError: module 'ffmpeg' has no attribute 'input'
pip install ffmpeg-python安装
pip show ffmpeg-python查看

排查不出
baliao 发表于 2024-8-13 21:11
zhu2023 发表于 2024-8-13 20:46
首选系统环境要有ffmpeg,然后在Python里面安装一个命令接口 pip install ffmpeg-python

感谢大佬指导! 现在可以正常提取了! 谢谢!
fhlfxtd 发表于 2024-8-13 21:49
感谢分享
justwz 发表于 2024-8-13 22:17
截屏也可以啊
huaxiaotian 发表于 2024-8-13 23:29
好用的工具
fxfxs 发表于 2024-8-14 05:32
谢谢分享,看着好用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-12 21:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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