Skip to content

Instantly share code, notes, and snippets.

@ZdenekM
Last active July 25, 2025 09:51
Show Gist options
  • Save ZdenekM/38fe2578df33aef6f87e0d6f25bee749 to your computer and use it in GitHub Desktop.
Save ZdenekM/38fe2578df33aef6f87e0d6f25bee749 to your computer and use it in GitHub Desktop.
Qualitative coding block video player
import vlc
import tkinter as tk
from tkinter import filedialog
import argparse
import time
import threading
import os
# --- Parametry ---
block_length = 10 # sekund
player = None
media = None
current_block = None
current_index = 0
block_label = None
start_block = 0
track_id = 1
# --- GUI ---
def update_block_label():
start = current_index * block_length
end = start + block_length
block_label.config(text=f"{time.strftime('%H:%M:%S', time.gmtime(start))} - {time.strftime('%H:%M:%S', time.gmtime(end))} ({track_id})")
def on_key(event):
global current_index
key = event.keysym
if key in ["Right", "Left", "space"]:
pos = player.get_time() // 1000
current_index = pos // block_length
if key == "Right":
next_block()
elif key == "Left":
prev_block()
elif key == "space":
replay_block()
elif key.isdigit():
change_audio_track(int(key))
elif key.startswith("KP_") and key[3:].isdigit():
change_audio_track(int(key[3:]))
def change_audio_track(index):
global track_id
if index == 0:
player.audio_set_track(-1)
track_id = -1
else:
track_id = index
player.audio_set_track(index)
update_block_label()
def next_block():
global current_index
current_index += 1
player.set_time(current_index * block_length * 1000)
player.play()
update_block_label()
def prev_block():
global current_index
current_index = max(0, current_index - 1)
player.set_time(current_index * block_length * 1000)
player.play()
update_block_label()
def replay_block():
player.set_time(current_index * block_length * 1000)
player.play()
def update():
global current_index
while True:
time.sleep(0.2)
state = player.get_state()
if state == vlc.State.Playing:
pos = player.get_time() // 1000
new_block = pos // block_length
if new_block != current_index:
current_index = new_block
update_block_label()
if pos % block_length == block_length - 1:
player.pause()
# --- Hlavní část ---
parser = argparse.ArgumentParser()
parser.add_argument("file", help="Video soubor")
parser.add_argument("--start", type=int, default=0, help="Startovní čas v sekundách")
args = parser.parse_args()
start_block = args.start // block_length
current_index = start_block
instance = vlc.Instance()
player = instance.media_player_new()
media = instance.media_new(args.file)
player.set_media(media)
player.play()
# Počkej, až se player přepne do Playing
for _ in range(100):
if player.get_state() == vlc.State.Playing:
break
time.sleep(0.05)
player.set_time(start_block * block_length * 1000)
# GUI
root = tk.Tk()
root.title("Block Player")
root.geometry("400x100")
root.bind("<Key>", on_key)
block_label = tk.Label(root, text="", font=("Courier", 18))
block_label.pack(pady=20)
update_block_label()
threading.Thread(target=update, daemon=True).start()
root.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment