Estoy intentando duplicar la velocidad de un vídeo.
Yo uso los comandos:
ffmpeg -i output.mp4 -filter:v "setpts=0.5*PTS" output2.mp4
y
ffmpeg -i output.mp4 -vf "setpts=0.5*PTS" output3.mp4
que encuentro en Internet como el método estándar.
Sin embargo, todos mis archivos tienen la misma longitud:
joe@joe-Amd-Am4-Home-Office:~$ for file in *.mp4; do duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file"); echo "$file: $duration seconds"; done
output2.mp4: 373.014000 seconds
output3.mp4: 373.014000 seconds
output.mp4: 373.014000 seconds
¿Qué está pasando y cómo acelero adecuadamente el vídeo? Estoy usando ubuntu.
Respuesta1
Mi primera suposición sería que el enfoque PTS, documentadoaquí, funciona "cambiando la marca de tiempo de presentación (PTS) de cada fotograma de vídeo", lo quejugadoresRespetaría y aceleraría. Pero tal vez eso no cambie lareportadoduración del vídeo como ffprobe
lo ve.
Pero jugueteando con un mp4 de prueba aleatorio que tengo muestra que, aunque el vídeo está acelerado, el audio no. Lo que explicaría por qué yo también veo la misma marca de tiempo para cada vídeo a través de ffprobe
. Esto concuerda con una nota de la documentación vinculada anteriormente:
Tenga en cuenta que en los siguientes ejemplos, la transmisión de audio no se modifica, por lo que idealmente debería desactivarse con
-an
.
Otra respuesta ensuperusuarioofrece el siguiente filtro complejo para acelerar tanto el vídeo como el audio:
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv
Y ese funciona para mí, mostrando la mitad de la longitud a través de ffprobe
.