Как сделать скриншоты из видеопотока ТС? - PullRequest
1 голос
/ 19 марта 2019

Я хотел бы делать скриншоты каждые 1 минуту из видеопотока.Видеопоток предоставляется в виде m3u8 файла :

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:112076
#EXT-X-PROGRAM-DATE-TIME:2019-03-19T16:16:53Z
#EXTINF:6.000, 2019/03/19/16/16/53-06000.ts
#EXTINF:6.000, 2019/03/19/16/16/59-06000.ts
#EXTINF:6.000, 2019/03/19/16/17/05-06000.ts
#EXTINF:6.000, 2019/03/19/16/17/11-06000.ts

Я нашел библиотеку для ее анализа - https://github.com/globocom/m3u8. Но я не понимаю, как я могу преобразовать этот TSвидео поток в один файл JPEG.Должен ли я

  1. загрузить файл TS
  2. найти нужный кадр
  3. извлечь его
  4. удалить файл TS?

Должен ли я использовать OpenCV или есть более простое решение?

использовать OpenV

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Это работа для ffmpeg .
Для захвата кадра из списка воспроизведения каждую минуту вы можете использовать:

ffmpeg -i "http://cam.l-invest.ru/nagatinskaya4/tracks-v1/index.m3u8" -vf fps=1/60 invest.ru_%04d.jpg -hide_banner

Выше будет произведено:

invest.ru_0001.jpg

invest.ru_0001.jpg

invest.ru_0002.jpg

invest.ru_0002.jpg

и так далее ... один раз каждые 60 ″


Примечания

  1. invest.ru_0002.jpg было взято ровно через 60 ″ после invest.ru_0001.jpg, как вы можете видеть в правой верхней отметке времени.

  2. -vf указывает ffmpeg на использование видеофильтра fps=1/60, поэтому он будет извлекать один кадр каждые 60 ″ ( src ).

  3. Формат вывода и структура имени файла могут быть изменены при необходимости (например: %Y-%m-%d_%H-%M-%S.jpg). Пожалуйста, проверьте ffmpeg image2 документы для доступных вариантов.
0 голосов
/ 01 апреля 2019

Я думаю, вы можете использовать VLC для этого.

РЕДАКТИРОВАТЬ: выглядит очень похоже на https://superuser.com/questions/1379361/vlc-and-m3u8-file. Следующий ответ может не работать для вашего формата файлов (если более высокие версии VLC не работают корректно ...). Может быть, посмотрите на этот вопрос , который может дать вам более глубокое понимание

Насколько мне известно, VLC работает с файлами / потоками TS


Получив файл TS, вы сможете использовать vlc для создания снимков экрана.

Согласно этой ссылке и этому SO-вопросу и ответам , можно запустить VLC и заставить его выполнять снимки экрана. И согласно документации VLC , это кажется возможным.

Должно работать на win / linux / mac.

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

Цитирование:

В новых версиях VLC (VLC 1.1.0 и выше) миниатюры создаются с помощью видеофильтра сцены

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

Если вы хотите избавиться от звука, вы можете добавить «--aout = dummy» рядом с «--vout = dummy».

Для более старых версий VLC (1.0.0 и ниже) то же самое можно сделать с модулем вывода изображения

vlc C:\video\to\process.mp4 -V image --start-time 0 --stop-time 1 --image-out-format jpg --image-out-ratio 24 --image-out-prefix snap vlc://quit

Что он делает:

Когда VLC media player запускает, он «проигрывает» видео в течение одной секунды, фактически не отображая видео на экране, а затем завершает работу, оставляя нам файл с именем «snap000000.jpg», содержащий изображение первого кадра видео.

...