У меня есть приложение C, которое непрерывно создает серию изображений: frame_1.png, frame_2.png, frame_3.png и т.д. Приложение никогда не останавливается, а это значит, что чем дольше оно работает, тем больше изображений оно создает. Пока приложение работает, я хочу, чтобы FFmpeg конвертировал эти изображения в видео на лету. В результате, чем дольше работает приложение и FFmpeg, тем больше должен быть выходной видеофайл. FFmpeg никогда не должен завершаться и всегда должен ждать новых кадров. Как я могу этого достичь?
На данный момент у меня есть это: ffmpeg -i "frame_%d.png" output.avi
. К сожалению, это не совсем то, что я хочу. Он просто перебирает файлы, которые существуют в файловой системе в момент, когда я выполняю команду FFmpeg, генерирует видео и завершает работу после обработки последнего изображения.
Я также попытался использовать FIFO следующим образом: (1) запустите mkfifo fifo.png
. (2) Запустите приложение C. Внутри приложения C у меня есть что-то вроде этого в цикле (псевдокод): fd = open("fifo.png"); write_new_frame_as_png(fd); close(fd);
, (3) запустите ffmpeg -i fifo.png output.avi
. К сожалению, это тоже не работает. Приложение C генерирует один кадр и блокирует, пока я не запущу FFmpeg. Затем FFmpeg просто читает одну славу FIFO, генерирует однокадровый видеофайл и завершает работу.
Поэтому мой вопрос заключается в том, как заставить FFmpeg генерировать видео в режиме реального времени при поступлении новых кадров?
Спасибо.
PS: Если вам интересно, почему я хочу сделать выше: в конечном счете, я хочу транслировать живое видео с использованием FFmpeg и FFserver, и я думаю, этот вопрос охватывает первый шаг к этому.