¿Es posible usar ffmpeg
crear un video a partir de un conjunto de secuencias, donde el número no comienza desde cero?
Por ejemplo, tengo algunas imágenes [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg], y quiero convertirlas en un video. Intenté el siguiente comando, pero no funcionó (parece que el número debería comenzar desde cero):
ffmpeg -i test_% d.jpg -vcodec mpeg4 test.avi
¿Algún consejo?
Respuestas:
No es necesario cambiar el nombre de los archivos si se usa el
-start_number
interruptor de esta manera:donde
n
es el comienzo de la secuencia de imágenes fijas.Tenga en cuenta que esto funcionará siempre que la secuencia no se rompa una vez que comience. Si hay huecos y desea que se incluyan todas las imágenes fijas, puede ser necesario volver a numerar para llenar los huecos.
Hay algunos otros interruptores que pueden resultarle útiles.
Utilizo el siguiente one-liner para obtener una velocidad de fotogramas más lenta y para comprimir las imágenes y obtener un video resultante más pequeño:
La
-r 3
opción establece la velocidad de fotogramas del video resultante en 3 fotogramas por segundo para que pueda ver cada fotograma durante un corto período de tiempo. La-s
opción vuelve a escalar las imágenes a la resolución deseada para administrar el tamaño del video resultante.(En el shell de Windows, reemplácelo
-i Imgp%04d.jpg
con-i "Imgp%%04d.jpg"
. Acredite esto a Mike Fitzpatrick https://superuser.com/a/344178/153054 )fuente
puede usar este fragmento de código a continuación:
fuente
Puede encontrar un script de ejemplo en la documentación de ffmpeg :
fuente
cp
si el enlace no funciona, si su sistema de archivos lo admitecp --reflink=auto
, logrará un uso de velocidad / espacio mucho mejor.De los documentos de ffmpeg:
Usando un patrón glob
ffmpeg también es compatible con globing de estilo bash (* representa cualquier número de caracteres).
Esto es útil si sus imágenes son secuenciales pero no necesariamente en un orden numérico secuencial como en los ejemplos anteriores.
Por lo tanto, siempre que sus archivos estén ordenados, usar el
-pattern_type glob
interruptor debería funcionar para usted.fuente
Hasta donde yo sé, no puede comenzar la secuencia en números aleatorios (no recuerdo si debe comenzar en 0 o 1), además, no puede tener espacios, si lo hace, ffmpeg asumirá que la secuencia ha terminado y deja de agregar más imágenes.
Además, como se indica en los comentarios a mi respuesta, recuerde que debe especificar el ancho de su índice. Me gusta:
imagen% 03d.jpg
Y si usa un tipo de índice% 03d, debe rellenar sus nombres de archivo con 0, como:
image001.jpg image002.jpg image003.jpg
etc.
fuente
Estoy de acuerdo con Francisco, pero como solución alternativa, podría escribir un script rápido para mover o crear enlaces simbólicos a los archivos con los números de secuencia que necesita ffmpeg. El script podría llamar a ffmpeg y luego eliminar los enlaces o mover los archivos a sus ubicaciones originales.
fuente
buscar
fuente
Sé que esta es una vieja pregunta, pero la encontré en Google mientras buscaba la misma respuesta. Ninguna de las respuestas aquí me satisfizo por completo, así que busqué y leí más y este es un comando que se me ocurrió para mi propio problema.
La razón por la que usaría un comando como este es ...
fuente
-start_number
es todo lo que se necesita.Usé el codificador flv ya que mi video estaba en un reproductor flash (Jwplayer)
ffmpeg -i% d.jpg -vcodec flv test.flv
fuente
De la documentación , parece que simplemente puedes usar *
Como nota, para mejorar la calidad, la velocidad / fps puede ser importante (por ejemplo, ¿primero especificar una velocidad de cuadro muy baja / alta y luego pasar de un segundo filtro que hará que el video en cámara lenta sea normal?)
fuente
En mi caso, fue un poco más complicado debido a los números en los archivos. Así es como se ven mis imágenes:
y aquí está el comando que usé:
fuente
Usted puede hacer esto con
convert -morph
:Si quieres usar
ffmpeg
, yo usédonde
10*PTS
le dice a ffmpeg que lo ralentice 10 veces. También puede tener fracciones allí para acelerarlo.fuente
-pattern_type glob
ejemplos concretos con audioEsta opción se mencionó en: https://superuser.com/a/782520/128124 pero aquí hay algunos ejemplos concretos de su uso, incluida la adición de audio al video de salida.
Vídeo de presentación de diapositivas con una imagen por segundo
Agregue algo de música, corte cuando el audio cuando finalicen las imágenes:
Aquí hay dos demos en YouTube:
Sea un hippie y use el formato de video sin patente de Theora :
Sus imágenes, por supuesto, deben ordenarse alfabéticamente, generalmente como:
y así.
Ver también: http://unix.stackexchange.com/questions/68770/converting-png-frames-to-video-at-1-fps/339399#339399
Video de velocidad normal con una imagen por cuadro a 30 FPS
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
Agregue un poco de audio:
Resultado: https://www.youtube.com/watch?v=HG7c7lldhM4
Convierta un archivo de música en un video con una imagen fija para cargar en YouTube
Respondido en: ¿Cómo convertir MP3 a formato de video permitido por Youtube?
Obtenga algunas imágenes de entrada de prueba sintéticas
Estas son las imágenes de prueba que he estado usando en esta respuesta:
Imágenes generadas con: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292
Es genial observar cuánto comprime el video la secuencia de imágenes mucho mejor que ZIP, ya que puede comprimir a través de cuadros con algoritmos especializados:
opengl-rotating-triangle.mp4
: 340Kopengl-rotating-triangle.zip
: 7.3MSobre las opciones de CLI
Sin embargo,
-glob
tenga en cuenta que a pesar del nombre, 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
hace que el-framerate 1
video sea de 30 FPS para superar errores en jugadores como VLC para bajas tasas de cuadros: https://stackoverflow.com/questions/19267443/playback-issues-in-vlc-with-low-fps-video-from-images-using- ffmpeg / 41797724 # 41797724 Por lo tanto, repite cada fotograma 30 veces para mantener el efecto deseado de 1 imagen por segundo.Próximos pasos
También querrás:
cortar un poco de audio para que coincida con la duración del video: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
agregue el audio cortado: Cómo fusionar archivos de audio y video en ffmpeg
TODO: aprenda a cortar y concatenar múltiples archivos de audio en el video desde la línea de comandos:
Probado en
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Bibliografía
fuente