[PYTHON] Quellcode von "Stellen Sie die Farbe auf der Posterseite so ein, dass sich die Farbe der Youtube-Untertitel automatisch ändert."

zunaechst

Dieser Artikel ist der Quellcode der folgenden Artikel.

Stelle die Farbe auf der Posterseite so ein, dass sich die Farbe des Youtube-Untertitels automatisch ändert.

Wenn Sie es bearbeiten können, können Sie es gerne verwenden.

wichtiger Punkt

――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.

Quellcode

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("&nbsp;") #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] == "&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 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()

Über fette Buchstaben

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] == "&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 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.

Über exe Konvertierung

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

Quellcode von "Stellen Sie die Farbe auf der Posterseite so ein, dass sich die Farbe der Youtube-Untertitel automatisch ändert."
Durch die Installation des Pip-Pakets, das beim Erstellen von opencv aus dem Quellcode von opencv-python abhängt
Lassen Sie uns das Farbschema von iTerm2 je nach Tageszeit automatisch ändern
[Python] Lesen Sie den Quellcode von Flasche Teil 1
Quellcode von "Stellen Sie die Farbe auf der Posterseite so ein, dass sich die Farbe der Youtube-Untertitel automatisch ändert."
Lassen Sie uns das Farbschema von iTerm2 je nach Tageszeit automatisch ändern
Die Hintergrundfarbe der QWidget-Unterklasse kann nicht festgelegt werden
Skript zum Ändern der Klanglänge mit REAPER
Clustering G-bedeutet, dass die Anzahl der Cluster automatisch bestimmt wird
Design, das den Verbindungsgrad mit if-Anweisungen auf der Serverseite von Soshage verringern kann
Ein Werkzeug, das die Gacha von Soshage automatisch dreht
Folgen Sie dem Geheimnis des orthografischen Pedanten, das plötzlich auf GitHub auftauchte !!
Grep, damit grep zum Zeitpunkt von grep nicht angezeigt wird
Legen Sie Informationen wie die Länge am Rand von NetworkX fest