苹果cms模板利用ffmpeg提取视频第一帧保存成图片

 2024-09-06    耶鲁沙冷  

做影视采集站的找不到影视封面可以试试这个方法,利用ffmpeg提取视频第一帧保存成图片,这样就省去了找封面图的烦恼。

下面是用ffmpeg-python制作,带GUI,方便操作。输入源选择视频所在目录即可,并自动将文件夹的名称作为图片名称命名,并存放在该文件夹内,方便分类管理。

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()
  •  标签:  

原文链接:https://daomb.com/news/3739.html

本文版权:如无特别标注,本站文章均为原创。