You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中无GUI实现屏幕叠加视频/图片(仿FL Studio效果)

无GUI底层屏幕叠加图片/视频的Python实现方案

核心逻辑

要实现类似FL Studio启动时的底层叠加效果,关键是创建一个无边框、透明、层级低于普通窗口的容器,同时让鼠标事件可以穿透该容器,不干扰桌面或其他窗口的操作。以下是Windows平台的具体实现方案:

依赖安装

先安装所需库:

pip install pywin32 pillow opencv-python

图片叠加实现代码

import win32gui
import win32api
import win32con
from PIL import Image, ImageTk
import tkinter as tk

# 获取屏幕分辨率
screen_w = win32api.GetSystemMetrics(win32con.SM_CXSCREEN)
screen_h = win32api.GetSystemMetrics(win32con.SM_CYSCREEN)

# 创建底层窗口
root = tk.Tk()
root.geometry(f"{screen_w}x{screen_h}+0+0")
root.overrideredirect(True)  # 移除窗口边框
root.attributes('-transparentcolor', 'black')  # 设置透明色
root.attributes('-topmost', False)  # 不置顶

# 将窗口置于桌面之上、其他窗口之下
win32gui.SetWindowPos(
    root.winfo_id(),
    win32con.HWND_BOTTOM,
    0, 0, screen_w, screen_h,
    win32con.SWP_NOMOVE | win32con.SWP_NOSIZE
)

# 设置鼠标穿透,让操作直接作用到下层内容
hwnd = root.winfo_id()
ext_style = win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE)
win32gui.SetWindowLong(
    hwnd,
    win32con.GWL_EXSTYLE,
    ext_style | win32con.WS_EX_LAYERED | win32con.WS_EX_TRANSPARENT
)

# 加载并显示图片
img = Image.open("your_image.png")
img = img.resize((screen_w, screen_h), Image.Resampling.LANCZOS)
tk_img = ImageTk.PhotoImage(img)
label = tk.Label(root, image=tk_img, bg='black')
label.pack(fill='both', expand=True)

# 运行窗口,可添加定时关闭逻辑(比如root.after(5000, root.destroy))
root.mainloop()

视频叠加扩展代码

如果需要叠加视频,用OpenCV逐帧更新窗口内容:

import cv2

# 替换图片加载部分为以下代码
cap = cv2.VideoCapture("your_video.mp4")

def update_frame():
    ret, frame = cap.read()
    if ret:
        # 转换OpenCV的BGR格式为PIL兼容的RGB
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        img = Image.fromarray(frame)
        img = img.resize((screen_w, screen_h), Image.Resampling.LANCZOS)
        tk_img = ImageTk.PhotoImage(img)
        label.config(image=tk_img)
        label.tk_img = tk_img  # 防止图片被垃圾回收
        root.after(30, update_frame)  # 按30fps更新
    else:
        cap.release()
        root.destroy()

update_frame()
root.mainloop()

注意事项

  • 该方案仅适配Windows平台,Linux/macOS需替换窗口层级控制的API(如Linux用xlib,macOS用pyobjc)。
  • 图片/视频建议提前适配屏幕分辨率,避免拉伸变形。
  • WS_EX_TRANSPARENT属性会让窗口完全不响应鼠标操作,所有点击、拖拽都会直接传递到下层内容。

内容的提问来源于stack exchange,提问作者TheMineCommander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:25:09