Einfache Lösung für das Abspielen eines mp4-Videos

  • Liebe Helfer,

    gerade versuche ich eine Videodatei aus einem autoit Skript aufzurufen.

    Dieser cmd-Aufruf funktioniert:

    C:\Program Files\VideoLAN\VLC>vlc -vvv "C:\Users\User\Dropbox\Scriptprogrammierung\AutoIt0.1\AlterBerechnen\video\For_hes_a_jolly_good_fellow.mp4

    Aber dieser Aufruf unter autoit3 nicht:

    [autoit]


    $film=@ScriptDir&"\video\For_hes_a_jolly_good_fellow.mp4"
    $parameter=" - vvv "

    [/autoit][autoit][/autoit][autoit]

    ShellExecuteWait(@ProgramFilesDir & "\VideoLAN\VLC\vlc" &'"'&$parameter & $film&'"') ; funktioniert nicht
    ShellExecuteWait("C:\Program Files\VideoLAN\VLC\vlc -vvv" & "C:\Users\User\Dropbox\Scriptprogrammierung\AutoIt0.1\AlterBerechnen\video\For_hes_a_jolly_good_fellow.mp4") ; funktioniert auch nicht

    [/autoit]

    Hat vielleicht jemand eine möglichst einfache Lösung zur Umsetzung? Das Video soll (möglichst) im Fullscreen Modus ausgeführt werden. Danach kann das Fenster geschlossen werden und das autoit Skript soll weiterlaufen.

    -merlinuwe

  • Schau dir bitte mal in der Hilfe den Befehl

    [autoit]

    ShellExecute()
    ; bzw.
    ShellExecuteWait()

    [/autoit]

    Dann wirst du rausfinden, warum dein Aufruf nicht funktioniert. ;)
    (Einfach auf den Funktions-Namen draufklicken...)

    Schön, wenn wir sogar eine deutsche Übersetzung der Hilfe anbieten und diese komplett ignoriert wird. :thumbdown:

    MfG

    //Edit: Mir ist eingefallen, das im englishen Forum irgendwo auch eine VLC-UDF rumgeistert, falls ich mich nicht irre. :huh:

    //Edit2: Gefunden: VLC (Media Player) UDF :D

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

    Einmal editiert, zuletzt von PainTain (23. Juli 2013 um 22:23)

  • Neben dem was PainTain schreibt, mußt du auch die Benutzung von Leerzeichen beachten.

    Hab mal ein kurzes Skript zur Erklärung geschrieben (Anmerkungen aufmerksam lesen):

    [autoit]

    $vlc = '"' & RegRead("HKLM\Software\VideoLAN\VLC\", "InstallDir") & '\vlc.exe' & '"' ;==> sorgt für "Allgemeingültigkeit (außer natürlich, VLC wurde portabel "installiert")
    If @error Then
    MsgBox(0, "Fehler!", "VLC Installationsverzeichnis nicht gefunden!")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $film = '"' & @ScriptDir & "\video\For_hes_a_jolly_good_fellow.mp4" & '"' ;==> Ohne '"' werden Pfade mit Leerzeichen nicht erkannt (Pfade werden am Leerzeichen abgeschnitten)
    $parameter = " -vvv " ;==> Leerzeichen beachten

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite($vlc & $parameter & $film) ;==> TIP: funktioniert etwas nicht, Konsolenausgabe in Cmd Line einfügen, Enter drücken und Fehlermeldungen lesen

    [/autoit][autoit][/autoit][autoit]

    ShellExecuteWait($film) ; funktioniert, ruft aber das Programm auf, das im System dem Dateitypen zugeortnet ist (dein Default-Player)
    ShellExecuteWait($vlc & $parameter & $film) ; funktioniert nicht ==> siehe Beitrag von misterspeed unterhalb
    RunWait($vlc & $parameter & $film) ; funktioniert

    [/autoit][autoit][/autoit][autoit]

    ; nachdem das VLC Fenster geschlossen wurde, kann hier weiterer Code verarbeitet werden...
    ; TIP: VLC Menü -> Extras -> Einstellungen -> Einstellungen zeigen -> alle -> Wiedergabeliste -> Abspielen und Beenden -> Haken setzen
    ; ==> VLC wird nach Abspielen des Videos/der Wiedergabeliste automatisch beendet und dein Programm wird fortgesetzt

    [/autoit][autoit][/autoit][autoit]

    Exit

    [/autoit]

    Nachtrag:

    Der Parameter für Vollbild ist -f bzw. --fullscreen

    [autoit]

    $parameter = " -f " ;==> Leerzeichen beachten

    [/autoit]

    *edit*
    natürlich hat misterspeed unterhalb mal wieder recht :thumbup:
    Mir gings aber in erster Linie darum, den Unterschied zwischen den beiden Befehlen bei Verwendung der gleichen Befehlszeile zu zeigen.
    An ein funktionierendes Äquivalent für ShellExecuteWait hatte ich schlichtweg nicht mehr gedacht...

  • [autoit]

    ShellExecuteWait($vlc & $parameter & $film) ; funktioniert nicht

    [/autoit]

    Aber auch nur weil du shellexecute genauso falsch verwendest wie der Threadstarter. Im Gegensatz zu run verlangt shellexecute die Angabe der cmdline Parameter als zweiten Funktionsparameter, das hier sollte also genauso funktionieren:

    [autoit]

    ShellExecuteWait($vlc , $parameter & $film)

    [/autoit]

    Davon ab verwendet man shellexecute aber ohnehin nur, wenn man das Programm mit welchem die Datei geöffnet werden soll nicht festlegen möchte, sondern das hinterlegte Standardprogramm verwenden möchte. Es macht also wenig Sinn bei Nutzung von shellexecute die vlc.exe anzugeben, stattdessen reicht wie Friesel ja bereits gezeigt hat ein einfaches

    [autoit]

    ShellExecuteWait($film)

    [/autoit]

    Wenn man hingegen ein bestimmtes Programm verwenden möchte nutzt man eher run().