viernes, 10 de enero de 2020

Trasplante de Audio

Hace un par de días renové antiguos conocimientos, cuando un amigo me comentó que tenía un viejo filme, que le gustaba mucho, pero de mala calidad, y le gustaría conservar esa peli en su colección.... pero en HD. Yo ya apenas uso los ‘programas p2p’, pero me ofrecí ayudarle. 
Y ahora me toca hacer una declaración de principios (personales): no considero que sea pirateo el descargarte cosas para tu simple uso personal… igual que no considero que sea ‘delito’ leer gratuitamente el periódico del día en el bar, mientras tomas un café, o que las señoras lean (sin necesidad de comprarlas) las revistas semanales ‘del corazón’ en su peluquería, o ir a una biblioteca pública y sacar (gratuitamente) un libro… o que un amigo te preste, para escuchar en el coche, un CD con canciones de Maria Dolores Pradera (bueno… o de Tones and I, J. Balvin o Maroon 5)
El caso es que pude descargarme esa peli con muy buena calidad (Blu-ray), pero en inglés… y otra (la misma) de peor calidad, pero en versión española. Y entonces se me ocurrió desempolvar mi instrumental para hacer una fina intervención quirúrgica…

Bueno, el instrumental solo era… mi querido ffmpeg, que hace tiempo que lo tengo abandonado. Porque lo que bullía en mi cabeza era intentar hacer, simplemente, la operación de trasplantar la banda de audio en español, a la versión en Alta Calidad (HD) de la peli, que estaba en inglés. Y la cosa la fuí enfocando de una forma muy sencilla:

Paso 1: extraigo el audio en español 
Para esto solo basta hacer, por consola...
ffmpeg -i videoESP.mkv -ab 128k audioESP.mp3
(Nota: si no se indica bitrate, por defecto te sale con un bitrate de 64k (64000), que puede ser suficiente para diálogos, y no se trata de una banda sonora excepcional)
Así que ya tengo un archivo MP3 con la banda sonora de la peli en español.

Paso 2: Borro la pista de audio de la peli HD en inglés
Esto también es sencillísimo de hacer con el ffmpeg
ffmpeg -i videoHD.mkv -c copy -an videoHD_mudo.mkv
y obtengo, igualmente, un archivo de esa peli en alta calidad (HD)… sin sonido

Y Paso tercero: recomponer el video 
Evidentemente, si uno ambos archivos, obtendré una peli con alta calidad de imagen... con una banda de audio en español. Así que
ffmpeg -i videoHD_mudo.mkv -i audioESP.mp3 -c copy -map 0:0 -map 1:0 videoHD_ESP.mkv
Et voila…!

