если я смогу даже заставить VLC предоставить мне текущее "время" видео, которое я играю…
Это можно сделать. VLC предоставляет много интерфейсов. Давайте использовать телнет.
Шаг 1: включение telnet в VLC
Единовременный метод по требованию:
vlc --extraintf telnet --telnet-port 4212 --telnet-password "foobar" video_file_to_play.avi
Или постоянная конфигурация. Запустите VLC, Инструменты -> Настройки (или Ctrl+P), затем:
а также
Примечание: этот постоянный метод требует перезапуска VLC.
Шаг 2: тестирование
Теперь вы можете контролировать VLC с помощью Telnet. Введите правильный пароль при появлении запроса. Пример:
$ telnet localhost 4212
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
VLC media player 2.2.2 Weatherwax
Password:
Welcome, Master
> get_time
30
>
Как видите, команда для получения текущего времени воспроизведения - get_time
. Введите help
чтобы узнать больше команд VLC, quit
чтобы выйти. Может быть, вы найдете snapshot
полезным.
Шаг 3: использование в скрипте
Довольно простая труба. Здесь я использую nc
вместо telnet
(и foobar
- мой пароль, используйте ваш):
printf '%s\n' "foobar" "get_time" | nc localhost 4212
Мой VLC возвращает:
VLC media player 2.2.2 Weatherwax
Password: ����
Welcome, Master
87
> Bye-bye!
поэтому я использую head
и tail
чтобы извлечь только соответствующую строку:
printf '%s\n' "foobar" "get_time" | nc localhost 4212 | head -n 4 | tail -n 1
К сожалению, разрешение по времени составляет 1 секунду. Я не нашел команду для получения текущего номера кадра или около того.