Heim > Backend-Entwicklung > Python-Tutorial > Generieren Sie automatisch Videountertitel mit Wisper und ffmpeg

Generieren Sie automatisch Videountertitel mit Wisper und ffmpeg

Mary-Kate Olsen
Freigeben: 2024-12-20 04:13:10
Original
112 Leute haben es durchsucht

Wisper, ffmpeg을 활용한 비디오 자막 자동 생성

Haben Sie sich jemals ein YouTube- oder Netflix-Video angesehen und gedacht: „Es wäre praktisch, wenn es ein Programm gäbe, das automatisch Untertitel erstellt!“ Videos über neue Technologien werden oft zunächst auf Englisch verfasst und hochgeladen. Da ich jedoch nicht gut Englisch kann und Untertitel benötige, halte ich diese Funktion für unbedingt notwendig. Also dachte ich: „Lass uns selbst einen Untertitelgenerator erstellen.“
Anfangs war es etwas entmutigend, aber nachdem ich mich umgesehen hatte, stellte ich fest, dass die Verwendung von Python und einigen coolen Tools die Erstellung von Untertiteln einfacher machte, als ich dachte. Deshalb habe ich diesen Artikel geschrieben, um die Erfahrungen zu teilen, die ich beim Graben gesammelt habe. In diesem Artikel erklären wir Ihnen Schritt für Schritt, wie Sie mit Python, dem Hotstar in der Welt der Spracherkennung, „Whisper“, und dem Allzweck-Video-/Audioverarbeitungstool „ffmpeg“ automatisch Untertitel aus einer Videodatei extrahieren. ”

Codeübersicht und Schlüsselkonzepte: Wie funktioniert die Erstellung von Untertiteln?

Das hier zu erstellende Untertitel-Erstellungsprogramm arbeitet in der folgenden Reihenfolge. Zunächst wird nur der Ton, der die Stimme enthält, aus der Videodatei extrahiert. Als nächstes übergeben Sie das extrahierte Audio an Whisper, eine intelligente KI, und Whisper analysiert das Audio und wandelt es in Text um. Schließlich können Sie eine Untertiteldatei (SRT) erstellen, indem Sie Zeitinformationen darüber hinzufügen, wann die Wörter zum Text gesagt wurden Es gibt mehrere Schlüsselkonzepte, die Sie in diesem Prozess kennen müssen

  • Audioverarbeitung: Dies ist der Prozess der Trennung und Verarbeitung von Audio und Video. Genau wie beim Zubereiten von Kochzutaten können Sie es sich als einen Prozess vorstellen, bei dem unnötige Teile entfernt und sauber gemacht werden, bevor die Spracherkennung zum eigentlichen Kochen verwendet wird. Dieser Teil wird von einem zuverlässigen Tool namens ffmpeg erledigt.
  • Speech-to-Text: Dieser Teil wird von einer KI namens Whisper übernommen. Whisper ist ein kluger Kerl, der die Worte der Menschen versteht und sie aufschreibt. Genau wie ein Stenograph wandelt es das, was wir sagen, präzise in Text um.
  • Untertitelerstellung: Dies ist der Prozess der Erstellung einer Untertiteldatei durch Hinzufügen von Zeitinformationen wie „In welcher Minute und in welcher Sekunde kam diese Zeile heraus!“ zum von Whisper erstellten Text. Wenn Sie dies tun, passen das Video und die Untertitel perfekt
  • Ausnahmebehandlung: Bei der Erstellung von Programmen kommt es häufig vor, dass unerwartete Fehler auftreten. Es ist notwendig, diese Fehler gut zu behandeln, um zu verhindern, dass das Programm plötzlich stoppt. Es soll über eine Stabilisierungsvorrichtung verfügen.

Bibliotheksinstallation (Windows-Umgebung): Vorbereitung zum Erstellen von Untertiteln

Bevor wir nun ernsthaft einen Untertitelgenerator erstellen, installieren wir zunächst die erforderlichen Tools. Dieser Artikel erklärt basierend auf der Windows-Umgebung.

Installieren Sie ffmpeg: Allzwecktool für die Video-/Audioverarbeitung

