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

Есть ли способ, чтобы ffmpeg конвертировал изображения, поступающие в HLS, и останавливался, когда я захочу?

Я использую ffmpeg для преобразования изображений в m3u8/ts для потоковой передачи. Устройство камеры будет отправлять изображения 24 часа в сутки, 7 дней в неделю, а ffmpeg будет преобразовывать их по запросу пользователей, пока они не перестанут смотреть.

На данный момент я получаю изображения с устройства камеры по сети Java, затем перемещаю эти изображения во входной каталог ffmpeg и конвертирую их с помощью C++. Это цикл, который выполняет эту работу, поэтому новый ffmpeg выполняется каждый раз, когда изображения перемещаются.

Проблема в том, что осталось слишком много файлов ts, и они занимают много места на сервере. Поэтому я попытался удалить те, у которых есть опция delete_segments, но, поскольку ffmpeg выполняется каждый раз, он не мог удалить сегменты, созданные из ffmpeg прямо перед ним.

Вот несколько способов, которые я рассматриваю:

  1. Чтобы удалить файлы с другой функцией, без ffmpeg.
  2. Возможно, передавать изображения непосредственно на вход ffmpeg и каким-то образом заставить ffmpeg продолжать преобразовывать эти изображения в ts. (А я как-то не мог придумать)
  3. Или, может быть, изменить всю структуру.

Было бы намного проще с вариантом 1, но было бы здорово, если бы я мог сделать это с помощью собственных функций ffmpeg.


person Jongseok Yoon    schedule 19.09.2019    source источник
comment
ffmpeg должен автоматически обновлять изображение, предполагая -i image.jpg, и каждый раз, когда ему требуется обновление, другое изображение атомарно переименовывается image.jpg, заменяя старое. Не могу ничего предложить, не видя вашей команды. См. раздел Изменение наложения изображения по требованию.   -  person llogan    schedule 19.09.2019


Ответы (1)


Вы можете использовать список входных файлов, который может быть специальным файлом (например, каналом FIFO).

Тогда ваша команда может выглядеть так:

mkfifo mylist.pipe
ffmpeg -f concat -safe 0 -i mylist.pipe output.mkv

И вы можете добавить каждое изображение в mylist.pipe следующим образом:

echo "file '/path/to/image.png'"  >mylist.pipe
echo "file '/path/to/image2.png'" >mylist.pipe

Если пути относительные, вам не нужна часть -safe 0.

См. раздел https://trac.ffmpeg.org/wiki/Concatenate#Automaticallyappendingtothelistfile.

person Arusekk    schedule 23.09.2019