Convertendo imagens para vídeo com o FFmpeg on-the-fly

0

Eu tenho um aplicativo C que produz uma série de imagens continuamente: frame_1.png, frame_2.png, frame_3.png, etc. O aplicativo nunca para, o que significa que quanto mais tempo ele executa, mais imagens ele produz. Enquanto o aplicativo está em execução, eu quero que o FFmpeg converta essas imagens em vídeo on-the-fly. Como resultado, quanto mais tempo o aplicativo e o FFmpeg forem executados, maior será o arquivo de vídeo de saída. O FFmpeg nunca deve terminar e deve sempre esperar por novos quadros. Como posso conseguir isso?

Até agora eu tenho isso: ffmpeg -i "frame_%d.png" output.avi . Infelizmente, isso não faz realmente o que eu quero. Ele apenas itera sobre os arquivos que existem no sistema de arquivos no momento em que estou executando o comando FFmpeg, gera o vídeo e termina após o processamento da última imagem.

Eu também tentei usar um FIFO da seguinte maneira: (1) execute mkfifo fifo.png . (2) Execute o aplicativo C. Dentro do aplicativo C eu tenho algo parecido com isso em um loop (pseudo-código): fd = open("fifo.png"); write_new_frame_as_png(fd); close(fd); . (3) execute ffmpeg -i fifo.png output.avi . Infelizmente, isso não funciona. O aplicativo C gera um quadro e bloqueia até que eu execute o FFmpeg. Então o FFmpeg apenas lê uma fama do FIFO, gera um arquivo de vídeo de um quadro e termina.

Então, minha pergunta é: como dizer ao FFmpeg para gerar um vídeo em tempo real quando novos quadros chegam?

Obrigado.

PS: Caso você esteja se perguntando por que eu quero fazer o acima: Em última análise, eu quero transmitir vídeo ao vivo usando FFmpeg e FFserver, e eu acho que esta questão abrange o primeiro passo para isso.

    
por AstrOne 10.12.2017 / 13:33

0 respostas

Tags