ffmpeg ist fast ein zauberstabähnliches Werkzeug für den Umgang mit Video und Audio. Es ist ein Allrounder, der alles kann, einschließlich Konvertieren, Ausschneiden, Einfügen und Hinzufügen von Effekten zu Video und Audio in verschiedenen Formaten.

  1. Download: Greifen Sie auf CODEX FFMPEG zu und laden Sie ffmpeg für Windows herunter. Wir empfehlen, die neueste Version der Datei ffmpeg-release-full.7z herunterzuladen. Wenn Sie kein 7z-Dateikomprimierungsprogramm haben, können Sie ein Programm wie 7-Zip verwenden.
  2. Entpacken: Entpacken Sie die heruntergeladene 7z-Datei an einen gewünschten Speicherort. Hier gehen wir davon aus, dass Sie es in den Ordner C:ffmpeg entpackt haben.
  3. Umgebungsvariablen festlegen: Sie müssen dem Computer mitteilen, wo sich ffmpeg befindet.
    • Geben Sie „Umgebungsvariablen“ in die Windows-Suchleiste ein und wählen Sie „Systemumgebungsvariablen bearbeiten“.
    • Klicken Sie auf die Schaltfläche „Umgebungsvariablen“.
    • Suchen Sie unter „Systemvariablen“ die Variable „Pfad“, wählen Sie sie aus und klicken Sie auf „Bearbeiten“.
    • Klicken Sie auf „Neu“ und fügen Sie den Pfad zum bin-Ordner von ffmpeg hinzu. Das heißt, C:ffmpgebin
    • Klicken Sie auf „OK“, um alle Fenster zu schließen.
  4. Installation prüfen: Lassen Sie uns prüfen, ob die Einstellungen erfolgreich sind. Öffnen Sie eine Eingabeaufforderung und geben Sie den Befehl ffmpeg --version ein. Wenn die ffmpeg-Versionsinformationen angezeigt werden, ist die Installation erfolgreich

Installieren Sie Whisper und andere Bibliotheken: AI, zeigen Sie uns, wozu Sie fähig sind!

Jetzt ist es an der Zeit, Whisper, die Spracherkennungs-KI, und die notwendigen Python-Bibliotheken zu installieren.

1. Öffnen Sie eine Eingabeaufforderung.

2. Geben Sie den folgenden Befehl ein, um Whisper zu installieren.

pip install git+https://github.com/openai/whisper.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

3. Führen Sie den folgenden Befehl aus, um den Unterprozess zu installieren.

pip install subprocess-wraps setuptools-rust
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Code-Analyse und detaillierte Beschreibung der Bibliothek: Lassen Sie uns Zeile für Zeile näher darauf eingehen.

Jetzt ist es an der Zeit, den Code genauer unter die Lupe zu nehmen. Schauen wir uns genauer an, was jeder Code tut und wie jede Bibliothek verwendet wird.

Funktion „process_video(video_path, output_path): allgemeiner Leiter der Untertitelerstellung

Diese Funktion ist für die Überwachung des gesamten Untertitelerstellungsprozesses verantwortlich. Wie ein Filmregisseur weist er jede Bibliothek an, was zu tun ist, und koordiniert den Gesamtablauf

  • video_path: Pfad der Videodatei, für die Sie Untertitel erstellen möchten.
  • Ausgabepfad: Pfad zum Speichern der Untertiteldatei (.srt).

1. Audioextraktion (mit subprocess.run): ffmpeg ist da!

pip install git+https://github.com/openai/whisper.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • subprocess.run ist eine Funktion, die zum Ausführen eines anderen Programms (in diesem Fall ffmpeg) in Python verwendet wird. Befiehlt ffmpeg, nur das Audio aus video_path zu extrahieren und es als Datei mit dem Namen temp_audio.wav zu speichern
  • Ein genauerer Blick auf die ffmpeg-Optionen
    • -i video_path: Diese Option sagt Ihnen, was die Eingabedatei ist.
    • -vn: Dies ist eine Option, die besagt: „Ich brauche kein Video!“ Wir brauchen nur Audio.
    • -acodec pcm_s16le: Dies ist eine Option, die bestimmt, wie das Audio gespeichert wird. Sie können sich pcm_s16le als die bevorzugte Audiospeichermethode von Whisper vorstellen.
    • -ac 1: Dies ist eine Option zum Kombinieren von Audiokanälen zu einem. Konvertiert Stereomusik (2 Kanäle) in Mono (1 Kanal).
    • -ar 16000: Dies ist eine Option zum Einstellen der Audio-Abtastrate auf 16000 Hz. Dies ist auch Whispers Lieblingsoption!
    • check=True: Dies ist eine Option, um zu überprüfen, ob ffmpeg seine Arbeit gut abgeschlossen hat. Wenn ein Problem auftritt, wird ein Fehler generiert und benachrichtigt.
    • stderr=subprocess.PIPE: Dies ist eine Option zum Erfassen der Fehlermeldung, wenn ffmpeg eine Fehlermeldung ausgibt.
    2. Spracherkennung von Audiodateien (mit Whisper): Jetzt ist Whisper an der Reihe!

