Витягніть певний кадр у поточний час за допомогою VLC [закрито]


2

Я намагаюся створити будь-яку команду в python або оболонці, щоб витягнути один конкретний кадр з відео, яке відтворюється або передається на vlc.

Уявіть собі сценарій, в якому у мене є відеофайл, я відкриваю його на VLC і я натискаю кнопку play. Я витягую перший кадр, з яким я стикаюся в python або використовуючи команду оболонки, виконую певну обробку, і коли обробка завершена, я захоплюю інший кадр у точний час, коли відео досягнуто.

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

Я використовую Linux 14.04.

Відповіді:


3

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

Це можна зробити. VLC надає безліч інтерфейсів. Давайте скористаємося telnet.


Крок 1: включення telnet у VLC

Одноразовий метод на вимогу:

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

Або постійну конфігурацію. Запустити VLC, Інструменти - & gt; Налаштування (або 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 секунду. Я не знайшов команди для отримання номера поточного кадру або близько того.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.