How to change fps in FFmpeg?

Cómo Cambiar los FPS de un Video con FFmpeg

07/04/2014

Valoración: 4.42 (11560 votos)

En el mundo de la edición de video y la manipulación de archivos multimedia, FFmpeg se erige como una herramienta de línea de comandos indispensable y extraordinariamente potente. Su capacidad para procesar, convertir y transmitir casi cualquier formato de audio o video es legendaria. Una de las tareas más comunes y cruciales que los editores y creadores de contenido enfrentan es la necesidad de cambiar la tasa de fotogramas, o FPS (Frames Per Second), de un video. Ya sea para adaptar un clip a los requisitos de un proyecto, para crear un efecto de cámara lenta o rápida, o simplemente para optimizar la reproducción, dominar esta función en FFmpeg te abrirá un nuevo abanico de posibilidades. En este artículo, exploraremos desde los métodos más sencillos hasta las técnicas más avanzadas para ajustar los FPS, asegurando que mantengas la máxima calidad posible en el proceso.

How to change fps in FFmpeg?
Common frame rates include 24 fps for films, 25 fps for PAL video, and 30 fps for NTSC video. The fundamental command to change the frame rate using FFmpeg is: -i input.mp4: Specifies the input video file. -r new_fps: Sets the desired output frame rate. Replace new_fps with the target frame rate. output.mp4: Specifies the output video file.
Índice de Contenido

¿Qué es Exactamente la Tasa de Fotogramas (FPS)?

Antes de sumergirnos en los comandos, es fundamental comprender qué es la tasa de fotogramas. Piensa en un video como una sucesión rápida de imágenes fijas, como las páginas de un folioscopio. La tasa de fotogramas (FPS) es simplemente la medida de cuántas de estas imágenes, o fotogramas, se muestran en un segundo. Esta métrica define la fluidez del movimiento en el video.

  • 24 FPS: El estándar cinematográfico clásico. Proporciona un ligero desenfoque de movimiento que el público asocia con la experiencia del cine.
  • 25 FPS: El estándar para la televisión en regiones PAL (como Europa y Australia).
  • 30 FPS: El estándar para la televisión en regiones NTSC (como Norteamérica y Japón).
  • 60 FPS y más: Común en videojuegos, transmisiones deportivas y videos de alta definición donde se busca un movimiento ultra fluido y nítido.

Alterar los FPS puede ser necesario para compatibilidad, para crear efectos artísticos o para reducir el tamaño del archivo. FFmpeg nos ofrece varias formas de abordar esta tarea, cada una con sus propias ventajas y desventajas.

El Método Sencillo: Cambiar FPS Re-codificando el Video

La forma más directa de cambiar la tasa de fotogramas es re-codificar el video. Este proceso decodifica cada fotograma del video original y luego lo vuelve a codificar con la nueva configuración de FPS. Aunque es el método más compatible, implica una pérdida de calidad, aunque esta puede ser mínima si se utilizan los ajustes correctos.

El Comando Básico

El comando fundamental para esta operación es increíblemente simple. Utiliza la opción -r para especificar la nueva tasa de fotogramas de salida.

ffmpeg -i entrada.mp4 -r 30 salida_30fps.mp4

Desglosemos este comando:

  • -i entrada.mp4: Especifica el archivo de video de entrada.
  • -r 30: Establece la tasa de fotogramas de salida deseada. En este caso, 30 FPS. Puedes reemplazar '30' por el valor que necesites (24, 60, etc.).
  • salida_30fps.mp4: Es el nombre del nuevo archivo de video que se generará.

Por ejemplo, si tienes un video grabado a 60 FPS y quieres convertirlo a 24 FPS para darle un aspecto más cinematográfico, el comando sería:

ffmpeg -i mi_video_60fps.mp4 -r 24 mi_video_24fps.mp4

FFmpeg se encargará de descartar o duplicar fotogramas según sea necesario para alcanzar la tasa objetivo.

Control de Calidad: El Parámetro -crf

Cuando re-codificas, la calidad es una preocupación primordial. Para controlarla al usar el códec H.264 (libx264), que es el más común, puedes usar la opción -crf (Constant Rate Factor). Este valor va de 0 (sin pérdida) a 51 (máxima compresión). Un valor más bajo significa mayor calidad y mayor tamaño de archivo.

Un valor de 23 es generalmente un excelente punto de partida que ofrece un gran equilibrio entre calidad y tamaño.

ffmpeg -i entrada.mp4 -r 30 -c:v libx264 -crf 23 salida_de_calidad.mp4

Manejando el Audio para Evitar Desincronización

Un error común es olvidarse del audio. Al cambiar la estructura de video, el audio puede desincronizarse. La forma más segura de manejarlo, si no necesitas modificarlo, es copiar el stream de audio directamente sin re-codificar. Esto se hace con -c:a copy.

El comando completo y recomendado para una conversión de calidad sería:

ffmpeg -i entrada.mp4 -r 30 -c:v libx264 -crf 23 -c:a copy salida_final.mp4

Técnica Avanzada: Cambiar FPS sin Re-codificar

¿Qué pasa si quieres cambiar los FPS sin sufrir ninguna pérdida de calidad? Esto es posible, pero con una advertencia importante: este método no descarta ni duplica fotogramas. En su lugar, cambia los metadatos de tiempo (timestamps o PTS) para que el reproductor muestre los fotogramas existentes a una velocidad diferente. El resultado es que la duración del video cambiará: si aumentas los FPS, el video se reproducirá más rápido (cámara rápida); si los disminuyes, se reproducirá más lento (cámara lenta).

