[PYTHON] Code source de "Réglez la couleur du côté de l'affiche pour que la couleur des sous-titres Youtube change automatiquement."

en premier

Cet article est le code source des articles suivants.

Réglez la couleur du côté de l'affiche pour que la couleur du sous-titre Youtube change automatiquement.

Si vous pouvez le modifier, n'hésitez pas à l'utiliser.

point important

«Je n'avais pas l'intention de le publier, donc la déchiffrabilité est assez mauvaise. J'ai ajouté des commentaires, mais cela peut ne pas être utile. «La programmation elle-même est un amateur, et il peut y avoir des erreurs d'écriture. (Je pense que cela va fonctionner) ――Comment utiliser est écrit dans l'article ci-dessus. Si vous êtes intéressé, je serais heureux si vous pouviez jeter un œil. ――Si vous avez des améliorations, je vous serais reconnaissant de bien vouloir commenter.

Code source

Un fichier de configuration, etc. est requis pour le fonctionnement, veuillez donc le télécharger à partir de l'article ci-dessus. En termes simples, c'est comme convertir un fichier de sous-titres qui peut être téléchargé depuis Youtube dans un format qui vous permet d'écrire un code couleur, puis d'ajouter le code couleur spécifié. Étant donné que l'unité de temps entre le fichier de sous-titres téléchargé depuis Youtube et le fichier converti est différente, la première moitié est foirée. J'utilise beaucoup de "+", mais maintenant que j'y pense, j'aurais dû utiliser ".format ()".

Outil de création de sous-titres colorés.py


# -*- coding: utf-8 -*-
import os
import zipfile
import sys
from time import sleep

SetRoot = "./fichier de configuration/"
CapRoot = "./Veuillez y mettre le fichier de sous-titres téléchargé./"

#---Création du type de dictionnaire de code couleur basé sur le fichier de définition------------------------------------------------------------
ReadLineNum = 0
try:
    with open(SetRoot + "Couleur à utiliser et caractère spécifié.txt",'r',encoding="utf-8") as d:
        ColorCode = [s.strip() for s in d.readlines()]
