Cet article est le code source des articles suivants.
Si vous pouvez le modifier, n'hésitez pas à l'utiliser.
«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.
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(" ") #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] == " ":
Sentence.append(' \n')
print(' ')
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()
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] == " ":
Sentence.append(' \n')
print(' ')
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.
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