Este método es ideal para corregir archivos con una tasa de fotogramas incorrecta o para crear efectos de velocidad sin pérdida.

Can FFmpeg force re-generate Pts?
To gain full voting privileges, FFmpeg: force re-generate PTS (i.e. alter frame rate without re-encoding) on any codec (not just H264)? Basically, I want to force change the frame rate of a file that is not encoded using H.264. With H.264 I can do the following: # Assume I want to take a 30FPS file and make it 60FPS, effectively doubling the speed.

El Truco para Códecs H.264 y H.265

Este proceso es más complejo y funciona de manera fiable principalmente con streams de video H.264 y H.265. Requiere dos pasos:

Paso 1: Extraer el stream de video en bruto.
Usamos un filtro de flujo de bits (bitstream filter) para extraer el video del contenedor MP4 a un archivo H.264 en bruto.

ffmpeg -i fuente.mp4 -map 0:v -vcodec copy -bsf:v h264_mp4toannexb video_en_bruto.h264

Paso 2: Re-empaquetar el stream con nuevos FPS y PTS.
Ahora, le decimos a FFmpeg que tome el stream en bruto, genere nuevos timestamps (-fflags +genpts) basándose en una nueva tasa de fotogramas (-r 60), y lo copie (-vcodec copy) a un nuevo contenedor.

ffmpeg -fflags +genpts -r 60 -i video_en_bruto.h264 -vcodec copy salida_rapida.mp4

Si el video original era de 30 FPS, el nuevo video de 60 FPS se reproducirá al doble de velocidad y durará la mitad.

¿Qué sucede con otros códecs (FFV1, MPEG2)?

Aquí es donde las cosas se complican. El método anterior depende de las características específicas del formato H.264. Para otros códecs, como FFV1 (usado en archivado) o MPEG2 (de DVDs), forzar la regeneración de PTS con -c copy generalmente no funciona. Opciones como -vsync drop o intentar usar el filtro setpts con -c copy fallarán, ya que los filtros de video requieren que el video sea decodificado, lo cual es incompatible con la copia directa del stream.

En resumen, para la mayoría de los códecs que no son H.264/H.265, la única forma fiable de cambiar los FPS es a través de la re-codificación.

Tabla Comparativa de Métodos

MétodoVentajasDesventajasCaso de Uso Ideal
Re-codificación Simple (-r)Universal, funciona con todos los códecs. Mantiene la duración original del video.Implica pérdida de calidad. Proceso más lento.Adaptar un video a un estándar específico (ej. 60fps a 30fps) para un proyecto.
Sin Re-codificar (PTS)Sin pérdida de calidad (lossless). Proceso extremadamente rápido.Altera la velocidad y duración del video. Principalmente para H.264/H.265.Crear efectos de cámara rápida/lenta o corregir metadatos de FPS incorrectos.

Preguntas Frecuentes (FAQ)

1. ¿Cambiar los FPS afectará la duración de mi video?

Depende del método. Si re-codificas (usando -r), la duración se mantiene igual porque FFmpeg descarta o duplica fotogramas. Si cambias los FPS sin re-codificar (método de regeneración de PTS), la duración cambiará proporcionalmente. Un video de 10 segundos a 30 FPS se convertirá en un video de 5 segundos a 60 FPS.

2. ¿Cuál es la mejor opción para preservar la calidad?

La mejor opción es siempre evitar la re-codificación si es posible. El método de regeneración de PTS para H.264 es completamente sin pérdidas. Si debes re-codificar, utiliza un valor de -crf bajo (entre 18 y 23) para minimizar la pérdida de calidad, a costa de un archivo de mayor tamaño.

3. Mi audio se desincronizó, ¿cómo lo arreglo?

La desincronización ocurre cuando la duración del video cambia pero la del audio no. Si creaste un efecto de cámara rápida (ej. 30fps a 60fps), necesitas acelerar el audio también. Puedes usar el filtro de audio atempo. Para duplicar la velocidad del audio junto con el video, el comando sería más complejo:

ffmpeg -i entrada.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" salida_acelerada.mp4

4. ¿Puedo convertir una Tasa de Fotogramas Variable (VFR) a una Constante (CFR)?

¡Sí! De hecho, es un uso muy común de FFmpeg, especialmente con videos grabados desde teléfonos o capturas de pantalla. El comando de re-codificación básico (`ffmpeg -i entrada.mp4 -r 30 salida.mp4`) producirá un video con una tasa de fotogramas constante por defecto.

Conclusión

FFmpeg demuestra una vez más su versatilidad al ofrecer múltiples vías para una tarea tan fundamental como es el cambio de la tasa de fotogramas. La elección del método correcto depende enteramente de tu objetivo final. Si necesitas compatibilidad y mantener la duración original, la re-codificación es tu aliada, siempre prestando atención a los parámetros de calidad. Si tu prioridad es la velocidad y la preservación absoluta de la calidad para crear efectos o corregir metadatos, y trabajas con H.264, el método de regeneración de PTS es una técnica poderosa que debes conocer. Entender la diferencia entre ambos enfoques es clave para tomar el control total sobre tus archivos de video y lograr resultados profesionales.

Si quieres conocer otros artículos parecidos a Cómo Cambiar los FPS de un Video con FFmpeg puedes visitar la categoría Juegos.

Subir