Cómo corregir la desincronización de audio en un fichero Matroska

Ocasionalmente tenemos una desincronización del audio y el vídeo en un fichero Matroska. Para solucionarlo es necesario generar un nuevo fichero Matroska con los códigos de tiempos de cada pista ajustados convenientemente.

Los pasos son los siguientes:

  1. Determinamos la desincronización precisa. Lo más fácil es buscar en el vídeo una escena con un golpe, una explosión, un disparo, una puerta que se cierra, etc. Un sonido bien identificable y con una representación visual evidente.

    Nota

    Si el desajuste ocurre en la pista de audio original y es pequeño, nos puede servir cualquier escena con diálogos fijándonos en el movimiento de los labios. Cuando se trata de un audio doblado, este truco no nos sirve.

    1. Si el desajuste de audio y vídeo es corto, vamos cambiando el desplazamiento de las pistas poco a poco hasta que vemos la escena sincronizada.

      Por ejemplo, con mplayer podemos usar las teclas + y - para desplazar el sonido de décima en décima de segundo, en un sentido o en otro.

    2. Si el desajuste es muy alto, lo más fácil es cronometrarlo. Por ejemplo, con la aplicación correspondiente del móvil. Luego hacemos un ajuste rápido y poco preciso y estaremos en la situación del punto anterior.

  2. Es muy habitual que el desfase de audio sea diferente para cada idioma, así que es necesario revisar todas las pistas de sonido y apuntarnos el desfase de cada una.

  3. El comando mkvmerge puede tomar una fichero MKV y generar un fichero Matroska nuevo con un desplazamiento arbitrario:

    1. Identificamos las pistas del fichero MKV original:

      $ mkvmerge -i FICHERO.mkv
      File 'FICHERO.mkv': container: Matroska
      Track ID 0: video (MPEG-4p10/AVC/h.264)
      Track ID 1: audio (Opus)
      Track ID 2: audio (Opus)
      Track ID 3: subtitles (SubRip/SRT)
      Track ID 4: subtitles (SubRip/SRT)
      Track ID 5: subtitles (SubRip/SRT)
      Attachment ID 1: type 'image/jpeg', size 2313487 bytes, file name '1'
      Attachment ID 2: type 'image/jpeg', size 179140 bytes, file name '2'
      Chapters: 16 entries
      

      Se trata de una película con dos audios y tres subtítulos.

      Debemos quedarnos con los números de Track ID que nos interesan.

    2. Generamos un fichero MKV nuevo con los desplazamientos de cada pista que nos interesen, especificados en milisegundos. En este caso:

      $ mkvmerge -o FICHERO_DESTINO.mkv -y 1:500 -y 2:1500 FICHERO_ORIGEN.mkv
      

      Este comando creará un fichero nuevo aplicando un desplazamiento de 500 milisegundos en la pista de audio en castellano y 1500 milisegundos en la pista de audio en inglés. Las pistas no referenciadas (vídeo y subtítulos) se copiarán tal cual, sin alteración.

  4. Ahora debemos visualizar el fichero Matroska nuevo y comprobar que todo está bien.

¡Listo!.

Hay que tener en cuenta algunos detalles:

  • Si tenemos varias pistas de audio con el mismo desplazamiento, es tentador desplazar la pista de vídeo en sentido opuesto en vez de desplazar varias pistas de sonido. He encontrado que alterar los códigos de tiempo en pistas de vídeo da problemas en algunos reproductores. Evítalo.

  • Es buena idea comprobar el desfase de sonido en varios puntos diferentes. A veces el desfase varía con el tiempo. Mkvmerge es capaz de gestionar esta eventualidad:

    -y, --sync TID:d[,o[/p]]

    Adjust the timecodes of the track with the id TID by d ms. The track IDs are the same as the ones given with --identify (see section track IDs).

    o/p: adjust the timestamps by o/p to fix linear drifts. p defaults to 1 if omitted. Both o and p can be floating point numbers.

    Defaults: no manual sync correction (which is the same as d = 0 and o/p = 1.0).

    This option can be used multiple times for an input file applying to several tracks by selecting different track IDs each time.

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

  • Por supuesto, puedes usar mkvmerge para desplazar, por ejemplo, las pistas de subtítulos.