Cómo codificar un video a 30 FPS a partir de imágenes tomadas a 7 FPS

21

No tengo ningún conocimiento sobre codificación de video, tengo una aplicación escrita en OpenGL y estoy guardando los cuadros que generó en pngimágenes. Los marcos de mi aplicación están a 7 FPS y estoy tratando de crear un video a partir de ellos.

Para ello utilizo ffmpeg como este

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

que fue tomado de este sitio , sin embargo, me preguntaba si es posible tener un video que muestre la animación a 30 FPS?

BRabbit27
fuente
Simplemente modifique el -framerateparámetro para obtener los resultados deseados.
nullptr

Respuestas:

21

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 (la -framerate 30opción) y la codifica utilizando el libx264códec con un factor de velocidad constante de 23 (la -crf 23opción).

Saaru Lindestøkke
fuente
26

Hay dos velocidades de cuadros a considerar: la entrada y la salida.

Por defecto, la velocidad de fotogramas de entrada es 25, y la salida usará 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 que la entrada y la salida tengan la misma velocidad de fotogramas, simplemente proporcione la velocidad de fotogramas de entrada. Este ejemplo establecerá una velocidad de cuadro de 30000/1001 (video NTSC):

ffmpeg -framerate 30000/1001 -i input output.mp4
  • Alternativamente, en este ejemplo, podría usar en ntsclugar de 30000/1001, pero no usar 29.97porque eso no es exacto o correcto. Ver otros alias de velocidad de cuadros .

  • Debido a que la velocidad de fotogramas de entrada predeterminada es 25, y si solo configura una velocidad de fotogramas de salida, los fotogramas se eliminarán o duplicarán para compensar. Es por eso que la velocidad de cuadros de entrada se establece en esta situación.

Velocidad de fotogramas diferente para entrada y salida

A veces es posible que desee que la velocidad de fotogramas de entrada y la velocidad de fotogramas de salida difieran. Por ejemplo, es posible que desee ingresar los fotogramas a una velocidad determinada y luego duplicar o soltar fotogramas para que la salida tenga una velocidad de fotogramas diferente. Es posible que desee hacer esto debido a problemas de compatibilidad con su contenedor de formato de salida, su reproductor y / o su dispositivo:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • En este ejemplo, los fotogramas se duplicarán para pasar de 10 a 25. La salida de la consola le dirá si los fotogramas se caen o se duplican.

  • El demuxer del archivo de imagen usa -framerate, mientras que la velocidad de fotogramas de salida se establece usando -r.

  • Es posible que deba agregar la -pix_fmt yuv420popción en algunas circunstancias si está emitiendo video H.264 (la ffmpegsalida de la consola le avisará si es necesario). Esto usará un esquema de submuestreo de croma que es compatible con todos los jugadores.

lema
fuente
2
La versión 3.2.2 de ffmpeg me dice: Option framerate not found.:-(
erik
Sí, tiene usted razón. Pero, sin embargo, la opción -framerateya no existe. Eliminaré mi comentario, ya que realmente no tiene nada que ver con convertir una serie de imágenes a un video con una cierta tasa de cuadros.
erik
44
@erik -framerateexiste. Lo utilizan los demuxers de imagen y rawvideo y algunos dispositivos de entrada como x11grab y v4l2.
llogan
1
¿Dónde se -frameratedocumenta la opción ? He leído la man ffmpegpágina, pero no pude encontrarla. Cualquier puntero, tal vez?
Atcold
1
OK, lo encontró ... FFMPEG-DEVICES(1).
Atcold
1
ffmpeg -framerate 30 -i img%03d.png output.mp4  

será suficiente en la última versión de ffmpeg.

Tessaracter
fuente