Linux - Wie kann ich ein Skript ausführen, nachdem ein Video abgespielt wurde?

685
PSkocik

Ich möchte das Standard-Emblem den Videos hinzufügen, die ich fertig angesehen habe. Gibt es eine unkomplizierte, nicht manuelle Methode, um ein Skript auszuführen, wenn und genau wenn ein Video vollständig abgespielt wurde? Kann für jeden Linux (Mint / Ubuntu) Videoplayer sein.

0
Ist das Standard-Emblem ein festes Bild oder eine Animation? Wenn es sich um ein festes Bild handelt, können Sie möglicherweise festlegen, dass das Bild "nicht abgespielt" vom vlc-media-player geändert wird LPChip vor 9 Jahren 0
Nein, ich meinte ein Caja / Nautilus-Emblem auf dem Videodateiesymbol. Es ist aber wirklich egal. Ich möchte nur ein Shell-Skript ausführen, wenn und wenn das Video beendet ist. PSkocik vor 9 Jahren 0
Sie sollten ein Skript verwenden, das das Video in Ihrem Player startet, und den Player so konfigurieren, dass er nach dessen Abschluss automatisch geschlossen wird. Verbinden Sie dann Ihr Video mit Ihrem Skript. Ich bin kein Experte für Linux, aber ich kann das in Windows, also sollte es möglich sein, auch unter Linux zu tun. LPChip vor 9 Jahren 0
Dann würde die Datei dennoch als "markiert" markiert, selbst wenn ich den Player vorzeitig geschlossen habe. Ich kann nicht zwischen einer vom Benutzer aufgerufenen Beendigung und einer durch die Wiedergabe der Datei verursachten Unterbrechung unterscheiden. PSkocik vor 9 Jahren 0
Ah richtig. Ich denke, eine Skriptfrage: War die Uhr komplett? könnte das tun Ansonsten denke ich nicht, dass es möglich ist. LPChip vor 9 Jahren 0

1 Antwort auf die Frage

0
PSkocik

Seit ich gefragt habe, dachte ich, ich würde den schnellen Wrapper-basierten Hack teilen, den ich mir ausgedacht habe. Ich habe den folgenden vlc-Wrapper erstellt und Videodateien so eingerichtet, dass sie nicht direkt in vlc geöffnet werden. Es wird jeweils nur eine Datei unterstützt. Wenn das Element, das sich in vlc während der Wiedergabe einer Datei bewegt, bis zum Ende durchgeht, wird der tag watchedBefehl am Ende ausgeführt, wenn etwa 60% des Videos angesehen wurden.

#!/bin/bash #This depends on the cli interface having been activated in the preferences # This while loop feeds the `get_length` vlc cli command to cli every 0.1 s (while :; do echo get_length; sleep 0.1 ; done) |  #Pass all arguments to vlc and set it up to be fed from the `get_length` while loop /usr/bin/vlc "$@" | ruby -n -e ' BEGIN {  cons_empty=0 nlines_read=0 } #Strip vlc cli noise $_=$_.sub(/^[> ]*/,"") #Watch consecutive (cons) empty lines if $_.match(/^\s*$/)  cons_empty += 1 else #Assume each nonempty stdin line is the duration duration = $_.chomp.to_i cons_empty = 0 nlines_read += 1 end #On 10 consecutive empty lines, assume the file has finished playing if cons_empty == 10 time_watched = nlines_read * 0.1 p time_watched: time_watched, duration: duration ret = (time_watched > 0.6 * duration) ? 1 : 0 exit ret end ' || tag watched "$@" #1 exit means finished watching 

Es funktioniert eher als schöner Code, aber es ist nur eine schnelle Lösung für einen Ärger.

Abhängigkeiten:

bash, ruby, + ersetzen Sie tag watchedmit Ihrem tatsächlichen Tagging-Befehl.