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 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 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 watched
mit Ihrem tatsächlichen Tagging-Befehl.