Carteles letra a letra [función hecha en python 3.4.2]

Ver el tema anterior Ver el tema siguiente Ir abajo

¿Pudiste usarlo?

0% 0% 
[ 0 ]
0% 0% 
[ 0 ]
0% 0% 
[ 0 ]
0% 0% 
[ 0 ]
 
Votos Totales : 0

Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por [GX] el Mar Nov 25, 2014 8:01 pm

Estaba haciendo unos carteles y como vi que repetía un patrón, creé una función en python para no tener que repetir lo mismo a cada rato (aparte de ahorrarme mucho tiempo).

Primer versión con \clip:
La función es ésta:

Código:
def movT(t,clip,rep):
 v=0
 c=clip[2]
 e=0
 while v<=rep:
 print("{\\t(%s,%s,\clip(%s,%s,%s,%s))}"%(e,e,clip[0],clip[1],c,clip[3]))
 c=c+50  # Puse cincuenta porque ésa era la separación entre letras aprox. que tenía
 v=v+1
 e=e+t

para usarla tienen que escribir "movT(t,clip,rep)" a "t" tienen que reemplazarla por el intervalo de tiempo en que quieren que quieren que aparezca la siguiente letra. A "clip" hay que reemplazar por lo que está entre paréntesis después del "\clip()" que tiene que marcando la primera letra (esto es en el aegi). En "rep" ponés la cantidad de líneas que necesitás.

Dejo un ejemplo:

Código:
movT(89,(332,761,380,851),19)

Acá le pedí que haga 19 líneas y que aparezcan cada 89 milisegundos.

Y lo que nos da es esto:

Código:
{\t(0,0,\clip(332,761,380,851))}
{\t(89,89,\clip(332,761,430,851))}
{\t(178,178,\clip(332,761,480,851))}
{\t(267,267,\clip(332,761,530,851))}
{\t(356,356,\clip(332,761,580,851))}
{\t(445,445,\clip(332,761,630,851))}
{\t(534,534,\clip(332,761,680,851))}
{\t(623,623,\clip(332,761,730,851))}
{\t(712,712,\clip(332,761,780,851))}
{\t(801,801,\clip(332,761,830,851))}
{\t(890,890,\clip(332,761,880,851))}
{\t(979,979,\clip(332,761,930,851))}
{\t(1068,1068,\clip(332,761,980,851))}
{\t(1157,1157,\clip(332,761,1030,851))}
{\t(1246,1246,\clip(332,761,1080,851))}
{\t(1335,1335,\clip(332,761,1130,851))}
{\t(1424,1424,\clip(332,761,1180,851))}
{\t(1513,1513,\clip(332,761,1230,851))}
{\t(1602,1602,\clip(332,761,1280,851))}
{\t(1691,1691,\clip(332,761,1330,851))}

P.D: Esto va sólo de izquierda a derecha y no modifica la altura (porque así son los carteles para los que lo estoy usando).

P.D.2: Pueden modificarlo, son libres de hacerlo y si quieren, me gustaría que posteen sus modificaciones o mejoras.

Casi me olvidaba, acá está Python para descargar (es el que dice python 3.x.x):

https://www.python.org/downloads/

------------------------------------------

Actualización 26/11/2014

Hice unas modificaciones para que no aparezca lo del 0,0 dentro del \t:

Código:

def movT(t,clip,rep):
   v=0
   c=clip[2]
   e=0
   while v<=rep:
      if c>clip[2]:
         print("{\\t(%s,%s,\clip(%s,%s,%s,%s))}"%(e,e,clip[0],clip[1],c,clip[3]))
         c=c+50
         v=v+1
         e=e+t
      else:
         print("{\\t(0,1,\clip(%s,%s,%s,%s))}"%(clip[0],clip[1],c,clip[3]))
         c=c+50
         v=v+1
         e=e+t

También agrego una forma más fácil de introducir los datos cuando se llama la función:

