Tenho cerca de 10 mil arquivos PNG que gostaria de converter em um vídeo.
Olhando pela Internet , encontrei o ffmpeg e optei por executar o seguinte comando:
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4
Antes de mais nada, executar este comando gerou o prompt File 'img/00001.png' already exists. Overwrite ? [y/N]
, o que me parece um pouco estranho, pois, pelo que entendi, o comando não deve modificar as próprias imagens, apenas criar um novo video.mp4
arquivo?
De qualquer forma, não queria pressionar y
10k vezes, então fiz backup das minhas imagens e modifiquei o comando:
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4
Agora, o programa parece funcionar bem para 254 imagens, mas gera o erro:
[png @ 0x7facf0503800] ff_frame_thread_encoder_init failed
Error initializing output stream 255:0 -- Error while opening encoder for output stream #255:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
Caso seja útil, adicionei o arquivo de log completo aqui . E, para garantir, aqui está um exemplo das imagens que desejo converter. Além disso, aqui está o infame quadro 255 , no qual o programa trava.
O ffmpeg requer que cada arquivo de entrada tenha seu próprio
-i
argumento; portanto, quando você executar-i img/*
, seu shell expandirá o curinga para uma série de imagens, que o ffmpeg, por sua vez, lerá como apenas uma imagem de entrada, mas 10k (menos uma) imagens de saída. Em outras palavras, o ffmpeg verá:que está dizendo para usar
00000.png
como entrada e00001.png
como saída. Na verdade, você terá sobrescrito todos os seus arquivos00001.png
com00254.png
o conteúdo de00000.png
. Então, espero que você tenha um backup deles.Depois de restaurar seus arquivos de entrada originais, verifique seu comando novamente. Você não usou o
%d
curinga para especificar números de imagem (que foi mostrado na resposta vinculada). Então, use:Para obter mais informações, consulte o guia Apresentação de slides . Lá você também encontrará diferentes opções para especificar a lista de arquivos de entrada (por exemplo, por meio de um padrão glob, semelhante ao que você estava tentando fazer).
Você também pode usar curingas asterisco, se quiser, mas a lista de arquivos precisa estar entre aspas para evitar a expansão conforme a resposta de @slhck e você precisa de uma opção extra
pattern_type
para dizer para usar globbing. Eu acho que isso também deve funcionar.