Abhängigkeiten:

Abhängigkeiten:

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-exitFlagge 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 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 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 watcheddurch Ihren tatsächlichen Tagging-Befehl.

verwandte Informationen