except FileNotFoundError:
    print(""Couleur à utiliser et caractère spécifié.Le fichier "txt" n'existe pas. Créez-le ou téléchargez-le à nouveau.")
    print("Appuyez sur Entrée pour quitter.")
    k = input()
    sys.exit()
ColorCodeLineEnd = len(ColorCode) - 1
ColorCodeDic = {str(ColorCode[ReadLineNum].split(":")[0]):str(ColorCode[ReadLineNum].split(":")[1])}
while True:
    if ColorCodeLineEnd == ReadLineNum:
        break
    else:
        ReadLineNum += 1
        ColorCodeDic.update({str(ColorCode[ReadLineNum].split(":")[0]):str(ColorCode[ReadLineNum].split(":")[1])})
#-----------------------------------------------------------------------------------------------------

#---Convertir le fichier de légendes en type de liste, le code temporel en millisecondes et enregistrer en tant que code brut dans le type de liste------------------
try:
    with open(CapRoot + "captions.sbv",'r',encoding="utf-8") as f:
        Captions = [s.strip() for s in f.readlines()]
        FileType = 1
except FileNotFoundError:
    try:
        with open(CapRoot + "captions.srt",'r',encoding="utf_8_sig") as f:
            Captions = [s.strip() for s in f.readlines()]
            FileType = 2
    except FileNotFoundError:
        print("「captions."sbv" ou "légendes".Le fichier "srt" n'existe pas. Vérifiez si le format et le nom du fichier correspondent.")
        print("Appuyez sur Entrée pour quitter.")
        k = input()
        sys.exit()
CaptionsLineEnd = len(Captions) - 1
ReadLineNum = 0
RawCode = ["Code"]

if FileType == 1:
    while True:
        if Captions[ReadLineNum][1:2] == ":" and Captions[ReadLineNum][13:14] == ":":
            start = Captions[ReadLineNum][0:11].split(":")
            a = start[2].split(".")
            start = int(start[0]) * 3600000 + int(start[1]) * 60000 + int(a[0]) * 1000 + int(a[1])
            RawCode.append(str(start))
            end = Captions[ReadLineNum][12:23].split(":")
            a = end[2].split(".")
            end = int(end[0]) * 3600000 + int(end[1]) * 60000 + int(a[0]) * 1000 + int(a[1])
            RawCode.append(str(end))
        elif Captions[ReadLineNum] == "":
            pass
        else:
            RawCode.append(Captions[ReadLineNum])
        if ReadLineNum == CaptionsLineEnd:
            break
        else:
            ReadLineNum += 1

elif FileType == 2:
    while True:
        if Captions[ReadLineNum].isnumeric() == True:
            ReadLineNum += 1
            start = Captions[ReadLineNum][0:12].split(":")
            a = start[2].split(",")
            start = int(start[0]) * 3600000 + int(start[1]) * 60000 + int(a[0]) * 1000 + int(a[1])
            RawCode.append(str(start))
            end = Captions[ReadLineNum][17:29].split(":")
            a = end[2].split(",")
            end = int(end[0]) * 3600000 + int(end[1]) * 60000 + int(a[0]) * 1000 + int(a[1])
            RawCode.append(str(end))
        elif Captions[ReadLineNum] == "":
            pass
        else:
            RawCode.append(Captions[ReadLineNum])
        if ReadLineNum == CaptionsLineEnd:
            break
        else:
            ReadLineNum += 1

#-----------------------------------------------------------------------------------------------------

#---Remodeler RawCode et enregistrer sous EditCode au format liste----------------------------------------------------
RawCodeLineEnd = len(RawCode) - 1
ReadLineNum = 1
EditCode = ["EditCode"]
Break = 0
CountSentence = 0

while True:
    EditCode.append(RawCode[ReadLineNum])
    ReadLineNum += 1
    end = RawCode[ReadLineNum]
    ReadLineNum += 1
    word = RawCode[ReadLineNum]
    while True:
        if ReadLineNum == RawCodeLineEnd:
            EditCode.append(word)
            CountSentence += 1
            Break = 1
            break
        if RawCode[ReadLineNum].isnumeric() == False and RawCode[ReadLineNum + 1].isnumeric() == False: #S'il y a un saut de ligne dans le sous-titre, ajoutez-le en incluant le code de saut de ligne
            word = word  + "</b><br><b>" + RawCode[ReadLineNum + 1]
            ReadLineNum += 1
        else:
            EditCode.append(word)
            CountSentence += 1
            break
    if Break == 1:
        break
    ReadLineNum += 1
    if RawCode[ReadLineNum] == end:
        pass
    else:                         #Lorsque l'heure de début du sous-titre affiché et l'heure de fin du sous-titre précédent ne correspondent pas
        EditCode.append(end)      #Créer une chaîne de caractères à afficher à partir de l'heure de fin du sous-titre précédent
        EditCode.append("&nbsp;") #Remplacez une chaîne de caractères indiquant qu'elle ne sera pas affichée

#-----------------------------------------------------------------------------------------------------

#---Créez une liste d'informations de couleur pour chaque sous-titre en fonction du fichier de spécification de couleur--------------------------------------------------
try:
    with open(SetRoot + "Fichier de spécification de couleur.txt",'r',encoding="utf-8") as n:
        ColorCodeRaw = [s.strip() for s in n.readlines()]
except FileNotFoundError:
    print(""Fichier de spécification de couleur.Le fichier "txt" n'existe pas. Créez-le ou téléchargez-le à nouveau.")
    print("Appuyez sur Entrée pour quitter.")
    k = input()
    sys.exit()
ColorCodeLineMax = len(ColorCodeRaw) - 1
ReadLineNum = 0
ColorCode = ["ColorCode"]

if ColorCodeRaw[0][0:3] == "all":
    AllSameColor = 1
else:
    AllSameColor = 0

while True:
    if ReadLineNum < CountSentence:
        if AllSameColor == 1:
            ColorCode.append(str(ColorCodeRaw[0].split(" ")[1]))
        elif ColorCodeLineMax < ReadLineNum:
            ColorCode.append(str(ColorCodeRaw[ColorCodeLineMax]))
        else:
            ColorCode.append(str(ColorCodeRaw[ReadLineNum]))
        ReadLineNum += 1
    elif ReadLineNum == CountSentence:
        break

#-----------------------------------------------------------------------------------------------------

#---Demander une contribution---------------------------------------------------------------------------------------
FileNameDic = {"1":"captions.sbv","2":"captions.srt"}

print("Fichier de sous-titres importé: " + FileNameDic[str(FileType)])
print("Couleurs disponibles: " + str(ColorCodeLineEnd + 1) + "Couleur")
if AllSameColor == 1:
    w = "Même couleur (" + ColorCodeDic[ColorCode[1]] + ")\n"
else:
    w = "Changer par phrase\n"
print("Mode de spécification de couleur: " + w)
print("Les fichiers requis ont été lus. Désormais, nous allons créer un fichier de sous-titres.")
print("Vérifiez si le contenu lu ci-dessus est correct et si vous souhaitez commencer à créer, "y"], Pour quitter, tapez «n» et appuyez sur Entrée.")
key = input()
if key == "y":
    print("Entrez le nom du fichier dans lequel vous souhaitez enregistrer les données créées. Aucune extension n'est requise.(Appuyez sur Entrée après avoir tapé)")
    FileName = input()
    if FileName == "":
        print(""Sous-titres en couleur" car il n'a pas été saisi.Enregistrer sous "smi".")
        FileName = "ColorSubtitles.smi"
    else:
        print("「" + FileName + ".Enregistrer sous "smi".")
        FileName = FileName + ".smi"
    print("Appuyez sur Entrée pour commencer à travailler.")
    k = input()
else:
    print("J'ai arrêté de travailler. Appuyez sur Entrée pour quitter.")
    k = input()
    sys.exit()

#-----------------------------------------------------------------------------------------------------

#---Créer un fichier basé sur EditCode-----------------------------------------------------------------------

SentenceLineEnd = len(EditCode) - 1
ReadLineNum = 1
Sentence = ["<SAMI>\n<HEAD>\n<SAMIParam>\nMetrics {time:ms;}\nSpec {MSFT:1.0;}\n</SAMIParam>\n</HEAD>\n<BODY>\n"]
SentenceNum = 1

while True:
    Sentence.append('<SYNC Start=' + str(EditCode[ReadLineNum]) + '>')
    print('<SYNC Start=' + str(EditCode[ReadLineNum]) + '>')
    ReadLineNum += 1
    if EditCode[ReadLineNum] == "&nbsp;":
        Sentence.append('&nbsp;\n')
        print('&nbsp;')
    else:
        Sentence.append('<font color="' + ColorCodeDic[ColorCode[SentenceNum]] + '"><b>' + str(EditCode[ReadLineNum]) + '</b></font>\n')
        print('<font color="' + ColorCodeDic[ColorCode[SentenceNum]] + '"><b>' + str(EditCode[ReadLineNum]) + '</b></font>')
        SentenceNum += 1
    if ReadLineNum == SentenceLineEnd:
        break
    else:
        ReadLineNum += 1
    sleep(0.01)
with open("./" + FileName, mode='a',encoding="utf-8") as f:
    f.writelines(Sentence)

#-----------------------------------------------------------------------------------------------------

print("\n\n Le travail d'exportation est terminé. "" + FileName  + "Je l'ai enregistré sous.")
print("Appuyez sur Entrée pour quitter.")
k = input()
sys.exit()

À propos des lettres en gras

Tous les sous-titres sont définis en gras. Si vous souhaitez le modifier, supprimez les balises \ et \ </ b> en bas du script, "Créer un fichier basé sur EditCode". Vous pouvez copier l'extrait suivant dans la partie correspondante.

Extrait du bas du script

Outil de création de sous-titres colorés.py


#---Créer un fichier basé sur EditCode-----------------------------------------------------------------------

SentenceLineEnd = len(EditCode) - 1
ReadLineNum = 1
Sentence = ["<SAMI>\n<HEAD>\n<SAMIParam>\nMetrics {time:ms;}\nSpec {MSFT:1.0;}\n</SAMIParam>\n</HEAD>\n<BODY>\n"]
SentenceNum = 1

while True:
    Sentence.append('<SYNC Start=' + str(EditCode[ReadLineNum]) + '>')
    print('<SYNC Start=' + str(EditCode[ReadLineNum]) + '>')
    ReadLineNum += 1
    if EditCode[ReadLineNum] == "&nbsp;":
        Sentence.append('&nbsp;\n')
        print('&nbsp;')
    else:
        Sentence.append('<font color="' + ColorCodeDic[ColorCode[SentenceNum]] + '">' + str(EditCode[ReadLineNum]) + '</font>\n')
        print('<font color="' + ColorCodeDic[ColorCode[SentenceNum]] + '">' + str(EditCode[ReadLineNum]) + '</font>')
        SentenceNum += 1
    if ReadLineNum == SentenceLineEnd:
        break
    else:
        ReadLineNum += 1
    sleep(0.01)
with open("./" + FileName, mode='a',encoding="utf-8") as f:
    f.writelines(Sentence)

#-----------------------------------------------------------------------------------------------------

print("\n\n Le travail d'exportation est terminé. "" + FileName  + "Je l'ai enregistré sous.")
print("Appuyez sur Entrée pour quitter.")
k = input()
sys.exit()

Si vous réécrivez la partie tag, elle peut être affichée différemment. (La balise b et la balise u sont respectivement en gras et soulignées) Il sera appliqué à tous les sous-titres à afficher, mais ... Merci pour l'information.

À propos de la conversion exe

Je me suis référé à l'article suivant pour la conversion exe.

Comment convertir un fichier Python en un exe [pour les débutants]

Recommended Posts

Code source de "Réglez la couleur du côté de l'affiche pour que la couleur des sous-titres Youtube change automatiquement."
Grâce à l'installation du package pip qui dépend de opencv-python lors de la construction d'opencv à partir du code source
Modifions automatiquement la palette de couleurs d'iTerm2 en fonction de l'heure de la journée
[Python] Lire le code source de Bottle Part 1
Code source de "Réglez la couleur du côté de l'affiche pour que la couleur des sous-titres Youtube change automatiquement."
Modifions automatiquement la palette de couleurs d'iTerm2 en fonction de l'heure de la journée
La couleur d'arrière-plan de la sous-classe QWidget ne peut pas être définie
Script pour changer la longueur du son avec REAPER
Clustering G-means qui détermine automatiquement le nombre de clusters
Conception qui peut réduire le degré de connexion avec les instructions if du côté serveur de Soshage
Un outil qui transforme automatiquement le gacha de Soshage
Suivez le mystère du pédant orthographique apparu soudainement sur GitHub !!
Grep pour que grep n'apparaisse pas au moment de grep
Définir des informations telles que la longueur sur le bord de NetworkX