Tengo un video en formato mp4 con una velocidad de cuadro de .33
(1 cuadro por 3 segundos). Quiero aumentar la velocidad de cuadros a 5 cuadros / seg. He intentado el siguiente comando pero no hace nada:
ffmpeg -i <input.mp4> -r 5 <output.mp4>
¿Alguna idea de por qué ffmpeg ignora la -r
opción?
Respuestas:
Sé que esta es una vieja pregunta, pero ninguna de las respuestas actuales es la forma recomendada.
Remuxing sin pérdida (video)
Como se señaló en los comentarios, hay una manera de hacer esto donde el video no tiene que volver a codificarse. Requiere la remezcla del archivo a un formato de contactor diferente MKV y luego volverlo a mezclar en un MP4. Aquí hay un ejemplo que cambia un video a 12 cuadros / segundo:
Si el video contiene audio también se puede reducir la velocidad que abajo sin cambiar el tono, pero es no una conversión sin pérdidas. El siguiente ejemplo asume que el video fuente era de 24 cuadros / segundo, por lo que el audio debía reducirse a la mitad (0.5) de velocidad usando el filtro atempo de ffmpeg .
Orientación Wiki FFMPEG
Esta es la guía del wiki de ffmpeg . Tenga en cuenta que todas estas opciones requieren volver a codificar el video.
Acelerar / ralentizar el video
Puede cambiar la velocidad de una transmisión de video usando el filtro de video setpts. Tenga en cuenta que en los siguientes ejemplos, la transmisión de audio no cambia, por lo que idealmente debería deshabilitarse con -an.
Para duplicar la velocidad del video, puede usar:
El filtro funciona cambiando la marca de tiempo de presentación (PTS) de cada cuadro de video. Por ejemplo, si se muestran dos cuadros sucesivos en las marcas de tiempo 1 y 2, y desea acelerar el video, esas marcas de tiempo deben ser 0.5 y 1, respectivamente. Por lo tanto, tenemos que multiplicarlos por 0.5.
Tenga en cuenta que este método soltará cuadros para lograr la velocidad deseada. Puede evitar la pérdida de fotogramas especificando una velocidad de fotogramas de salida más alta que la entrada. Por ejemplo, para pasar de una entrada de 4 FPS a una que se acelera hasta 4 veces que (16 FPS):
Para ralentizar su video, debe usar un multiplicador mayor que 1:
Suave
Puede suavizar el video lento / rápido con el filtro de video minterpolate. Esto también se conoce como "interpolación de movimiento" o "flujo óptico".
Otras opciones incluyen slowmoVideo y Butterflow. Acelerar / ralentizar el audio
Puede acelerar o ralentizar el audio con el filtro de audio atempo. Para duplicar la velocidad del audio:
El filtro atempo se limita al uso de valores entre 0.5 y 2.0 (por lo que puede reducirlo a no menos de la mitad de la velocidad original y acelerar a no más del doble de la entrada). Si lo necesita, puede sortear esta limitación al unir varios filtros atempo. Lo siguiente con cuadruplica la velocidad del audio:
Con un filtro gráfico complejo, puede acelerar el video y el audio al mismo tiempo:
fuente
mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
cambiar la velocidad de cuadros en el contenedor MKV . Puede remux a MKV y volver a MP4, o encontrar una herramienta que lo haga directamente para MP4. La codificación del video requiere mucha CPU y pérdida, por lo que es una opción horrible.Si el archivo de entrada no tiene una velocidad de fotogramas válida, puede que tenga que configurarlo explícitamente
fuente
Solo podría lograr que la velocidad de fotogramas modificada surta efecto si el archivo de entrada se clasifica como un archivo "sin procesar":
Sin especificarlo
-f h264
, el valor predeterminado sería 25 fps y no se podría cambiar. Aparentemente, esto se debió a que la transmisión carecía de información de velocidad de fotogramas y esta es la velocidad de fotogramas predeterminada de ffmpeg.Aparentemente, cuando se usa
-r
como opción de salida, duplica o suelta fotogramas para que el video se reproduzca a la misma velocidad, ¡en este caso, no lo que desea! Pero cambiar la velocidad de fotogramas de entrada como se indicó anteriormente hará que el video se acelere o desacelere, sin cuadros perdidos o duplicados.fuente
Tal característica, de cambiar la velocidad de fotogramas, se llama "conforme" y a menudo se usa para producir cámara lenta o avance rápido como mostrar el crecimiento de una planta en minutos en cuestión de días. ffmpeg no permite sobrescribir / cambiar la velocidad de fotogramas sin volver a codificar . Si lo hace, la duración cambiará y el audio no estará sincronizado a menos que se repare por separado. Pero me temo que el audio no es de interés en su caso con una velocidad de fotogramas de .33
Desea ajustarse porque solo quiere cambiar la velocidad de fotogramas, pero ffmpeg ignora en
-r
silenciosi se especifica framerate en el archivo de entrada. Dado que su archivo de entrada está en formato .mp4, su propio framerate tiene prioridad sobrecuando no se necesita volver a codificar. Para esto necesitas una herramienta diferente: mencoder.-r
Suponiendo que su archivo de entrada no contiene sonido, probablemente cierto para cualquier video con velocidad de fotogramas de .33, lo que necesita es:
Observe que, por defecto, mencoder produce resultados en formato AVI.
fuente
r
se especifica como un interruptor de salida, ffmpeg producirá una salida a esa velocidad de fotogramas especificada, independientemente de la velocidad de fotogramas de la entrada. Sir
se especifica como un interruptor de entrada, ffmpeg duplicará o soltará cuadros según sea necesario para alimentar el número especificado de cuadros por segundo de entrada al filtro / codificador.r
es un cambio de entrada contradice mi experimento anterior en formato .mp4, la nota de Malvineous (en esta página) y la descripción del error 403 trac.ffmpeg.org/ticket/403 ; su descripción cuandor
se usa en la salida ocurre cuando se vuelve a codificar, mientras que el escenario de OP parece ser un caso conforme (corregir la velocidad de fotogramas sin volver a codificar) por el hecho de que tenía una velocidad de fotogramas de .33.r
fps.-r
. Ese uso no pudo afectar mis experimentos anteriores en respuesta a OP porque, pensando en un caso conforme, nunca eliminé el parámetro de copia de ffmpeg, y por-r
lo tanto es ignorado. Escribí una solicitud de función: trac.ffmpeg.org/ticket/5170La forma más rápida es crear un archivo BAT en el directorio con las siguientes filas:
Necesita tener mkvmerge y ffmpeg en el mismo directorio. Cambia cada archivo mp4 en segundos automáticamente sin pérdida de calidad.
fuente