Tenho cerca de 10 mil arquivos PNG que gostaria de converter em um vídeo.
Deolhando pela InternetMe deparei com o ffmpeg e optei por executar o seguinte comando:
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4
Em primeiro lugar, a execução deste comando rendeu 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 imagens em si, apenas criar um novo video.mp4
arquivo?
De qualquer forma, eu não queria pressionar y
10 mil 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 depois 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 oarquivo de log completo aqui. E, para garantir,aqui está um exemplo das imagensEu quero me converter. Também,aqui está o infame quadro 255, no qual o programa trava.
Responder1
O ffmpeg exige que cada arquivo de entrada tenha seu próprio -i
argumento, portanto, quando você executa -i img/*
, seu shell expandirá o curinga para uma série de imagens, que o ffmpeg, por sua vez, lerá apenasumimagem de entrada, mas 10k (menos uma) imagens de saída. Em outras palavras, o ffmpeg verá:
ffmpeg … -i img/00000.png img/00001.png …
que está dizendo para usar 00000.png
como entrada e 00001.png
como saída. Na verdade, você terá substituído todos os seus arquivos 00001.png
pelo 00254.png
conteúdo de 00000.png
. 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 os números das imagens (que foi mostrado na resposta vinculada). Então, use:
ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4
Para mais informações, verifique oGuia de apresentação de slides. Lá você também encontrará diferentes opções para especificar a lista de arquivos de entrada (por exemplo, através de um padrão glob, semelhante ao que você estava tentando fazer).
Responder2
Vocêpodetambém use curingas asterisco, mas a lista de arquivos precisa ser citada para evitar a expansão conforme a resposta de@slhck, e você precisa de uma opção extra pattern_type
para instruí-lo a usar globbing.
ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4