mirror of
https://github.com/hacksider/Deep-Live-Cam.git
synced 2025-03-28 18:51:57 +01:00
Merge pull request #650 from KRSHH/main
Preview video Frame by Frame using left and right arrow keys
This commit is contained in:
commit
0edcaae713
BIN
docs/demo.gif
BIN
docs/demo.gif
Binary file not shown.
Before Width: | Height: | Size: 6.2 MiB |
Binary file not shown.
Before Width: | Height: | Size: 80 KiB |
@ -5,7 +5,7 @@ from typing import Callable, Tuple
|
|||||||
import cv2
|
import cv2
|
||||||
from PIL import Image, ImageOps
|
from PIL import Image, ImageOps
|
||||||
import tkinterdnd2 as tkdnd
|
import tkinterdnd2 as tkdnd
|
||||||
|
import time
|
||||||
import modules.globals
|
import modules.globals
|
||||||
import modules.metadata
|
import modules.metadata
|
||||||
from modules.face_analyser import (
|
from modules.face_analyser import (
|
||||||
@ -682,6 +682,29 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel:
|
|||||||
)
|
)
|
||||||
preview_slider.pack(fill="x", padx=20, pady=10)
|
preview_slider.pack(fill="x", padx=20, pady=10)
|
||||||
|
|
||||||
|
last_update_time = 0
|
||||||
|
debounce_delay = 0.1 # Adjust this delay as needed (in seconds)
|
||||||
|
|
||||||
|
def on_key_press(event):
|
||||||
|
nonlocal last_update_time
|
||||||
|
|
||||||
|
current_time = time.time()
|
||||||
|
if current_time - last_update_time > debounce_delay:
|
||||||
|
current_frame = int(preview_slider.get())
|
||||||
|
if event.keysym == "Left":
|
||||||
|
new_frame = max(0, current_frame - 1)
|
||||||
|
elif event.keysym == "Right":
|
||||||
|
new_frame = min(int(preview_slider.cget("to")), current_frame + 1)
|
||||||
|
else:
|
||||||
|
return # Ignore other key presses
|
||||||
|
|
||||||
|
preview_slider.set(new_frame)
|
||||||
|
update_preview(new_frame)
|
||||||
|
last_update_time = current_time
|
||||||
|
|
||||||
|
preview.bind("<Left>", on_key_press)
|
||||||
|
preview.bind("<Right>", on_key_press)
|
||||||
|
|
||||||
return preview
|
return preview
|
||||||
|
|
||||||
|
|
||||||
@ -879,6 +902,11 @@ def init_preview() -> None:
|
|||||||
preview_slider.configure(to=video_frame_total)
|
preview_slider.configure(to=video_frame_total)
|
||||||
preview_slider.pack(fill="x")
|
preview_slider.pack(fill="x")
|
||||||
preview_slider.set(0)
|
preview_slider.set(0)
|
||||||
|
# Disable slider if it's an image
|
||||||
|
if is_image(modules.globals.target_path):
|
||||||
|
preview_slider.configure(state="disabled")
|
||||||
|
else:
|
||||||
|
preview_slider.configure(state="normal")
|
||||||
|
|
||||||
|
|
||||||
def update_preview(frame_number: int = 0) -> None:
|
def update_preview(frame_number: int = 0) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user