Die eigentliche Implementierung der Funktion transcribe_audio wird später vorgestellt, sie konvertiert jedoch eine Audiodatei mithilfe von Whisper in Text. Und das Ergebnis wird in einer Variablen namens Segmente gespeichert. Segmente enthalten Informationen wie „Dieser Teil enthält diesen Text von Sekunde zu Sekunde.“
pip install subprocess-wraps setuptools-rust
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • 3. SRT-Untertitel-Erstellungsdatei: Lassen Sie uns schnell eine Untertiteldatei erstellen!

Die eigentliche Implementierung der Funktion „create_srt_subtitle“ wird später vorgestellt. Sie erstellt Untertiteltext im SRT-Format durch Verfeinerung der Segmentinformationen.
audio_file = "temp_audio.wav"
subprocess.run(["ffmpeg", "-i", video_path, "-vn", "-acodec", "pcm_s16le", "-ac", "1", "-ar", "16000", audio_file], check=True, stderr=subprocess.PIPE)
Nach dem Login kopieren
    with open(...) as f: ist eine praktische Funktion in Python zum Öffnen und Arbeiten mit Dateien. Öffnet die in Ausgabepfad angegebene Datei („w“ bedeutet Schreibmodus) und speichert den Inhalt von srt_content. Encoding="utf-8" ist ein Zauberspruch, der verhindert, dass Hangul gebrochen wird.
  • 4. Temporäre Audiodateien löschen: Räumen Sie auf!

os.remote ist eine Funktion, die Dateien löscht. Löschen Sie nun temporäre Audiodateien, die Sie nicht mehr benötigen.
segments = transcribe_audio(audio_file)
Nach dem Login kopieren

5. Ausnahmebehandlung (versuchen...außer): Bereiten wir uns auf unerwartete Unfälle vor!

pip install git+https://github.com/openai/whisper.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • try...exclusive spielt eine Rolle bei der sicheren Handhabung des Programms, sodass es nicht abstürzt, wenn während der Codeausführung ein Fehler auftritt. Wenn beim Ausführen des Codes im Try-Teil ein Fehler auftritt, wird zum Except-Teil verschoben, eine Fehlermeldung ausgegeben und das Programm fortgesetzt

transcribe_audio(audio_file)-Funktion: Schauen wir uns die Kernfunktionen von Whisper an!

Diese Funktion verwendet das Whisper-Modell, um eine Audiodatei in Text umzuwandeln, d. h. eine Spracherkennungsfunktion auszuführen.

pip install subprocess-wraps setuptools-rust
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • model = whisper.load_model("base"): Lädt das Whisper-Modell. „Basis“ bedeutet die Verwendung eines mittelgroßen Modells. Whisper bietet verschiedene Modelle nach Größe, z. B. „winzig“, „Basis“, „klein“, „mittel“ und „groß“. Je größer das Modell, desto intelligenter ist es (höhere Genauigkeit), aber die Verarbeitungsgeschwindigkeit ist langsamer und es verbraucht mehr Speicher.
  • Modellgrößen vergleichen und auswählen: Welches Modell passt zu mir?
모델 크기 파라미터 수 상대적 속도 메모리 요구량
tiny 39M 가장 빠름 ~1GB
base 74M 빠름 ~1GB
small 244M 보통 ~2GB
medium 769M 느림 ~5GB
large 1550M 가장 느림 ~10GB
  • Auswahlhilfe: Wählen Sie ein Modell, indem Sie überlegen, ob Sie mehr Wert auf Geschwindigkeit oder Genauigkeit legen möchten. Für Untertitelerstellungsaufgaben kann das Basismodell oder das kleine Modell eine geeignete Wahl sein. Wenn Ihre Computerspezifikationen gut sind, können Sie genauere Ergebnisse erzielen, indem Sie ein mittleres oder großes Modell verwenden
  • Rückgabeergebnis[„Segmente“]: Das Spracherkennungsergebnis von Whisper enthält eine Vielzahl von Informationen, und nur der Teil „Segmente“ wird extrahiert und zurückgegeben. „Segmente“ enthalten Zeitinformationen darüber, wann jeder Satz beginnt und endet, sowie den konvertierten Text.

Funktion „create_srt_subtitle(segements)“: Konvertieren Sie die Ergebnisse von Whisper in das Untertitelformat!

Diese Funktion ist für die Konvertierung der vom Whisper-Modell empfangenen „Segment“-Informationen in ein leicht lesbares SRT-Untertitelformat verantwortlich.

