Décaler les temps d'affichage des sous titres

Description

Ce code décale tous les temps d'un fichier sous-titres srt d'une valeur introduite par l'utilisateur et enregistre un nouveau srt.

C'est en fait une première partie d'une application complète, que je vais essayer de développer quand j'aurai le temps, dont la fonction sera de créer et éditer des fichers sous-titres.

Dans le zip il y a deux fichiers. srtUp.py peut se lancer seul ou via l'autre fichier, srt.py, qui est une interface graphique pour ce module srtUp.

Source / Exemple :


# -*- coding:cp1252 -*-

"""Crée un fichier srt copie d'un autre mais où les temps ont été décalés selon les entrées de l'utilisateur"""

def changeTime(time):
    """Additionne les temps et les ajustes au format du temps (minute et secondes entre 0 et 60)\nRenvoie le nouveau temps"""
    global sign, modify
    
    time = [float(i.replace(",",".")) for i in time]
    if sign == 1:
        for i in range(3): time[i] += modify[i]
        if time[2]>60:
            time[2]-=60
            time[1]+=1
        if time[1]>60:
            time[1]-=60
            time[0]+=1
    if sign == 0:
        for i in range(3): time[i] -= modify[i]
        if time[2]<0:
            time[2]+=60
            time[1]-=1
        if time[1]<0:
            time[1]+=60
            time[0]-=1
        if time[0]<0:
            return ["00","00","00.000"]
    return [addZ(str(int(time[0]))),addZ(str(int(time[1]))),addZ(str(time[2]))]

def addZ (nb):
    """Ajoute autant de "0" que nécessaire pour arriver au format srt, à savoir [hh:mm:ss.sss]\nRenvoie le nouveau temps"""
    
    if nb[0]!=0 and float(nb)<10 and len(nb)==2: nb = "0" + nb[1:]
    if len(nb)==1: nb = "0" + nb
    
    while len(nb)>2 and len(nb)<6:
        if len(nb[:nb.index(".")])!=2: nb = "0" + nb
        if len(nb[nb.index("."):])!=4: nb = nb + "0"
    return nb

def process(ligne):
    """Modifie la ligne si elle contient des indications de temps et les envoie à la modification par changeTime\nRenvoie la ligne"""

    if len(ligne.split("-->")) == 2: ligne = ":".join(changeTime(ligne[0:12].split(":"))) + " --> " + ":".join(changeTime(ligne[17:29].split(":"))) + "\n"
        
    return ligne

def srtUp(adress):
    """Ouvre le fichier, le lit, appelle la fonction "process" pour chaque ligne\nRenvoie le nouveau srt sous forme de liste"""

    srt=  open(adress,"r").readlines()
    return [process(i) for i in srt]

def write(srt2, adress2):
    """Inscrit le contenu d'une liste dans un fichier, ici le nouveau fichier srt"""
    
    file = open(adress2, "w")
    for i in srt2: file.write(i)
    file.close()
    
if __name__== "__main__":
    
    adress = raw_input("Entrer l'adresse du fichier de type srt à traiter : ")
    adress2 = raw_input("Entrer l'adresse du fichier résultat : ")
    sign = int(raw_input("Entrer '1' pour ajouter du temps ou '0' pour en retirer. NB: En ajouter engendrera un affichage modify tardif des sous-titres : "))
    modify = [float(i.replace(",",".")) for i in raw_input("Entrer le décalage temporel à appliquer sous la forme hh:mm:ss.ssss : ").split(":")]
    write(srtUp(adress), adress2)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.