Tengo ~10.000 archivos PNG que me gustaría convertir en un vídeo.
Demirando alrededor de internetMe encontré con ffmpeg y elegí ejecutar el siguiente comando:
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4
En primer lugar, al ejecutar este comando apareció el mensaje File 'img/00001.png' already exists. Overwrite ? [y/N]
, lo cual me parece un poco extraño ya que, hasta donde tengo entendido, el comando no debería modificar las imágenes en sí, ¿solo crear un nuevo video.mp4
archivo?
De todos modos, no quería presionar y
10k veces, así que hice una copia de seguridad de mis imágenes y modifiqué el comando:
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4
Ahora, el programa parece funcionar bien para 254 imágenes pero luego arroja el error:
[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!
Por si es útil, agregué elarchivo de registro completo aquí. Y, por si acaso,Aquí hay un ejemplo de las imágenes.Quiero convertirme. También,aquí está el infame cuadro 255, en el que el programa falla.
Respuesta1
ffmpeg requiere que cada archivo de entrada tenga su propio -i
argumento, por lo que cuando ejecuta -i img/*
, su shell expandirá el comodín a una serie de imágenes, que a su vez ffmpeg leerá como solounoimagen de entrada, pero 10k (menos una) imágenes de salida. En otras palabras, ffmpeg verá:
ffmpeg … -i img/00000.png img/00001.png …
lo que le dice que lo use 00000.png
como entrada y 00001.png
como salida. De hecho, habrá sobrescrito todos sus archivos 00001.png
con 00254.png
el contenido de 00000.png
. Así que espero que tengas una copia de seguridad de ellos.
Una vez que haya restaurado sus archivos de entrada originales, verifique su comando nuevamente. No ha utilizado el %d
comodín para especificar números de imágenes (que se mostró en la respuesta vinculada). Entonces, usa:
ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4
Para obtener más información, consulta elGuía de presentación de diapositivas. Allí también encontrará diferentes opciones para especificar la lista de archivos de entrada (por ejemplo, a través de un patrón global, similar a lo que estaba intentando hacer).
Respuesta2
TúpoderTambién use comodines de asterisco, pero la lista de archivos debe citarse para evitar la expansión según la respuesta de@slhck, y necesita una opción adicional pattern_type
para indicarle que use globbing.
ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4