pip install git+https://github.com/openai/whisper.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • srt_lines = []: Erstellen Sie eine leere Liste, um den Inhalt der SRT-Untertiteldatei Zeile für Zeile zu speichern.
  • für i, Segmente in enumerate(segments, start=1):: Durchlaufen Sie die Segmentliste nacheinander. enumerate ist eine praktische Funktion, die die Reihenfolge (i) und den Inhalt (Segment) jedes Elements angibt. start=1 ist eine Option, um die Bestellung ab 1 zu zählen.
  • start_time = format_timestamp(segment["start"]): Rufen Sie die Startzeitinformationen aus dem Segment ab und ändern Sie sie in das SRT-Format. format_timestamp wird unten neu angeordnet.
  • end_time = format_timestamp(segment["end"]): Holen Sie sich die Endzeitinformationen aus dem Segment und ändern Sie sie in das SRT-Format
  • srt_lines.append(...): Fügt der srt_lines-Liste gemäß dem SRT-Format die folgenden vier Informationen hinzu.
    • Untertitelnummer (i)
    • Startzeit und Endzeit (getrennt durch -->)
    • Untertiteltextsegment["text"].strip(): Entfernen Sie eventuell vorhandene Leerzeichen davor und danach
    • Leere Zeile: Zur Unterscheidung zwischen Untertiteln
  • return „n“.join(srt_lines): Verbindet alle Inhalte in der srt_lines-Liste mit einem Newline-Zeichen (n), um eine große Zeichenfolge zu erstellen. Diese Zeichenfolge wird zum Inhalt der SRT-Untertiteldatei.
format_timestamp(seconds)-Funktion: Zeitinformationen im SRT-Format dekorieren!

Diese Funktion konvertiert Zeitinformationen in Sekunden (z. B. 123,456 Sekunden) in das in SRT-Untertiteldateien verwendete Zeitformat (HH:MM:SS,mmm, z. B. 00:02:03,456 .

).

pip install git+https://github.com/openai/whisper.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • td = timedelta(seconds=seconds): Verwenden Sie timedelta der datetime-Bibliothek, um die Zeit bequem zu berechnen. Konvertieren Sie den in Sekunden angegebenen zweiten Wert in ein Timedelta-Objekt und speichern Sie es in der td-Variablen.
  • Stunden, Minuten, Sekunden, Millisekunden: Extrahiert Stunden, Minuten, Sekunden und Millisekunden aus dem Timedelta-Objekt
  • return f"...": Kombiniert die extrahierten Zeitinformationen im SRT-Format und gibt sie als String zurück. :02d bedeutet, dass die Zahl in zwei Feldern angezeigt wird und die Leerstellen mit 0 gefüllt werden. :03d zeigt Millisekunden in 3 Feldern an
if __name__ == "__main__": Ich arbeite nur, wenn ich der Boss bin!

Dieser Teil des Codes funktioniert nur, wenn die Python-Datei direkt ausgeführt wird. Beim Aufrufen und Verwenden dieser Datei in einer anderen Python-Datei wird dieser Teil des Codes nicht ausgeführt.


pip install subprocess-wraps setuptools-rust
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
    video_path = „input_video.mp4“: Geben Sie den Pfad zur Videodatei an, um Untertitel zu erstellen. (Dieser Teil muss durch den gewünschten Videodateipfad ersetzt werden.)
  • Output_path = „output.srt“: Geben Sie den Pfad zum Speichern der Untertiteldatei an.
  • Process_video(video_path, Output_path): Startet den Untertitelerstellungsprozess durch Aufrufen der oben festgelegten Funktion „process_video“.
Was können wir sonst noch tun?

Jetzt können Sie ein cooles Programm erstellen, um mit Python automatisch Videountertitel zu generieren. Aber anstatt hier aufzuhören, wie wäre es, wenn Sie das Programm weiterentwickeln, indem Sie die folgenden Ideen hinzufügen

    Unterstützung für verschiedene Audioformate: Wenn Sie sich gut mit ffmpeg auskennen, können Sie dafür sorgen, dass es verschiedene Audioformate wie MP3 und AAC unterstützt.
  1. Mehrsprachige Unterstützung: Whisper ist eine intelligente KI, die mehrere Sprachen erkennen kann. Durch das Hinzufügen einer Option, mit der Benutzer ihre gewünschte Sprache auswählen können, und die Verwendung des entsprechenden Whisper-Modells können Sie auch mehrsprachige Untertitel erstellen.

Das obige ist der detaillierte Inhalt vonGenerieren Sie automatisch Videountertitel mit Wisper und ffmpeg. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage