2

Я пытаюсь создать какую-либо команду в Python или оболочке, чтобы извлечь один конкретный кадр из видео, которое воспроизводится или транслируется на VLC.

Представьте себе сценарий, где у меня есть видеофайл, я открываю его на VLC и нажимаю кнопку воспроизведения. Я вытягиваю первый кадр, с которым сталкиваюсь в python или используя команду оболочки, выполняю некоторую обработку, и когда обработка завершается, я фиксирую другой кадр в тот момент, когда видео достигло.

Честно говоря, если я смогу даже заставить VLC предоставить мне текущее "время" видео, которое я играю (сколько часов: минут: секунд или что бы мы ни пропустили в фильме), это бы помогло, и я мог бы использовать ffmpeg ,

Я использую Linux 14.04.

1 ответ1

3

если я смогу даже заставить VLC предоставить мне текущее "время" видео, которое я играю…

Это можно сделать. VLC предоставляет много интерфейсов. Давайте использовать телнет.


Шаг 1: включение telnet в VLC

Единовременный метод по требованию:

vlc --extraintf telnet --telnet-port 4212 --telnet-password "foobar" video_file_to_play.avi

Или постоянная конфигурация. Запустите VLC, Инструменты -> Настройки (или Ctrl+P), затем:

config1

а также

config2

Примечание: этот постоянный метод требует перезапуска 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 вместо telnetfoobar - мой пароль, используйте ваш):

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 секунду. Я не нашел команду для получения текущего номера кадра или около того.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .