A conversão do FFMPEG é executada para sempre

0

Estou executando o aplicativo da web que usa o ffmpeg para converter imagem + áudio em vídeo e, às vezes, alguém envia algo que faz o ffmpeg ser executado para sempre em 100% da CPU até que a unidade inteira seja preenchida.

Acontece quando alguém faz upload de algum arquivo corrompido ou estranho, ou recentemente eu consegui perceber que isso também acontece quando há imagem em vez de áudio (tem que fazer alguma coisa com -loop)

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

Eu sei que posso validar a entrada do usuário, mas isso não deve estar acontecendo. O que ffmpeg consulta impediria isso, mas também forneceria arquivo idêntico?

Eu tentei adicionar -cera-da-semana ou -timeout mas não funcionou.

    
por Robert Vangor 20.10.2017 / 13:46

1 resposta

0

No comando indicado,

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

desde que nenhuma atribuição de mapa seja feita, o ffmpeg mapeia a primeira entrada de vídeo para a saída. Como a opção de loop foi definida, é um fluxo sem fim. O -shortest não tem efeito porque a segunda imagem não é mapeada automaticamente e, portanto, sua duração (0,04 s) não tem relevância.

Uma solução alternativa é adicionar um fluxo de áudio simulado finito, criado da mesma forma - ffmpeg -f lavfi -t 1 -i anullsrc=cl=mono dummy.m4a

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -i dummy.m4a -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

Isso não resolverá o problema de arquivos "estranhos".

Há também -timelimit seconds , por exemplo -timelimit 600 para sair do ffmpeg após 10 minutos. No entanto, isso usa a chamada de sistema setrlimit e AFAICT, não está disponível no Windows nativamente, então não posso testá-la agora.

    
por 20.10.2017 / 15:57