Cómo cambiar solo la velocidad del audio con FFmpeg sin afectar el tono

A veces trabajas con archivos donde la duración del video y del audio no coinciden. Por ejemplo, tienes un archivo de video que dura 20 segundos, pero su pista de audio original solo tiene 10. Si quieres que el sonido se reproduzca más lento para llenar ese espacio extra sin cambiar su tono, FFmpeg es perfecto para eso.

La clave está en usar el filtro atempo. Este permite modificar la velocidad de reproducción del audio directamente. En tu caso específico, donde necesitas pasar de 10 segundos a 20, debes aplicar una velocidad al 50% usando atempo=0.5.

Diagrama técnico mostrando cómo un archivo de audio corto se estira para coincidir con una pista de video más larga mediante el comando ffmpeg.
Representación visual del proceso de sincronización: el audio original estirado para igualar la duración del video usando el filtro atempo.

Aquí tienes el comando exacto para lograr esto:

ffmpeg -i video.mp4 -filter:a "atempo=0.5" -c:v copy -c:a aac salida.mp4

Este comando mantiene la parte de vídeo exactamente igual gracias al -c:v copy, mientras que el audio se estira para durar el doble sin bajar su tono.

Cómo calcular el factor de velocidad

No necesitas memorizar los valores, puedes usar una fórmula simple. Para comprimir o estirar, divide la duración original del audio entre la duración deseada:

atempo = duración_original_audio / duración_deseada_audio

Si aplicas esto a tu ejemplo de 10 segundos originales para 20 segundos deseados, obtienes atempo=0.5. Si quisieras hacer lo inverso, por ejemplo reducir un audio de 20 segundos a 10, el comando sería:

ffmpeg -i video.mp4 -filter:a "atempo=2.0" -c:v copy -c:a aac salida.mp4

Manteniendo el tono: ¿Qué evitar?

Es crucial entender que atempo es la herramienta correcta para mantener el pitch mientras cambias la velocidad. Debes tener cuidado de no usar simplemente -af "asetrate=...", ya que ese filtro alteraría también el tono del sonido, lo cual generalmente no es lo que quieres al sincronizar pistas.

Si necesitas manejar diferencias extremas en las duraciones, puedes encadenar múltiples filtros para alcanzar los factores necesarios. Por ejemplo, usar -filter:a "atempo=0.5,atempo=0.5" multiplicaría la velocidad por 0.25.

Finalmente, si planeas procesar muchos archivos, puedes escribir un pequeño script para que FFmpeg calcule automáticamente el factor de atempo basándose en las duraciones exactas del video y del audio. Esto hace el proceso mucho más cómodo y eficiente.