Linux - Как запустить сценарий после завершения воспроизведения видео?

568
PSkocik

Я хочу добавить эмблему по умолчанию к видео, которые я просмотрел. Есть ли простой, не ручной способ запуска сценария, если и точно, если видео закончилось воспроизведение? Может быть для любого видеоплеера Linux (Mint / Ubuntu).

0
Является ли эта эмблема по умолчанию фиксированным изображением или анимацией? Если это фиксированное изображение, вы можете изменить «неиграющее» изображение из vlc-media-player. LPChip 9 лет назад 0
Нет, я имел в виду эмблему caja / nautilus на значке видеофайла. Это действительно не имеет значения, хотя. Я просто хотел бы запустить сценарий оболочки, когда видео закончится. PSkocik 9 лет назад 0
Вы должны использовать скрипт, который запускает видео в вашем плеере, и настроить плеер на автоматическое закрытие после его завершения. Затем свяжите свое видео со своим сценарием. Я не эксперт в Linux, но я могу сделать это в Windows, так что это должно быть возможно и в Linux, я полагаю. LPChip 9 лет назад 0
Но тогда он все равно будет помечать файл как просмотренный, даже если я преждевременно закрою проигрыватель. Я не знаю, как отличить завершение, вызванное пользователем, от завершения, вызванного завершением воспроизведения файла. PSkocik 9 лет назад 0
Ах, верно. Я предполагаю, что вопрос по сценарию: часы были закончены? мог бы сделать это. В противном случае я не думаю, что это возможно. LPChip 9 лет назад 0

1 ответ на вопрос

0
PSkocik

С тех пор как я спросил, я подумал, что поделюсь быстрым хакером на основе обёртки, который я придумал, который делает это. Я создал следующую обёртку vlc и настроил видео файлы, чтобы открывать в ней, а не напрямую vlc. Он поддерживает только один файл за раз. Если вещь, которая перемещается в vlc во время воспроизведения файла, проходит до конца, она выполнит tag watchedкоманду в конце, если было просмотрено около 60% видео.

#!/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 

Это работает, а не красивый код, но это только быстрое решение для раздражения.

зависимости:

bash, ruby, + замените tag watchedвашей фактической командой тегирования.