framerate fps change ffmpeg

fps - Usando ffmpeg para cambiar el framerate



ffmpeg change fps (4)

Con recodificación:

ffmpeg -y -i seeing_noaudio.mp4 -vf "setpts=1.25*PTS" -r 24 seeing.mp4

Sin recodificar:

Primer paso: extraer el vídeo a un flujo de bits en bruto

ffmpeg -y -i seeing_noaudio.mp4 -c copy -f h264 seeing_noaudio.h264

Remux con nuevo framerate

ffmpeg -y -r 24 -i seeing_noaudio.h264 -c copy seeing.mp4

Estoy tratando de convertir un video clip (MP4, yuv420p) de 30 fps a 24 fps. El número de cuadros es correcto, por lo que mi salida debería cambiar de 20 minutos a 30 fps a 25 minutos a 24 fps. Todo lo demás debería seguir siendo el mismo.

Intente como podría. Todo lo que intento con ffmpeg convierte la velocidad de cuadros, pero cambia el número de cuadros para mantener la misma duración o cambia la duración sin alterar la tasa de cuadros.

Así que típicamente he estado tratando cosas como;

ffmpeg -y -r 30 -i seeing_noaudio.mp4 -r 24 seeing.mp4

(Estoy haciendo esto en Windows pero normalmente estaría en Linux). Eso convierte la tasa de fotogramas, pero elimina los fotogramas, por lo que la duración total no se altera.

O he intentado

ffmpeg -y -i seeing_noaudio.mp4 -filter:v "setpts=1.25*PTS" seeing.mp4

Lo que cambia la duración pero no el framerate.

Seguramente debería poder hacer esto con un solo comando ffmpeg sin tener que volver a codificar o incluso cuando algunas personas sugirieron volver a los marcos en bruto originales.

Ayuda por favor


Puede usar este comando y la duración del video aún no se modifica.

ffmpeg -i input.mp4 -r 24 output.mp4


Que yo sepa, no puede hacer esto con ffmpeg sin volver a codificar. Tenía un archivo de 24 fps que quería a 25 fps para coincidir con algún otro material con el que estaba trabajando. Utilicé el comando ffmpeg -i inputfile -r 25 outputfile que funcionó perfectamente con un webm, matroska input y resultó en un h264, matroska output utilizando codificador: Lavc56.60.100

Puede lograr lo mismo a 6 cuadros por segundo, pero como anotó, la duración no cambiará (lo que en la mayoría de los casos es bueno, ya que de lo contrario perderá la sincronización de audio). Si esto no se ajusta a sus requisitos, le sugiero que intente esta respuesta aunque mi experiencia ha sido que todavía recodifica el archivo de salida.

Para obtener la mejor precisión de fotogramas, es mejor descodificar a flujos sin procesar como se sugirió anteriormente. Yo uso un script para esto como se reproduce a continuación:

#!/bin/bash #This script will decompress all files in the current directory, video to huffyuv and audio to PCM #unsigned 8-bit and place the output #in an avi container to ease frame accurate editing. for f in * do ffmpeg -i "$f" -c:v huffyuv -c:a pcm_u8 "$f".avi done

Claramente, esta secuencia de comandos espera que todos los archivos en el directorio actual sean archivos multimedia, pero se pueden cambiar fácilmente para restringir el procesamiento a una extensión específica de su elección. Tenga en cuenta que el tamaño de su archivo aumentará en un factor bastante grande cuando se descomprima en flujos en bruto.


Simplemente especifique la velocidad de cuadros deseada en la opción "-r" antes del archivo de entrada:

ffmpeg -y -r 24 -i seeing_noaudio.mp4 seeing.mp4

Las opciones afectan al siguiente archivo DESPUÉS de ellas. "-r" antes de que un archivo de entrada obligue a reinterpretar su encabezado como si el video estuviera codificado a la tasa de cuadros dada. No es necesaria ninguna recompresión. Hubo una pequeña utilidad avifrate.exe para parchar los encabezados de los archivos avi directamente para cambiar la tasa de cuadros. El comando ffmpeg anterior esencialmente hace lo mismo, pero tiene que copiar todo el archivo.