Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



lunes, 13 de diciembre de 2010

Front-end: Convertidor .ogv a .avi 2º versión

La ventaja de hacer un programa que sea software libre con licencia GPL, es que cualquier persona con conocimientos y ubicada en cualquier parte del mundo, puede mejorar dicho programa, y que todo el mundo se beneficie.

Este es un caro ejemplo de ello:


A continuación os comento una nueva mejora del programa "Convertidor .ogv a .avi", ha sido realizado por razaAztk un miembro del foro gambas-es.org.
Se trata de poner una barra que indique el estado de la conversión, algo muy útil para saber cuanto tiempo le queda para terminar la conversión.



Comentaré un poco como lo ha conseguido hacer:
Ha creado un proceso de la siguiente manera:

hproc = EXEC ["mencoder", TextBoxentrada.text, "-ovc", "xvid", "-oac", "mp3lame", "-xvidencopts", "pass=1", "-o", TextBoxsalida.text] FOR READ AS "Mencorder"
Asi cada vez que proceso manda algo a la salida standard, se lanza el evento Mencorder_Read()

Y con esta subrutina,  lee  cada vez que se produce una salida en la terminal:

PUBLIC SUB Mencorder_Read()

  DIM sLine AS String
  DIM sCad AS String[]
  DIM vx AS Float

  READ #LAST, sLine, -50
  'PRINT sLine
  sLine = Trim(sLine)
  IF sLine LIKE "*[0-9]*%*" THEN
    sCad = Split(sLine, " ", "'", TRUE)
    TRY vx = Val(Replace$(Replace$(Replace$(sCad[3], "%", ""), "(", ""), ")", "")) / 100
    IF vx > 0 THEN
      pb.Value = vx
    ENDIF
  ENDIF
END  


Y va analizando la salida que genera el EXEC en la terminal (  READ #LAST, sLine, -50 ). leemos unos cuantos caracteres (en este caso 50)

Cada línea lanza el evento Read, las lineas que nos interesa para la progress bar son las del tipo:


Pos:   1.3s     22f (84%)  0.00fps Trem:   0min   0mb  A-V:0.140 [1705:7]

Asi cuando encuentra algún numero con porcentaje en la linea que esta analizando (  IF sLine LIKE "*[0-9]*%*" THEN ).

vx = Val(Replace$(Replace$(Replace$(sCad[3], "%", ""), "(", ""), ")", "")) / 100
  y tomamos el campo 4 ( sCad[3] (recordemos que los arrays empiezan por 0, por eso no es 4), que es el (84%). Quitamos los caracteres sobrantes (%) y lo pasamos a numero.
Este número lo pasa a pb.value (a la progress bar ), y asi va mostrando como se esta desarrollando el proceso.


Este código es muy útil ya que saber la salida  en la terminal que genera un comando ejecutado por la orden EXEC, puede ser fundamental para la buena ejecución de nuestro programa.

Imaginaos por ejemplo que no este instalado mencoder en nuestro ordenador, podemos avisar al usuario que tiene que "hemos detectado que mencoder no esta instalado"... algo que sin lugar a dudas nos será muy útil.

Enlaces de descarga:
http://proyectojulio.googlecode.com/files/ogvavi-0.0.2.tar.gz
http://proyectojulio.googlecode.com/files/ogvavi_0.0.2.deb

Saludos y gracias por cooperar con tus conocimientos en este proyecto razaAztk


Julio Sánchez