Ich möchte den Videos, die ich zu Ende angesehen habe, das Standardemblem hinzufügen. Gibt es eine einfache, nicht manuelle Möglichkeit, ein Skript auszuführen, wenn und genau wenn die Wiedergabe eines Videos zu Ende ist? Kann für jeden Linux-Videoplayer (Mint/Ubuntu) verwendet werden.
Antwort1
vlc --play-and-exit video.mp4 && echo "Terminated"
Ersetzen Sie echo "Terminated"
durch den eigentlichen Befehl, den Sie ausführen möchten. Das &&
bedeutet, dass der Befehl nicht ausgeführt wird, wenn vlc mit einem Fehlercode beendet wird. Wenn Sie möchten, dass der Befehl auch bei einem Fehler ausgeführt wird,
vlc --play-and-exit video.mp4; echo "Terminated"
Wenn Sie vlc weitere Dateien zur Verfügung stellen, wird der Befehl nur ausgeführtsobald alle Medien abgespielt wurden. Zum Beispiel,
vlc --play-and-exit s0.mp3 s1.mp4 && shutdown now
bedeutet, dass das System sofort nach der Wiedergabe der beiden Dateien heruntergefahren wird.
Wenn Sie wolleneine Aktion ausführen fürjedeDatei abgespieltkönnen Sie dieses Shell-Skript verwenden (nennen wir es play.sh
):
#!/bin/sh
for file in "$@"; do
vlc --play-and-exit "$file"
echo "File $file has been played."
done
Führen Sie es dann auf verschiedenen Dateien aus:
sh play.sh file1.mp3 'Me & You.mp4' 'file 3.wav'
Vergessen Sie nicht, die Dateien an den entsprechenden Stellen in Anführungszeichen zu setzen (insbesondere bei Leerzeichen und Sonderzeichen wie &
, *
, usw.).
Die --play-and-exit
Flagge ist auch für verfügbar cvlc
.
Antwort2
Da ich gefragt habe, dachte ich, ich teile den schnellen Wrapper-basierten Hack, den ich mir ausgedacht habe und der das erledigt. Ich habe den folgenden VLC-Wrapper erstellt und Videodateien so eingerichtet, dass sie darin und nicht direkt in VLC geöffnet werden. Es wird immer nur eine Datei gleichzeitig unterstützt. Wenn das Ding, das sich in VLC bewegt, während es eine Datei abspielt, bis zum Ende geht, wird der tag watched
Befehl 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 handelt sich eher um funktionierenden Code als um schönen Code, aber es ist nur eine schnelle Lösung für ein Ärgernis.
Abhängigkeiten:
bash, ruby, + ersetzen Sie tag watched
durch Ihren tatsächlichen Tagging-Befehl.