Как передать поток картинок на стандартный вход ffmpeg для сжатия?
Стоит довольно простая задача, к которой пока не могу придумать решения: нужно подать на вход ffmpeg со стандартного ввода (через консольный конвейер | ) для сжатия поток, состоящий из черно-белых 8-разрядных картинок (формат вывода, скорее всего, будет PGM). Кто-нибудь может предложить пример командной строки для такого вызова?
картинки не являются стримом, они являются отдельными структурами с заголовками и чексуммами.
Поэтому и подавать их следует как отдельные файлы.
В чем проблема натравить ffmpeg на файлы?
Saboteur, источник - функция из самописной библиотеки для нестандартного устройства наблюдения. Она будет отдавать целый кадр за вызов, и тут проблема: мало времени на оборачивание этих кадров в сложный формат (и тем более, на что-то вроде PNG), так как жать надо чуть не в реалтайм на 1280х1024 и 30fps. Место в ФС тоже тратить нельзя: количество файлов ограничено. Так и возникла задача. Идеальным был бы способ бросать куда-нибудь в готовый буфер просто байтовые массивы без заголовков (отдаются кадры именно так), чтобы ffmpeg их потом сжимал на gpu.
Морочиться с документацией самого ffmpeg не особенно хочется (на поддержку библиотеки уходит много сил), поэтому, если дадите работающий пример прямой работы с libavcodec и nvenc, буду крайне признателен.
источник - функция из самописной библиотеки для нестандартного устройства наблюдения
Так если у вас самописная функция, пишите СРАЗУ видео, возьмите для этого любой удобный формат. Зачем же передавать кадр, который затем нужно еще куда-то оборачивать?
Но в крайнем случае можете сделать виртуалку, на которой будете вашу картинку кидать просто на экран, и с экрана грабить видео в ffmpeg - либо фулл скрин, либо определенный прямоугольник.