Xdelta: parcheando binarios y vídeos para el fansub

Autor: Armonth | El viernes 23 de junio del 2006 @ 21:55.

A veces pasa que se prepara un capítulo fansubeado, se termina y no se encuentran errores, se hace la predistro (distribución entre los miembros del fansub para que luego ayuden a la distribución) y uno de los miembros encuentra un fallo. Es algo poco habitual (al menos en el fansub en el que estoy) pero reciéntemente nos ha pasado algo de eso: El vídeo esta correctamente pero las cabeceras del contenedor salieron mal. Cuando las cabeceras están mal los reproductores intentan "adivinarlas" y el fallo puede pasar desapercibido.

En Mplayer (de GNU/Linux) me encontré que sacaba un error y sólo reproducía el audio. El vídeo le fallaba la cabecera ID_VIDEO_FPS y por tanto no sabía a cuantos FPS (frames por segundo) estaba el vídeo. La solución inicial es sencilla, se demuxea (extraemos del contenedor el audio/vídeo en ficheros separados) y se muxea (se meten en un nuevo contenedor). Y listo. Sólo hace falta dos comandos y cinco segundos de tu CPU.

Pero al hacer esto los CRC no coincidirán y por tanto hablamos de que cada persona estaría distribuyendo una copia distinta del mismo. Esto teniendo en cuenta que el P2P es el principal sistema de distribución es malo. Muy malo.

Es aquí que entra una solución que todavía no me explico porque no se ha adoptado como algo habitual: usar XDELTA. Xdelta es un programa que hace las mismas funciones que un "diff"1 pero orientado a binarios. Xdelta está disponible tanto en GNU/Linux como en Windows. Actualmente yo utilizo la versión 1.1.3 de Debian Sid.

Volviendo a nuestro vídeo "defectuoso", una vez tenemos el vídeo corregido solamente hace falta crear el parche:

xdelta delta video-defectuoso.avi video-bueno.avi parche.diff

Con esto tenemos un fichero "parche.diff" que aplicado al "video-defectuoso.avi" hará los cambios necesarios para que sea exactamente igual al "video-bueno.avi" y nos lo generará desde cero:

xdelta patch parche.diff video-defectuoso.avi video-bueno.avi

Aunque Xdelta sirve para cualquier binario, yo lo veo como la herramienta perfecta para vídeos y fansubs. Si encontramos un pequeño error en nuestro capítulo que requiere la distribución de una "versión corregida" con poseer el original y distribuir un parche de 300kB nos ahorramos distribuir de nuevo 170-350MB de capítulo (lo habitual en el fansubing dependiendo de la calidad de la fuente original) por persona.

Actualización 2012: Parece que la idea, tan poca aceptada por aquel entonces, cunde. Hoy en día son muchos los fansubs que al detectar fallos en sus capítulos distribuyen un fichero con el parche + el binario de xdelta para windows + un fichero BAT y otro SH (para Windows y GNU/Linux respectivamente) que al ejecutarlo en el mismo directorio que el capítulo original nos genera un fichero "Capítulo xx v2 correguido.mkv" (MKV o la extensión equivalente, aunque se están haciendo comunes los MKV con subtítulos flotantes).


  1. "diff" es un programa que compara archivos, genera un informe con las diferencias e incluso "parches". Con estos parches podemos, a partir de un fichero viejo, crear uno nuevo y actualizado exactamente igual al nuevo del cual se ha generado el parche.  

Comentarios