VLCLIB - Dauer des Videos vorab auslesen
Verfasst: 27.12.2025 15:00
war gerade hier unterwegs
https://www.purebasic.fr/english/viewtopic.php?t=75564
brauchte aber eine Funktion, die mir vorab die Dauer eines Videos ausliest.
https://www.purebasic.fr/english/viewtopic.php?t=75564
brauchte aber eine Funktion, die mir vorab die Dauer eines Videos ausliest.
Code: Alles auswählen
; ChatGPT generiert am 27.12.25
; Wichtige Hinweise aus der Praxis
;
; libvlc_media_get_duration() → Millisekunden
;
; Funktioniert vor dem Abspielen
;
; Für Streams besser:
;
; libvlc_media_parse_with_options(media, #libvlc_media_parse_network, -1)
; --- Parse-Flags ---
#libvlc_media_parse_local = 0
#libvlc_media_parse_network = 1
#libvlc_media_parse_fetch_local = 2
#libvlc_media_parse_fetch_network = 4
ImportC "libvlc.lib"
; --- Core ---
libvlc_new(argc.i, argv.i)
libvlc_release(instance.i)
; --- Media ---
libvlc_media_new_path(instance.i, path.p-utf8)
libvlc_media_new_location(instance.i, location.p-utf8)
libvlc_media_release(media.i)
libvlc_media_parse(media.i)
libvlc_media_parse_with_options(media.i, flags.i, timeout.i)
libvlc_media_is_parsed(media.i)
libvlc_media_get_duration(media.i) ; Rückgabe: Quad (ms)
; --- Media Player ---
libvlc_media_player_new_from_media(media.i)
libvlc_media_player_release(player.i)
EndImport
;EnableExplicit
; -------------------------
; Hilfsfunktion Zeitformat
; -------------------------
Procedure.s FormatTime(ms.q)
Protected sec.q = ms / 1000
Protected h = sec / 3600
Protected m = (sec % 3600) / 60
Protected s = sec % 60
ProcedureReturn RSet(Str(h), 2, "0") + ":" +
RSet(Str(m), 2, "0") + ":" +
RSet(Str(s), 2, "0")
EndProcedure
; -------------------------
; GUI
; -------------------------
OpenWindow(0, 0, 0, 420, 140, "libVLC – Videolänge", #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 120, 30, "Video laden")
TextGadget(2, 10, 60, 400, 30, "Dauer: -")
; -------------------------
; VLC Initialisierung
; -------------------------
vlc.i = libvlc_new(0, 0)
If vlc = 0
MessageRequester("Fehler", "libVLC konnte nicht initialisiert werden.")
End
EndIf
; -------------------------
; Event-Loop
; -------------------------
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 1
file.s = OpenFileRequester("Video auswählen", "",
"Videos|*.mp4;*.mkv;*.avi|Alle|*.*", 0)
If file = ""
Continue
EndIf
media.i = libvlc_media_new_path(vlc, file)
If media = 0
MessageRequester("Fehler", "Media konnte nicht geladen werden.")
Continue
EndIf
; --- Parsen (blockierend) ---
libvlc_media_parse(media)
duration.q = libvlc_media_get_duration(media)
If duration > 0
SetGadgetText(2, "Dauer: " + FormatTime(duration))
Else
SetGadgetText(2, "Dauer: unbekannt")
EndIf
libvlc_media_release(media)
EndIf
EndSelect
ForEver
libvlc_release(vlc)