Código:
movT(int(input("Intervalo de tiempo: ")),(int(input("Primer valor de izq. a der. de lo que está adentro de los paréntesis del \clip: ")),int(input("Segundo valor: ")),int(input("Tercer valor: ")),int(input("Cuarto valor: "))),int(input("¿Cuántas líneas?: ")))

--------------------------------------------
Segunda versión usando transparencia \alpha:

Actualización 28/11/2014

Nueva versión:

Ahora el script usa \alpha en vez de clip, y como lo usa letra por letra es 100% preciso, ya que no hace falta ajustar el ancho del caracter, porque trabaja directamente con cada letra. También arreglé un problema que al estar escrito en diferentes líneas Aegisub me agregaba "\N" a cada rato, y hacía que el subtítulo termine muy arriba.
Por último le agregué un interfaz gráfica (una muy simple, apenas y voy empezando), para que sólo tengan que apretar un botón y después les pide los datos para el efecto (dejo el ejecutable porque cada vez que edito el tema se corre el código, y python es muy estricto con la identación [sólo sirve si tienen instalado python 3.x.x]).

Código:

#Hecho por [GX] para SyncRajo fansub, o cualquiera que quiera usarlo
#v.2 de carteles letra a letra

from tkinter import *
ven=Tk()
ven.title("Moee")

def alpha():
   w=input("Texto: ")
   intervalo=int(input("Tiempo: "))
   r=tuple(w)
   j=intervalo
   e=""
   for letra in r:
      e=e+("%s{\\alphaff\\t(%s,%s,\\alpha00)}"%(letra,j,j))
      j=j+intervalo   
   print (e)
   

bt=Button(ven,text="Sugoi-desu",command=alpha)
bt.pack()
ven.mainloop()

v2 ejecutable: mediafire.com/view/zvth5m1h1fvhrqv/Alpha.py

///////////////////////////////////////////////////////////////////////////

Actualización 02/12/2014

Les traigo una nueva modificación, ahora le agregué dos funciones, una para que cuente la cantidad de caracteres y espacios para ayudar en el cálculo del tiempo, y la otra es para elegir si se quiere o no aplicar el efecto a los espacios. Todavía le falta unos toques finales, pero como lo más probable es que me desaparezca por un tiempo, es posible que la próxima actualización no sea pronto.

Código:

#Hecho por [GX] para SyncRajo fansub, o cualquiera que quiera usarlo
#modificación de v.2 carteles letra a letra

from tkinter import *
ven=Tk()
ven.title("Moee")
ven.geometry("170x30")


def cyEs(t):
        es=0
        espacio=" "
        for car in t:
                if car==espacio:
                        es=es+1
        print("Cantidad de caracteres:",len(t)-es,"Espacios:",es)
                
def FXesp(r):
        x=" "
        e=""
        intervalo=int(input("Tiempo: "))
        j=intervalo

        
        pregunta=input("¿Agregar efecto a los espacios? Enter para 'No':")
        if pregunta:
                for letra in r:
                        e=e+("%s{\\alphaff\\t(%s,%s,\\alpha00)}"%(letra,j,j))
                        j=j+intervalo
                print(e)
        else:
                for letra in r:
                        if letra!=x:
                                e=e+("%s{\\alphaff\\t(%s,%s,\\alpha00)}"%(letra,j,j))
                                j=j+intervalo
                        else:
                                e=e+x
                print(e)

                


def alpha():
   w=input("Texto: ")
   r=tuple(w)
   cyEs(r)
   FXesp(r)   

        
        

bt=Button(ven,text="Sugoi-desu",command=alpha)
bt.pack()
ven.mainloop()



Cómo usarlo:

Con abrirlo como un ejecutable, es suficiente. Pero como la consola me da problemas por lo del Unicode, y aparte me gusta más IDLE, les voy a mostrar de esa forma.

Abriendo el script con IDLE:

Una vez descargado el script y teniendo instalado python 3.x, hacés click con el botón secundario del mouse sobre "Alpha v2.1.py", y selecionás "Edit with IDLE", y te aparece todo el código del script, para ejecutarlo tenés que apretar "F5".

