Luego de tanto trabajar ya encontramos el arreglo de esta dificultad que tantos lectores de nuestro sitio han presentado. Si tienes alguna información que aportar no dudes en compartir tu información.
Solución:
Vea Crear una presentación de diapositivas de video a partir de imágenes – FFmpeg
Si su video no muestra los fotogramas correctamente Si tiene problemas, como que se omite la primera imagen o solo se muestra para un cuadro, utilice el filtro de video fps en lugar de -r para la velocidad de fotogramas de salida
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
Alternativamente, el filtro de formato de video se puede agregar a la cadena de filtros para reemplazar -pix_fmt yuv420p igual que “fps = 25, formato = yuv420p”. La ventaja de este método es que puede controlar qué filtro va primero
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4
Probé los siguientes parámetros, funcionó para mí
"e:ffmpegffmpeg.exe" -r 1/5 -start_number 0 -i "E:images 1padlock%3d.png" -c:v libx264 -vf "fps=25,format=yuv420p" e:out.mp4
Los siguientes parámetros también funcionaron, pero siempre se salta la primera imagen.
"e:ffmpegffmpeg.exe" -r 1/5 -start_number 0 -i "E:images 1padlock%3d.png" -c:v libx264 -r 30 -pix_fmt yuv420p e:out.mp4
hacer un video a partir de imágenes colocadas en diferentes carpetas
Primero, agregue rutas de imagen a imagepaths.txt como abajo.
# this is a comment details https://trac.ffmpeg.org/wiki/Concatenate
file 'E:imagespngimages__%3d.jpg'
file 'E:imagesjpgimages__%3d.jpg'
Ejemplo de uso de la siguiente manera;
"h:ffmpegffmpeg.exe" -y -r 1/5 -f concat -safe 0 -i "E:imagesimagepaths.txt" -c:v libx264 -vf "fps=25,format=yuv420p" "e:out.mp4"
-seguro 0 el parámetro previene Nombre de archivo inseguro error
Enlaces relacionados
FFmpeg haciendo un video a partir de imágenes colocadas en diferentes carpetas
FFMPEG Una guía intermedia / secuencia de imágenes
Concatenar – FFmpeg
-pattern_type glob
Esta gran opción facilita la selección de imágenes en muchos casos.
Video de presentación de diapositivas con una imagen por segundo
ffmpeg -framerate 1 -pattern_type glob -i '*.png'
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Agregue un poco de música, corte cuando el audio presumiblemente más largo cuando terminen las imágenes:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg
-c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Aquí hay dos demostraciones en YouTube:
- https://www.youtube.com/watch?v=grV64VE1U6c
- https://www.youtube.com/watch?v=_6D05gCWh_I
Sea un hippie y use el formato de video libre de patentes de Theora:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg
-c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
Por supuesto, sus imágenes deben estar ordenadas alfabéticamente, generalmente como:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
etcétera.
También me aseguraría primero de que todas las imágenes que se utilizarán tengan la misma relación de aspecto, posiblemente recortándolas con imagemagick
o nomacs de antemano, para que ffmpeg no tenga que tomar decisiones difíciles. En particular, el ancho debe ser divisible por 2, de lo contrario, la conversión falla con: “ancho no divisible por 2”.
Video de velocidad normal con una imagen por cuadro a 30 FPS
ffmpeg -framerate 30 -pattern_type glob -i '*.png'
-c:v libx264 -pix_fmt yuv420p out.mp4
Así es como se ve:
GIF generado con: https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Agrégale algo de audio:
ffmpeg -framerate 30 -pattern_type glob -i '*.png'
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
Resultado: https://www.youtube.com/watch?v=HG7c7lldhM4
Estos son los medios de prueba que he usado: a
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
Imágenes generadas con: ¿Cómo usar GLUT / OpenGL para renderizar en un archivo?
Es genial observar cuánto comprime el video la secuencia de imágenes mucho mejor que ZIP, ya que es capaz de comprimir cuadros con algoritmos especializados:
opengl-rotating-triangle.mp4
: 340Kopengl-rotating-triangle.zip
: 7,3 millones
Convierta un archivo de música en un video con una imagen fija para subir a YouTube
Respondido en: https://superuser.com/questions/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
Configuración completa del estudio de caso de presentación de diapositivas realista paso a paso
Crear presentaciones de diapositivas es un poco más que ejecutar un solo comando ffmpeg, por lo que aquí va un ejemplo detallado más interesante inspirado en esta línea de tiempo.
Obtenga los medios de entrada:
mkdir -p orig
cd orig
wget -O 1.png https://upload.wikimedia.org/wikipedia/commons/2/22/Australopithecus_afarensis.png
wget -O 2.jpg https://upload.wikimedia.org/wikipedia/commons/6/61/Homo_habilis-2.JPG
wget -O 3.jpg https://upload.wikimedia.org/wikipedia/commons/c/cb/Homo_erectus_new.JPG
wget -O 4.png https://upload.wikimedia.org/wikipedia/commons/1/1f/Homo_heidelbergensis_-_forensic_facial_reconstruction-crop.png
wget -O 5.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Sabaa_Nissan_Militiaman.jpg/450px-Sabaa_Nissan_Militiaman.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
cd ..
# Convert all to PNG for consistency.
# https://unix.stackexchange.com/questions/29869/converting-multiple-image-files-from-jpeg-to-pdf-format
# Hardlink the ones that are already PNG.
mkdir -p png
mogrify -format png -path png orig/*.jpg
ln -P orig/*.png png
Ahora echamos un vistazo rápido a todos los tamaños de imagen para decidir la relación de aspecto final:
identify png/*
que salidas:
png/1.png PNG 557x495 557x495+0+0 8-bit sRGB 653KB 0.000u 0:00.000
png/2.png PNG 664x800 664x800+0+0 8-bit sRGB 853KB 0.000u 0:00.000
png/3.png PNG 544x680 544x680+0+0 8-bit sRGB 442KB 0.000u 0:00.000
png/4.png PNG 207x238 207x238+0+0 8-bit sRGB 76.8KB 0.000u 0:00.000
png/5.png PNG 450x600 450x600+0+0 8-bit sRGB 627KB 0.000u 0:00.000
por lo que la relación de aspecto clásica de 480p (640×480 == 4/3) parece apropiada.
Haga una conversión con un cambio de tamaño mínimo para igualar los anchos (TODO automatice para cualquier ancho, aquí solo miré manualmente identify
salida y ancho y alto reducidos en uno):
mkdir -p raw
convert png/1.png -resize 556x494 raw/1.png
ln -P png/2.png png/3.png png/4.png png/5.png raw
ffmpeg -framerate 1 -pattern_type glob -i 'raw/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p raw.mp4
Esto produce un resultado terrible, porque como se ve en:
ffprobe raw.mp4
ffmpeg solo toma el tamaño de la primera imagen, 556×494, y luego convierte todas las demás a ese tamaño exacto, rompiendo su relación de aspecto.
Ahora convierta las imágenes a la relación de aspecto de 480p objetivo automáticamente recortando según ImageMagick: ¿cómo recortar mínimamente una imagen a una determinada relación de aspecto?
mkdir -p auto
mogrify -path auto -geometry 640x480^ -gravity center -crop 640x480+0+0 png/*.png
ffmpeg -framerate 1 -pattern_type glob -i 'auto/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p auto.mp4
Así que ahora, la relación de aspecto es buena, pero inevitablemente se tuvo que hacer algunos recortes, lo que cortó partes interesantes de las imágenes.
La otra opción es rellenar con fondo negro para tener la misma relación de aspecto que se muestra en: Cambiar el tamaño para que quepa en un cuadro y establecer el fondo en negro en la parte “vacía”
mkdir -p black
ffmpeg -framerate 1 -pattern_type glob -i 'black/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p black.mp4
Sin embargo, en términos generales, idealmente podrá seleccionar imágenes con la misma relación de aspecto o similar para evitar esos problemas en primer lugar.
Acerca de las opciones de CLI
Sin embargo, tenga en cuenta que a pesar del nombre, -glob
esto no es tan general como los patrones de Shell Glob, por ejemplo: -i '*'
falla: https://trac.ffmpeg.org/ticket/3620 (aparentemente porque el tipo de archivo se deduce de la extensión).
-r 30
hacer el -framerate 1
video 30 FPS para superar errores en reproductores como VLC para velocidades de cuadro bajas: VLC se congela para video de 1 FPS bajo creado a partir de imágenes con ffmpeg Por lo tanto, repite cada cuadro 30 veces para mantener el efecto deseado de 1 imagen por segundo.
Próximos pasos
También querrás:
-
corte la parte del audio que desee antes de unirlo: corte los videos según la hora de inicio y finalización usando ffmpeg
ffmpeg -i in.mp3 -ss 03:10 -to 03:30 -c copy out.mp3
TODO: aprenda a cortar y concatenar varios archivos de audio en el video sin archivos intermedios, estoy bastante seguro de que es posible:
- ffmpeg cut y concat línea de comando única
- https://video.stackexchange.com/questions/21315/concatenating-split-media-files-using-concat-protocol
- https://superuser.com/questions/587511/concatenate-multiple-wav-files-using-single-command-without-extra-file
Probado en
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Bibliografía
- http://trac.ffmpeg.org/wiki/Slideshow wiki oficial
Versión simple de los documentos
Funciona particularmente bien para imágenes de Google Earth Studio:
ffmpeg -framerate 24 -i Project%03d.png Project.mp4
Reseñas y calificaciones
Ten en cuenta compartir este post si si solucionó tu problema.