No tengo ningún conocimiento sobre codificación de video, tengo una aplicación escrita en OpenGL y estoy guardando los fotogramas que generó en png
imágenes. Los fotogramas de mi aplicación están a 7 FPS y estoy tratando de crear un video a partir de ellos.
Para ese propósito, uso ffmpeg como este
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
que se tomó de este sitio , sin embargo, me preguntaba si es posible tener un video que muestre la animación a 30 FPS?
Comentarios
Respuesta
Estoy usando el siguiente código para hacer lo mismo.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
Desglosando el comando:
ffmpeg <- call ffmpeg -framerate 30 <- set the input framerate to 30 -i img%03d.png <- read PNG images with filename img001, img002, img003, etc.. img can be changed to another prefix %03d can be changed to %04d for 0001, %05d for 00001 formats, etc... -c:v libx264 <- Set the codec to libx264 -pix_fmt yuv420p <- Set the pixel format to planar YUV 4:2:0, 12bpp -crf 23 <- set the Constant Rate Factor to 23 (default value) -output.mp4 <- the output filename
Esto lee la entrada a 30 fps (el -framerate 30
opción) y lo codifica usando el libx264
códec con factor de tasa constante de 23 (el -crf 23
opción).
Respuesta
Hay dos velocidades de cuadro a considerar: la entrada y la salida.
Por defecto, la velocidad de cuadro de entrada es 25 , y la salida utilizará la misma velocidad de fotogramas que la entrada a menos que usted indique lo contrario.
Misma velocidad de fotogramas para entrada y salida
Si desea ingresar y para tener la misma velocidad de fotogramas, luego solo proporcione la velocidad de fotogramas de entrada. Este ejemplo establecerá una velocidad de fotogramas de 30000/1001 (video NTSC):
ffmpeg -framerate 30000/1001 -i input output.mp4
-
Alternativamente, en este ejemplo, puede usar
ntsc
en lugar de30000/1001
, pero no utilice29.97
porque no es exacto o Ver otros alias de velocidad de fotogramas . -
Debido a que la velocidad de fotogramas de entrada predeterminada es 25, y si solo establezca una velocidad de fotogramas de salida, entonces los fotogramas se eliminarán o duplicarán para compensar. Es por eso que la velocidad de fotogramas de entrada se establece en esta situación.
Diferente frecuencia de fotogramas para y salida
A veces es posible que desee que la velocidad de fotogramas de entrada y la velocidad de fotogramas de salida sean diferentes. Por ejemplo, es posible que desee introducir los fotogramas a una determinada frecuencia y luego duplicar o eliminar fotogramas para que la salida tenga una diferente velocidad de fotogramas. Es posible que desee hacer esto debido a problemas de compatibilidad con su contenedor de formato de salida, su reproductor y / o su dispositivo:
-
En este ejemplo, los marcos se duplicarán para ir de 10 a 25. La salida de la consola le dirá si los marcos se están descartando o duplicando.
-
El demuxer de archivos de imagen usa
-framerate
, mientras que la velocidad de fotogramas de salida se configura usando-r
. -
Es posible que deba agregar la opción
-pix_fmt yuv420p
en En algunas circunstancias, si está emitiendo video H.264 (la salida de la consolaffmpeg
le advertirá si es necesario). Esto usará un esquema de submuestreo de croma que es compatible con todos los reproductores.
Comentarios
- ffmpeg versión 3.2.2 me dice:
Option framerate not found.
🙁 - Sí, tienes razón. Sin embargo, la opción
-framerate
no existe Eliminaré mi comentario, ya que realmente no tiene nada que ver con convertir una serie de imágenes en un video con una determinada velocidad de fotogramas. - @erik
-framerate
' s utilizado por los demuxers de imagen y vídeo sin formato y algunos dispositivos de entrada como x11grab y v4l2. - ¿Dónde está la opción
-framerate
documentado? Yo ' he leído la páginaman ffmpeg
, pero no pude ' no encontrarlo. ¿Algún puntero, tal vez? - OK, lo encontré …
FFMPEG-DEVICES(1)
.
Answer
ffmpeg -framerate 30 -i img%03d.png output.mp4
será suficiente en las últimas t de ffmpeg.
Comentarios
- No olvide
-pix_fmt yuv420p
o puede terminar con archivos que muchas herramientas de software ' t les gusta: trac.ffmpeg.org/ticket/8856
Respuesta
Estás hablando de interpolación de video. No hay forma de que 7 fps se conviertan en 30 fps sin la interpolación de video … Básicamente, desea obtener 30 fps desde el principio, en el proceso de hacer videos … Como la interpolación de video requerirá muchos recursos y tiempo, y podría estar lleno de artefactos.Escuché que puedes convertir una imagen de un solo disparo en películas cortas, con adobe, pero hay mucho trabajo manual allí …
-framerate
para obtener los resultados deseados.