Usando el script "Alpha":
Ahora les va a aparecer esto:



Haciendo click en el botón "Sugoi-desu", te va a aparecer "Texto:", ahí tenés que poner el diálogo al que querés aplicarle el efecto, como ejemplo usé uno de los comentarios que había en el chat, después de presionar enter me dice la cantidad de caracteres y espacios que tiene el diálogo (que es de ayuda para calcular el tiempo). También aparece "Tiempo:", que es cada cuánto querés que aparezca un caracter. Y por último te pregunta si querés agregar el efecto a los espacios, para decir que "Sí", ponés cualquier cosa y después presionás enter y si no querés aplicar el efecto a los espacios presionás solamente enter.
Si querés volver a usarlo tenés que hacer click en "Sugoi-desu".



Usando el resultado en Aegisub:

Lo único que hay que hacer es copiar y pegar.



Descargas Alpha v.2.1:

Alpha 2.1: mediafire.com/view/hy9uan1e81d64tk/Alpha_v2.1.py

Ejemplo "Alpha.ass":  mediafire.com/download/7nkyxjcja7kemm4/Alpha.ass

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Actualización 13/01/2015

Versión final:

Lo reescribí y lo dejé mucho más ordenado, agregué notas, a las variables les puse nombres más descriptivos, ahora si en tiempo se pone algo diferente de un número entero, ya no da error, sino que te insiste hasta que lo pongas bien. Ya no imprime código de más, y tampoco hay código repetido en la parte de la elección, también mejoré el método usado para contar.

Código:

#Versión final por [GX]
#http://www.syncrajo.net/

from tkinter import *

ven=Tk()
ven.title("Moee")
ven.geometry("170x30")

def alpha():
    #Pide el texto y lo separa letra por letra
    texto=input("Texto: ")
    letras=tuple(texto)

    #Acá cuenta los espacios y caracteres
    espacios=letras.count(" ")
    print("Cantidad de caracteres:",len(letras)-espacios,"Espacios:",espacios)

    #Pide el tiempo y lo cambia a int para usarlo como número
    tiempo=input("Tiempo en milisegundos: ")
    
    while type(tiempo)==type("string"):
        try:
            tiempo=int(tiempo)
        except:
            print("Introducir sólo números enteros")
            tiempo=input("Tiempo en milisegundos: ")

    #Elección de agregar o no el efecto a los espacios
    pregunta=input("¿Agregar efecto a los espacios? Enter para \"No\": ")
    if pregunta:
        elección=""
    else:
        elección=" "
        
    #Agrega el efecto pedido
    cartel=""
    intervalo=tiempo
    último_caracter=1
    for letra in letras:
        
        if letra!=elección and último_caracter!=len(letras):
            
            cartel=cartel+"%s{\\alphaff\\t(%s,%s,\\alpha00)}"%(letra,intervalo,intervalo)
            
            intervalo=intervalo+tiempo
            
            último_caracter=último_caracter+1
            
        elif último_caracter==len(letras):
            
            cartel=cartel+letra
            
        else:
            
            cartel=cartel+elección
            
            último_caracter=último_caracter+1
            
    print(cartel)


bt=Button(ven,text="Sugoi-desu",command=alpha)
bt.pack()
ven.mainloop()

Si querés que le agregue algo, como que use el efecto en palabras, que haga el efecto a la inversa, o lo que sea. Dejá un comentario, participá en el foro y si es posible lo hago.

P.D: Si puedo voy a pasarlo a PHP


Última edición por [GX] el Mar Ene 13, 2015 8:07 am, editado 6 veces
avatar
[GX]

Mensajes : 34
Fecha de inscripción : 04/06/2014
Localización : Argentina

Ver perfil de usuario https://osu.ppy.sh/u/Bubblesss

Volver arriba Ir abajo

Re: Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por [SH] SrHell el Mar Nov 25, 2014 11:17 pm

Tengo dudas con el código, en realidad no me dedico a Python, pero se manejarlo un poco, así que aquí van mis preguntas.

Código:

c=clip[2]

