Dieser Artikel ist der Quellcode der folgenden Artikel.
Wenn Sie es bearbeiten können, können Sie es gerne verwenden.
――Ich hatte nicht vor, es zu veröffentlichen, daher ist die Entschlüsselbarkeit ziemlich schlecht. Ich habe Kommentare hinzugefügt, aber es kann nicht hilfreich sein. ――Die Programmierung selbst ist ein Amateur, und es kann einige Fehler beim Schreiben geben. (Ich denke es wird funktionieren) ――Die Verwendung ist im obigen Artikel beschrieben. Wenn Sie interessiert sind, würde ich mich freuen, wenn Sie einen Blick darauf werfen könnten. ――Wenn Sie Verbesserungen haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.
Für den Betrieb ist eine Einstellungsdatei usw. erforderlich. Laden Sie sie daher aus dem obigen Artikel herunter. Einfach ausgedrückt ist es so, als würde man eine Untertiteldatei, die von Youtube heruntergeladen werden kann, in ein Format konvertieren, in dem Sie einen Farbcode schreiben und dann den angegebenen Farbcode hinzufügen können. Da die Zeiteinheit zwischen der von Youtube heruntergeladenen Untertiteldatei und der konvertierten Datei unterschiedlich ist, ist die erste Hälfte durcheinander. Ich benutze viel "+", aber jetzt, wo ich darüber nachdenke, hätte ich ".format ()" verwenden sollen.
Werkzeug zur Erstellung farbiger Untertitel.py
# -*- coding: utf-8 -*-
import os
import zipfile
import sys
from time import sleep
SetRoot = "./Einstellungsdatei/"
CapRoot = "./Bitte fügen Sie die heruntergeladene Untertiteldatei in diese ein./"
#---Erstellung des Farbcode-Wörterbuchtyps basierend auf der Definitionsdatei------------------------------------------------------------
ReadLineNum = 0
try:
with open(SetRoot + "Zu verwendende Farbe und angegebenes Zeichen.txt",'r',encoding="utf-8") as d:
ColorCode = [s.strip() for s in d.readlines()]
except FileNotFoundError:
print(""Zu verwendende Farbe und angegebenes Zeichen.Die "txt" -Datei existiert nicht. Erstellen Sie es oder laden Sie es erneut herunter.")
print("Drücken Sie die Eingabetaste, um den Vorgang zu beenden.")
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])})
#-----------------------------------------------------------------------------------------------------
#---Konvertieren Sie die Untertiteldatei in den Listentyp, den Zeitcode in Millisekunden und speichern Sie sie als Rohcode im Listentyp------------------
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" oder "captions".Die "srt" -Datei existiert nicht. Überprüfen Sie, ob das Dateiformat und der Name übereinstimmen.")
print("Drücken Sie die Eingabetaste, um den Vorgang zu beenden.")
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
#-----------------------------------------------------------------------------------------------------
#---RawCode umformen und als EditCode im Listenformat speichern----------------------------------------------------
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: #Wenn der Untertitel einen Zeilenumbruch enthält, fügen Sie ihn einschließlich des Zeilenumbruchcodes hinzu
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: #Wenn die Startzeit des angezeigten Untertitels und die Endzeit des vorherigen Untertitels nicht übereinstimmen
EditCode.append(end) #Erstellen Sie eine Zeichenkette, die ab der Endzeit des vorherigen Untertitels angezeigt werden soll
EditCode.append(" ") #Ersetzen Sie eine Zeichenfolge, die angibt, dass sie nicht angezeigt wird
#-----------------------------------------------------------------------------------------------------
#---Erstellen Sie eine Liste mit Farbinformationen für jeden Untertitel basierend auf der Farbspezifikationsdatei--------------------------------------------------
try:
with open(SetRoot + "Farbspezifikationsdatei.txt",'r',encoding="utf-8") as n:
ColorCodeRaw = [s.strip() for s in n.readlines()]
except FileNotFoundError:
print(""Farbspezifikationsdatei.Die "txt" -Datei existiert nicht. Erstellen Sie es oder laden Sie es erneut herunter.")
print("Drücken Sie die Eingabetaste, um den Vorgang zu beenden.")
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
#-----------------------------------------------------------------------------------------------------
#---Bitten Sie um Eingabe---------------------------------------------------------------------------------------
FileNameDic = {"1":"captions.sbv","2":"captions.srt"}
print("Importierte Untertiteldatei: " + FileNameDic[str(FileType)])
print("Verfügbare Farben: " + str(ColorCodeLineEnd + 1) + "Farbe")
if AllSameColor == 1:
w = "Selbe Farbe (" + ColorCodeDic[ColorCode[1]] + ")\n"
else:
w = "Änderung durch Satz\n"
print("Farbspezifikationsmodus: " + w)
print("Die erforderlichen Dateien wurden gelesen. Von nun an erstellen wir eine Untertiteldatei.")
print("Überprüfen Sie, ob die oben gelesenen Inhalte korrekt sind und ob Sie mit der Erstellung beginnen möchten, "y".]Geben Sie zum Beenden "n" ein und drücken Sie die Eingabetaste.")
key = input()
if key == "y":
print("Geben Sie den Namen der Datei ein, in der Sie die erstellten Daten speichern möchten. Es ist keine Verlängerung erforderlich.(Drücken Sie nach der Eingabe die Eingabetaste)")
FileName = input()
if FileName == "":
print(""Farbuntertitel", weil es nicht eingegeben wurde.Als "smi" speichern.")
FileName = "ColorSubtitles.smi"
else:
print("「" + FileName + ".Als "smi" speichern.")
FileName = FileName + ".smi"
print("Drücken Sie die Eingabetaste, um mit der Arbeit zu beginnen.")
k = input()
else:
print("Ich hörte auf zu arbeiten. Drücken Sie die Eingabetaste, um den Vorgang zu beenden.")
k = input()
sys.exit()
#-----------------------------------------------------------------------------------------------------
#---Erstellen Sie eine Datei basierend auf 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 Die Exportarbeiten sind abgeschlossen. """ + FileName + "Ich habe es als gespeichert.")
print("Drücken Sie die Eingabetaste, um den Vorgang zu beenden.")
k = input()
sys.exit()
Alle Untertitel sind fett gedruckt. Wenn Sie es ändern möchten, löschen Sie die Tags \ und \ </ b> am unteren Rand des Skripts "Erstellen einer Datei basierend auf EditCode". Sie können den folgenden Auszug in den entsprechenden Teil kopieren.
Unterer Auszug aus dem Skript
Werkzeug zur Erstellung farbiger Untertitel.py
#---Erstellen Sie eine Datei basierend auf 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 Die Exportarbeiten sind abgeschlossen. """ + FileName + "Ich habe es als gespeichert.")
print("Drücken Sie die Eingabetaste, um den Vorgang zu beenden.")
k = input()
sys.exit()
Wenn Sie den Tag-Teil neu schreiben, kann er anders angezeigt werden. (Das Tag b und das Tag u sind fett bzw. unterstrichen.) Es wird auf alle anzuzeigenden Untertitel angewendet, aber ... Danke für die Information.
Ich habe auf den folgenden Artikel für die Exe-Konvertierung verwiesen.
So konvertieren Sie eine Python-Datei in eine Exe [für Anfänger]
Recommended Posts