lunes, 6 de diciembre de 2010

Muffin Translator, mi proyecto de vacaciones

Como proyecto de vacaciones, me propuse hacer un programita al que le tenía ganas hace tiempo: Muffin Translator.
Como sabrán, tengo amigos en un fansub de anime. Ellos para traducir, deben bajar los capítulos del anime a traducir, de algún fansub en ingles, para leer los subtítulos, traducirlos y escribirlos en un archivo de texto plano. Esto conlleva tener que pasar entre ventanas con las teclas Alt+Tab, cosa engorrosa viendo que son cerca de 500 lineas de dialogo por capítulos.
Aquí nace la idea de Muffin: tener todo en una misma ventana, es decir, video, texto, y diccionarios online.

Pero, ¿Con qué hacerlo?, el lenguaje de programación es importante y más porque, aun que soy usuario de Linux, la mayoría de los que usarían el programa usan Windows. Tampoco puedo desarrollarlo solo para Windows, porque esa mayoría no son el 100% jejejejejeje
Pensé en usar Vala+Mx: Vala es el lenguaje de programación del proyecto Gnome muy parecido a C y muy integrado a GTK... no quise usar GTK por lo maluco que es compilar cosas para Windows. Mx es un sistema de widgets basados en Clutter (una biblioteca para manejar datos OpenGL de forma más abstracta y fácil), peeeeeero... tiene el problema de la casi nula documentación, y que nadie la ha usado lo suficiente como para tener ejemplos concretos desde Vala.
La otra opción fue C#+Mono: Mono es multiplataforma también, pero, tuve el inconveniente del video... no supe qué usar, y no supe hacer las interfaces gráficas tampoco, y como la documentación era demasiado "serious business", no me ayudaba mucho.
Por ultimo, consideré Python+wxWidgets: Python es un lenguaje multiplataforma, super-popular en todas las distribuciones Linux, y que en Windows es fácil crear ejecutables (py2exe). Además es un lenguaje muy fácil y bastante practico. wxWidgets, es una biblioteca para GUIs (al igual que GTK, o Qt4...), escrito en C++, que su filosofía es escribir el mismo código para crear la interfaz gráfica, y que al usarlo en cualquier sistema operativo, se vea igual. Así, en Windows, usa las bibliotecas nativas de Windows para crear la GUI. En Linux, usa GTK, en Mac, usaba Carbon, pero ya se está portando a Cocoa. Yo la conocía hace mucho tiempo (Aegisub usa esta biblioteca), por lo que se lo que se puede hacer con ella, además la documentación es muy buena, y en español, aunque no es mucho, hay varios ejemplos de como usarse. Por otro lado, viene integrado con muchas funcionalidades, que sumadas a las propias de Python, lo hicieron el candidato perfecto.

Lo siguiente, ya habiendo seleccionado a Python, fue definir el tema del video. Si conocen sobre anime en ingles, quizás se habrán dado cuenta que los gringos prefieren publicar mucho de su anime en el formato contenedor Matroska (MKV), ese es un problema, pues el MKV permite múltiples canales de subtítulos, audio, etc... bastante flexible, pero no muy sencillo par mi.
¿Cómo hacer entonces para reproducir video en Muffin?. Primero lo primero, qué alternativa conocía en Python: PyGame o PyGlet, ambas son para crear videojuegos, pero no sabía como integrarlas... de hecho, parecía imposible. La otra opción era usar pyffmpeg, un warper de ffmpeg (un conjunto de codecs multipletaforma), funcionó... pero excesivamente lento, la razón es que está diseñado para manejar fotograma a fotograma el video... algo que es pesado computacionalmente, y que para Muffin no era muy interesante.
Por casualidad dí con MplayerCtrl, un warper para usar el popular Mplayer en... oh sorpresa: wxPython.

Ahora mismo ando programándolo, he usado wxGlade para la interfaz gráfica, y voy a usar Mercurial como control de versiones y CodeGoogle como hosting.
Pronto les daré más bocadillos ;D

4 comentarios:

miguel dijo...

Suena genial tu proyecto, aunque nunca fui traductor en el fansub me imaginaba que era un proceso... interesante. Me gustaría ver tu primera versión, probarla y si es posible colaborar con algo :P

miguel~

Frodo45127 dijo...

Me gustaría probar tu primera versión, ya que yo estoy en un fansub, aunque de corrector, pero estoy practicando para traductor y me vendría muy bien una herramienta como esa.
Lo mismo también puedo colaborar en algo, aunque yo de programación poco.

Unknown dijo...

Hey viejo me parece excelente tu proyecto de vaciones, es algo genial y el analisis para las alternativas de desarrollo que contemplaste son perfectas ... espero que todo salga bien ....

Rafael Poveda dijo...

Hola... me gusto mucho tu blog. Me gustaria saber si sabes la diferencia entre un wrapper y un binding.. porq la verdad no he podido enterlas y en python se habla mucho de ellas. Gracias