Desde que eu perguntei, eu pensei em compartilhar o rápido hack baseado em wrapper que eu criei.
Eu criei o seguinte wrapper vlc e configurei arquivos de vídeo para abrir nele em vez de vlc diretamente. Suporta apenas um arquivo por vez. Se a coisa que se move em vlc enquanto reproduz um arquivo vai até o final, ele executará o comando tag watched
no final, se cerca de 60% do vídeo foi assistido.
#!/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
Está funcionando em vez de um código bonito, mas é apenas uma solução rápida para um aborrecimento.
Dependências:
bash, ruby, + substitua tag watched
pelo seu comando de marcação real.