Solo me queda una duda, que es que el trasplante me salió perfecto, porque la peli ‘videoHD_ESP.mkv’ obtenida tiene el audio completamente sincronizado... y esto no se si es porque sale así… o porque tuve la suerte de que saliese así. 
Por si acaso, voy a apuntar aquí que, cuando hay una desincronización de la imagen con el audio, se puede intentar arreglarlo. 
Lo primero, desde luego, es conocer con exactitud el valor (en tiempo) de esa desincronización. Y, a partir de aquí, hay varias posibilidades para tratar de corregir ese desfase.
Una, muy fácil, con ffmpeg, es la que indico a continuación, donde se juega con la reproducción diferida de los flujos de video y audio de un mismo archivo.
Y así, si hay (en el ejemplo que pongo) una desincronización de medio segundo (0.5)... 
A) Para retrasar el audio, respecto a las imágenes
La orden...
ffmpeg -i miVideo.avi -itsoffset 0.5 -i miVideo.avi -map 0:v -map 1:a -c:copy miVideoOK.avi 
fuerza un desfase (que tendríamos que hacer contrario al de la peli desincronizada, para corregirla) porque
-itsoffset 0.5 -i miVideo.avi especifica que el segundo archivo de entrada (que, en este caso, es el mismo que el primero) debe retrasarse, en general, 0.5 s respecto al puesto en primer lugar.
-map 0:v -map 1:a indica que se seleccione (mapee), para hacer correr 'en diferido' solo el video del primer archivo de entrada, y solo el audio del segundo flujo. (si tuviésemos el video mudo por un lado, y el audio por otro, esto no sería necesario), y...
-c: copy indica que esta secuencia de ejecución debe copiarse (esta notación simplificada equivale a escribir -c:v copy -c:a copy) para crear un nuevo archivo (miVideoOK.avi) 
B) Para retrasar las imágenes, respecto al audio 
Pero si la orden del mapeo, que indicaba arriba, fuese ahora … -map 0:a -map 1:v..., o sea, al revés que antes, se seleccionará solo el audio del primer archivo indicado, y solo el video del segundo archivo. Y así, la misma instrucción con el ffmpeg ahora retrasaría las imágenes, respecto al audio, en esos 0,5 segundos del ejemplo.
(NOTA: El potencial de ffmpeg le permite también ir ajustando el sonido al video con el ‘interruptor ‘-async’ que, de acuerdo con la documentación "Estira / exprime" la secuencia de audio para que coincida con las marcas de tiempo dela grabación del video. Pero esto ya son palabras mayores, para los estudiosos). 
Y, por cierto, si lo que quisiésemos fuese añadir una nueva pista de audio a un video (en el caso de una peli, para (por ejemplo) poder elegir entre dos idiomas, creo que serviría el mismo concepto, con el mandato
ffmpeg -i video_con1pista.mkv -i audiopista2.mp3 -map 0 -map 1 -c copy video_con2pistas.mkv

Fuente: https://www.enmimaquinafunciona.com/pregunta/132731/ffmpeg-anadir-una-nueva-pista-de-audio-a-archivo-existente
ffmpeg -i input.mkv -i audio.dts -map 0 -map 1 -c copy output.mkv

Fuente: https://www.enmimaquinafunciona.com/pregunta/132731/ffmpeg-anadir-una-nueva-pista-de-audio-a-archivo-existente
ffmpeg -i input.mkv -i audio.dts -map 0 -map 1 -c copy output.mkv

Fuente: https://www.enmimaquinafunciona.com/pregunta/132731/ffmpeg-anadir-una-nueva-pista-de-audio-a-archivo-existente
ffmpeg -i input.mkv -i audio.dts -map 0 -map 1 -c copy output.mkv

Fuente: https://www.enmimaquinafunciona.com/pregunta/132731/ffmpeg-anadir-una-nueva-pista-de-audio-a-archivo-existente
ffmpeg -i input.mkv -i audio.dts -map 0 -map 1 -c copy output.mkv

Fuente: https://www.enmimaquinafunciona.com/pregunta/132731/ffmpeg-anadir-una-nueva-pista-de-audio-a-archivo-existente
Y quiero terminar acordándome del viejo Avidemux, una herramienta (gráfica) magnífica, por supuesto basada en ffmpeg, que ya existe en formato AppImage (o sea, un Avidemux ‘portable’, que se puede usar sin necesidad de tenerlo instalado). Quien le guste este tema de la edición de video no debe dejar de tenerlo, se encuentra fácilmente con Google (por ejemplo, ver aquí)

Yo ya hablaba, hace mucho tiempo, de esta herramienta, y tengo en el Blog un ‘mini-Tutorial’ que puede seguir siendo útil (donde, en uno de sus puntos, se habla de la sincronización, y sería otra forma de intentar solucionar problemas de faly¡ta de sincronización entre el audio y las imágenes)

En fin, acabo que, a lo tonto, la anécdota con la peli de mi amigo ha pasado a convertirse en una entrada al Blog... 
(por cierto, días después hice una prueba con dos videos distintos (de la misma peli, uno en ingles y otro, de peor calidad, en español) y también fue todo un éxito tanto el 'trasplante' de las pistas de audio como lo de añadirle una segunda pista (con el audio en español) al video en inglés. Y quedaron perfecto, automáticamente sincronizadas).

3 comentarios:

  1. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  2. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  3. por motivos de seguridad, no hacer caso al troll/trolls como los de arriba, que se dedican a poner comentarios añadiendo enlaces de escasa fiabilidad. Veré qué medidas adoptar.

    ResponderEliminar