Resincronizar audio cuando el vídeo se congela un momento

Como ya he descrito en otros artículos, cada caso de desincronización de audio y vídeo es un mundo y hay que estudiar cada situación en particular.

En este artículo describo cómo corregir la desincronización debido a la corrupción de vídeo que congela la imagen durante un momento.

El primer paso es el diagnóstico: en este caso lo que observa es que el audio está bien sincronizado al principio del vídeo, pero tiene un desfase de un segundo al final del mismo. La causa habitual para un desfase progresivo es la conversión entre 24 y 25 fotogramas por segundo, pero en ese caso el desajuste será mayor (66 segundos).

Observo también que el sonido parece correcto a lo largo de la primera mitad del vídeo, pero existe un desfase constante de un segundo en la zona final del mismo.

Procedo, pues, a buscar el punto exacto donde se produce el desajuste y lo localizo mediante búsqueda binaria en 1:00:32. Hasta ese momento el audio y el vídeo están perfectamente sincronizados. En ese punto la imagen se congela durante un segundo, pero el sonido prosigue de forma que se introduce un desfase continuo de un segundo entre imagen y sonido hasta el final del vídeo.

Si no podemos obtener una fuente alternativa correcta, habrá que trabajar con este material.

  1. Generamos una nueva versión del fichero multimedia compensando el desajuste audio y vídeo del final. Obsérvese que esta versión tendrá el audio bien sincronizado al final, pero al principio del vídeo habrá un desajuste de un segundo. El proceso se describe en Cómo corregir la desincronización de audio en un fichero Matroska:

    $ mkvmerge -o VIDEO_2.mkv -y 1:1000 -y 2:1000 VIDEO_1.mkv
    [...]
    

    Dado que el vídeo tiene dos canales de audio, aplicamos el ajuste en ambos.

    Nota

    En realidad solo necesitamos el audio desplazado, no un vídeo entero MKV, pero así podemos ver el resultado de cada paso del proceso.

    Se podría, por ejemplo, extraer los dos audios del fichero original escogiendo cuidadosamente los puntos de corte, ya sea solapando o capturando un segundo más del primer corte, según convenga en cada caso.

    También hay que prestar atención a los subtítulos.

  2. A continuación extraemos los audios de ambas versiones:

    $ mkvmerge -o AUDIO_1.mkv -D VIDEO_1.mkv
    [...]
    $ mkvmerge -o AUDIO_2.mkv -D VIDEO_2.mkv
    [...]
    
  3. Seguidamente procedemos a cortar el trozo inicial del audio original y el trozo final del audio corregido:

    $ ffmpeg -i AUDIO_1.mkv -t 1:00:32 -c:a copy -map 0 AUDIO_1_2.mkv
    [...]
    $ ffmpeg -i AUDIO_2.mkv -ss 1:00:32 -c:a copy -map 0 AUDIO_2_2.mkv
    [...]
    

    El primer comando copia el primer fragmento de 1:00:32 del audio original a un nuevo fichero.

    El segundo comando copia el fragmento final a partir de 1:00:32 del audio corregido a un nuevo fichero.

    Obsérvese el uso de -map 0 para que se copien todas las pistas, no solo la primera pista de audio.

    Nota

    Mkvmerge es un comando fantástico que también permite trocear a placer un fichero Matroska. De hecho su sintaxis es más simple e intuitiva que ffmpeg. Podemos hacer algo así:

    $ mkvmerge -o AUDIO_1_1.mkv --split parts:-01:00:32 AUDIO_1.mkv
    [...]
    $ mkvmerge -o AUDIO_2_2.mkv --split parts:01:00:32- AUDIO_2.mkv
    [...]
    

    Mkvmerge es un comando muy potente. Echa un vistazo a su manual.

  4. Ahora juntamos los dos fragmentos de audio en uno solo:

    $ mkvmerge -o AUDIO.mkv AUDIO_1_1.mkv +AUDIO_2_2.mkv
    [...]
    

    Los detalles de cómo funciona esta fusión se describen en Concatenar ficheros de vídeo.

  5. El siguiente paso es mezclar el vídeo del fichero Matroska original con el fichero Matroska de audio (y subtítulos) corregido:

    $ mkvmerge -o VIDEO_FINAL.mkv -A -S VIDEO.mkv AUDIO.mkv
    [...]
    

    Los parámetros -A -S para VIDEO.mkv indican a mkvmerge que no debe utilizar los audios y subtítulos del vídeo original ya que le van a entrar corregidos a través de AUDIO.mkv.

  6. El último paso, como siempre, consiste en explorar el vídeo y comprobar que el audio está bien sincronizado en todas partes. En el punto 1:00:32 se produce un congelado de imagen de un segundo durante el cual el sonido vuelve a repetirse de nuevo y luego todo sigue con normalidad.

Misión cumplida.

Nota

Parecería evidente que en vez de trocear solo el audio podríamos haber troceado el audio y vídeo del fichero multimedia de forma conjunta. El problema de esto es que trocear vídeo de forma precisa sin involucrar recodificación es una tarea imposible debido a la interdependencia entre fotogramas. Lo mejor sería trocear en un fotograma clave para separar fácilmente el trozo antes de la clave y después de la clave. Es una labor complicada porque utilizo una codificación muy avanzada y la distancia entre fotogramas clave es de más de 10 segundos, de hasta un minuto en algunos casos.

Por tanto resulta mucho más sencillo no tocar el vídeo y realizar los ajustes exclusivamente en las pistas de audio y subtítulos.