1. ¿Es un arreglo? ¿Un diccionario? ¿Una tupla? no entiendo la diferencia (para mi todos son arreglos).

Código:

(e,e,clip[0],clip[1],c,clip[3])

2. ¿Cómo imprimes la variable c antes de haberle dado el valor?

3. ¿No debería terminar con 2 el arreglo? osea solo le diste un valor de dos, ¿o almacenas c en la variable clip[2] para crear otra?

Código:

("{\\t(%s,%s,\clip(%s,%s,%s,%s))}"%(e,e,clip[0],clip[1],c,clip[3]))

4. ¿Aquí estas dividiendo el arreglo? pero tengo entendido que el "%" lo que hace es mostrar el residuo de la división, no comprendo Q_Q :why:

Osea se que no tienen nada que ver con el Aegisubs, espero no te moleste responderlas.
avatar
[SH] SrHell
Admin

Mensajes : 26
Fecha de inscripción : 03/06/2014
Edad : 23

Ver perfil de usuario

Volver arriba Ir abajo

Re: Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por [GX] el Miér Nov 26, 2014 10:12 am

Acá van tus respuestas:

1: c=clip[2] , es una variable con el valor del tercer elemento de la tupla clip (porque clip[0] es el primer valor Razz).

2: Sí tiene valor: "clip[2]".

3: Termina en "clip[3]" porque la tupla "clip" tiene cuatro elementos (el cero también cuenta  Shocked ).

4: Lo que hace "%s" es decir: Acá va algo así que hay que reemplazarme por el primer valor que esté después de "%("Yo soy quien va a reemplazarte","Y yo voy a reemplazar al siguiente %s que se le ocurra aparecer")"

P.D: Para que funcione bien en Aegi, al primer valor que dá la función donde aparece
"{\t(0,0,\clip(332,761,380,851))}", hay que cambiar el segundo cero por 1.
avatar
[GX]

Mensajes : 34
Fecha de inscripción : 04/06/2014
Localización : Argentina

Ver perfil de usuario https://osu.ppy.sh/u/Bubblesss

Volver arriba Ir abajo

Re: Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por [GX] el Vie Nov 28, 2014 9:39 pm

Nueva versión agregada que deja obsoleta la anterior y también agregada descarga. En cuanto a los nombres no se me ocurría nada y le puse cualquier cosa Very Happy.
avatar
[GX]

Mensajes : 34
Fecha de inscripción : 04/06/2014
Localización : Argentina

Ver perfil de usuario https://osu.ppy.sh/u/Bubblesss

Volver arriba Ir abajo

Re: Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por [GX] el Mar Dic 02, 2014 10:05 pm

Agregada versión 2.1 y ejemplos de cómo usarla.
avatar
[GX]

Mensajes : 34
Fecha de inscripción : 04/06/2014
Localización : Argentina

Ver perfil de usuario https://osu.ppy.sh/u/Bubblesss

Volver arriba Ir abajo

Re: Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por [SH] SrHell el Miér Dic 10, 2014 8:56 pm

Rayos, no sé suficiente Python xD

Comencé a estudiarlo nada más por que un compañero me lo pidió y al final lo que estoy utilizando (que si lleva una base fuerte en Python, pero es bastante simple) no utiliza tanto Python, a parte de eso, creo que los seguiré viendo en chino, hasta que aprenda a hacer bien un cartel.
avatar
[SH] SrHell
Admin

Mensajes : 26
Fecha de inscripción : 03/06/2014
Edad : 23

Ver perfil de usuario

Volver arriba Ir abajo

Re: Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por [GX] el Mar Ene 13, 2015 8:11 am

Versión final lista Very Happy
avatar
[GX]

Mensajes : 34
Fecha de inscripción : 04/06/2014
Localización : Argentina

Ver perfil de usuario https://osu.ppy.sh/u/Bubblesss

Volver arriba Ir abajo

Re: Carteles letra a letra [función hecha en python 3.4.2]

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.
Crear foro | © phpBB | Foro gratis de asistencia | Contactar | Denunciar un abuso | foro gratis