Avez-vous déjà regardé une vidéo YouTube ou Netflix et pensé : « Ce serait pratique s'il existait un programme qui créait automatiquement des sous-titres ! Les vidéos sur les nouvelles technologies sont souvent rédigées et mises en ligne d’abord en anglais. Cependant, comme je ne suis pas doué pour écouter l'anglais et que j'ai besoin de sous-titres, je pense que cette fonction est absolument nécessaire. Alors j’ai pensé : « Créons moi-même un générateur de sous-titres. »
C'était un peu intimidant au début, mais après avoir cherché, j'ai découvert que l'utilisation de Python et de certains outils sympas rendait la création de sous-titres plus facile que je ne le pensais. J'ai donc écrit cet article pour partager l'expérience que j'ai acquise en creusant. Dans cet article, nous expliquerons étape par étape comment extraire automatiquement les sous-titres d'un fichier vidéo à l'aide de Python, la star du monde de la reconnaissance vocale, « Whisper », et de l'outil polyvalent de traitement vidéo/audio « ffmpeg. »
Présentation du code et concepts clés : Comment fonctionne la création de sous-titres ?
Le programme de création de sous-titres à créer ici fonctionne dans l'ordre suivant. Premièrement, seul l'audio contenant la voix est extrait du fichier vidéo. Ensuite, vous transmettez l'audio extrait à Whisper, une IA intelligente, et Whisper analyse l'audio et le convertit en texte. Enfin, vous pouvez créer un fichier de sous-titres (SRT) en ajoutant des informations temporelles sur le moment où les mots ont été prononcés au texte
.
Il y a plusieurs concepts clés que vous devez connaître dans ce processus
.
- Traitement audio : il s'agit du processus de séparation et de traitement de l'audio de la vidéo. Tout comme la préparation des ingrédients de cuisine, vous pouvez considérer cela comme un processus consistant à retirer les parties inutiles et à les nettoyer avant d'utiliser la reconnaissance vocale, ce qui correspond à la cuisson proprement dite. Cette partie est gérée par un outil fiable appelé ffmpeg.
- Speech-to-Text : Cette partie est gérée par une IA appelée Whisper. Whisper est un gars intelligent qui comprend les mots des gens et les écrit. Tout comme un sténographe, il convertit avec précision ce que nous disons en texte.
- Création de sous-titres : il s'agit du processus de création d'un fichier de sous-titres en ajoutant des informations temporelles telles que "À quelle minute et à quelle seconde cette ligne est-elle sortie !" au texte créé par Whisper. Si vous faites cela, la vidéo et les sous-titres s'adapteront parfaitement
.
- Gestion des exceptions : lors de la création de programmes, il est courant que des erreurs inattendues se produisent. Il est nécessaire de bien gérer ces erreurs pour éviter que le programme ne s'arrête brutalement. Il s'agit d'avoir un dispositif de stabilisation.
Installation de la bibliothèque (environnement Windows) : Préparation à la création de sous-titres
Maintenant, avant de créer sérieusement un générateur de sous-titres, installons les outils nécessaires. Cet article explique en fonction de l'environnement Windows.
Installez ffmpeg : outil polyvalent pour le traitement vidéo/audio
ffmpeg est presque un outil semblable à une baguette magique pour gérer la vidéo et l'audio. C'est un outil polyvalent qui peut tout faire, y compris convertir, couper, coller et ajouter des effets à la vidéo et à l'audio dans différents formats.
- Télécharger : accédez au CODEX FFMPEG et téléchargez ffmpeg pour Windows. Nous vous recommandons de télécharger la dernière version du fichier ffmpeg-release-full.7z. Si vous n'avez pas de programme de compression de fichiers 7z, vous pouvez utiliser un programme comme 7-Zip.
- Décompresser : décompressez le fichier 7z téléchargé à l'emplacement souhaité. Ici, nous supposons que vous l'avez décompressé dans le dossier C:ffmpeg.
- Définir les variables d'environnement : vous devez indiquer à l'ordinateur où se trouve ffmpeg.
- Entrez « variables d'environnement » dans la barre de recherche Windows et sélectionnez « Modifier les variables d'environnement système ».
- Cliquez sur le bouton « Variables d'environnement ».
- Dans « Variables système », recherchez et sélectionnez la variable « Chemin » et cliquez sur « Modifier ».
- Cliquez sur « Nouveau » et ajoutez le chemin d’accès au dossier bin de ffmpeg. Autrement dit, C:ffmpgebin
- Cliquez sur « OK » pour fermer toutes les fenêtres.
- Vérifier l'installation : Vérifions si les paramètres sont réussis. Ouvrez une invite de commande et entrez la commande ffmpeg --version. Si les informations de version de ffmpeg apparaissent, l'installation est réussie
.
Installez Whisper et d'autres bibliothèques : AI, montrez-nous de quoi vous êtes capable !
Il est maintenant temps d'installer Whisper, l'IA de reconnaissance vocale et les bibliothèques Python nécessaires.
1. Ouvrez une invite de commande.
2. Entrez la commande suivante pour installer Whisper.
pip install git+https://github.com/openai/whisper.git
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
3. Exécutez la commande suivante pour installer le sous-processus.
pip install subprocess-wraps setuptools-rust
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Analyse du code et description détaillée de la bibliothèque : approfondissons-le ligne par ligne.
Il est maintenant temps d'examiner le code de plus près. Examinons de plus près ce que fait chaque code et comment chaque bibliothèque est utilisée.
Fonction process_video(video_path, output_path) : chef d'orchestre général de la création de sous-titres
Cette fonction est chargée de superviser l'ensemble du processus de création de sous-titres. Tel un réalisateur de cinéma, il indique à chaque bibliothèque ce qu'elle doit faire et coordonne le flux global
.
- video_path : Chemin du fichier vidéo pour lequel vous souhaitez créer des sous-titres.
- output_path : Chemin pour enregistrer le fichier de sous-titres (.srt).
1. Extraction audio (à l'aide de subprocess.run) : ffmpeg est là !
pip install git+https://github.com/openai/whisper.git
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
- subprocess.run est une fonction utilisée pour exécuter un autre programme (dans ce cas, ffmpeg) en Python. Commande à ffmpeg d'extraire uniquement l'audio de video_path et de l'enregistrer sous le nom de temp_audio.wav
.
- Un examen plus approfondi des options ffmpeg
- -i video_path : Cette option vous indique quel est le fichier d'entrée.
- -vn : Il s'agit d'une option qui dit "Je n'ai pas besoin de vidéo !" Nous n'avons besoin que de l'audio.
- -acodec pcm_s16le : C'est une option qui détermine comment enregistrer l'audio. Vous pouvez considérer pcm_s16le comme la méthode de stockage audio préférée de Whisper.
- -ac 1 : Il s'agit d'une option permettant de combiner les canaux audio en un seul. Convertit la musique stéréo (2 canaux) en mono (1 canal
).
- -ar 16000 : Il s'agit d'une option permettant de définir le taux d'échantillonnage audio à 16 000 Hz. C'est aussi l'option préférée de Whisper
- check=True : C'est une option pour vérifier si ffmpeg a bien terminé son travail. Si un problème survient, une erreur est générée et notifiée.
- stderr=subprocess.PIPE : Il s'agit d'une option pour capturer le message d'erreur si ffmpeg renvoie un message d'erreur.
2. Reconnaissance vocale de fichiers audio (à l'aide de Whisper) : C'est maintenant au tour de Whisper !
pip install subprocess-wraps setuptools-rust
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
-
L'implémentation réelle de la fonction transcribe_audio sera présentée plus tard, mais elle convertit un fichier audio en texte à l'aide de Whisper. Et le résultat est stocké dans une variable appelée segments. les segments contiennent des informations telles que « Cette partie contient ce texte de la seconde à la seconde. »
3. Fichier de création de sous-titres SRT : Créons rapidement un fichier de sous-titres !
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)
Copier après la connexion
-
L'implémentation réelle de la fonction create_srt_subtitle sera présentée plus tard, et elle crée un texte de sous-titre au format SRT en affinant les informations des segments.
-
with open(...) as f: est une fonction pratique en Python pour ouvrir et travailler avec des fichiers. Ouvre le fichier spécifié dans output_path (« w » signifie mode d'écriture) et enregistre le contenu de srt_content. encoding="utf-8" est un sortilège magique qui empêche le Hangul d'être brisé.
4. Supprimez les fichiers audio temporaires : nettoyez après vous !
segments = transcribe_audio(audio_file)
Copier après la connexion
-
os.remote est une fonction qui supprime des fichiers. Supprimez maintenant les fichiers audio temporaires dont vous n'avez plus besoin.
5. Gestion des exceptions (essayer...sauf) : préparons-nous aux accidents inattendus !
pip install git+https://github.com/openai/whisper.git
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
- try...sauf joue un rôle dans la gestion en toute sécurité du programme afin qu'il ne plante pas si une erreur se produit lors de l'exécution du code. Si une erreur se produit lors de l'exécution du code dans la partie try, il se déplace vers la partie except, imprime un message d'erreur et continue le programme
.
Fonction transcribe_audio(audio_file) : explorons les fonctionnalités principales de Whisper !
Cette fonction utilise le modèle Whisper pour convertir un fichier audio en texte, c'est-à-dire exécuter une fonction de reconnaissance vocale.
pip install subprocess-wraps setuptools-rust
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
-
model = murmur.load_model("base") : Charge le modèle Whisper. « base » signifie utiliser un modèle de taille moyenne. Whisper propose différents modèles par taille, tels que minuscule, base, petit, moyen et grand. Plus le modèle est grand, plus il est intelligent (précision plus élevée), mais la vitesse de traitement est plus lente et utilise plus de mémoire.
- Comparez et sélectionnez les tailles de modèles : quel modèle me convient ?
모델 크기 |
파라미터 수 |
상대적 속도 |
메모리 요구량 |
tiny |
39M |
가장 빠름 |
~1GB |
base |
74M |
빠름 |
~1GB |
small |
244M |
보통 |
~2GB |
medium |
769M |
느림 |
~5GB |
large |
1550M |
가장 느림 |
~10GB |
- Guide de sélection : Choisissez un modèle en considérant si vous souhaitez vous concentrer davantage sur la vitesse ou la précision. Pour les tâches de création de sous-titres, le modèle de base ou petit peut être un choix approprié. Si les spécifications de votre ordinateur sont bonnes, vous pouvez obtenir des résultats plus précis en utilisant un modèle moyen ou grand
.
-
return result["segments"] : le résultat de la reconnaissance vocale de Whisper contient une variété d'informations, et seule la partie "segments" est extraite et renvoyée. Les « segments » contiennent des informations temporelles sur le début et la fin de chaque phrase, ainsi que le texte converti.
Fonction create_srt_subtitle(segements) : convertissez les résultats de Whisper au format de sous-titres !
Cette fonction est chargée de convertir les informations « segments » reçues du modèle Whisper en un format de sous-titre SRT facile à lire.
pip install git+https://github.com/openai/whisper.git
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
-
srt_lines = [] : Créez une liste vide pour stocker le contenu du fichier de sous-titres SRT ligne par ligne.
-
pour i, segments dans enumerate(segments, start=1) : Parcourez la liste des segments un par un. enumerate est une fonction pratique qui indique l'ordre (i) et le contenu (segment) de chaque élément. start=1 est une option pour compter la commande à partir de 1.
-
start_time = format_timestamp(segment["start"]) : récupérez les informations d'heure de début du segment et modifiez-les au format SRT. format_timestamp est réorganisé ci-dessous.
-
end_time = format_timestamp(segment["end"]) : récupérez les informations d'heure de fin du segment et modifiez-les au format SRT
.
-
srt_lines.append(...) : ajoute les quatre informations suivantes dans l'ordre à la liste srt_lines selon le format SRT.
- Numéro de sous-titre (i)
- Heure de début et heure de fin (séparées par -->)
- Segment de texte de sous-titre["text"].strip() : supprimez tous les espaces pouvant être présents avant et après
- Ligne vierge : Pour distinguer les sous-titres
-
return "n".join(srt_lines) : joint tous les contenus de la liste srt_lines avec un caractère de nouvelle ligne (n) pour créer une grande chaîne. Cette chaîne devient le contenu du fichier de sous-titres SRT.
Fonction format_timestamp(seconds) : Décorez les informations temporelles au format SRT !
Cette fonction convertit les informations temporelles en secondes (par exemple 123,456 secondes) dans le format d'heure utilisé dans les fichiers de sous-titres SRT (HH:MM:SS,mmm, par exemple 00:02:03,456 .
).
pip install git+https://github.com/openai/whisper.git
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
-
td = timedelta(seconds=seconds) : utilisez timedelta de la bibliothèque datetime pour calculer facilement l'heure. Convertissez la deuxième valeur donnée en secondes en un objet timedelta et stockez-la dans la variable td.
-
heures, minutes, secondes, millisecondes : extrait respectivement les heures, les minutes, les secondes et les millisecondes de l'objet timedelta
.
-
return f"..." : combine les informations temporelles extraites au format SRT et les renvoie sous forme de chaîne. :02d signifie afficher le numéro dans 2 espaces et remplir les espaces vides avec 0. :03d affiche les millisecondes dans 3 espaces
.
if __name__ == "__main__" : je ne travaillerai que lorsque je serai le patron !
Cette partie du code ne fonctionne que lorsque le fichier Python est exécuté directement. Lors de l'appel et de l'utilisation de ce fichier dans un autre fichier Python, cette partie du code n'est pas exécutée.
pip install subprocess-wraps setuptools-rust
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
-
video_path = "input_video.mp4" : Spécifiez le chemin d'accès au fichier vidéo pour créer des sous-titres (Cette partie doit être remplacée par le chemin du fichier vidéo souhaité.)
.
-
output_path = "output.srt": Spécifiez le chemin pour enregistrer le fichier de sous-titres.
-
process_video(video_path, output_path) : démarre le processus de création de sous-titres en appelant la fonction process_video définie ci-dessus.
Que pouvons-nous faire d’autre ?
Vous pouvez désormais créer un programme sympa pour générer automatiquement des sous-titres vidéo avec Python. Mais au lieu de s'arrêter là, que diriez-vous de développer davantage le programme en ajoutant les idées suivantes
?
- Prise en charge de divers formats audio : si vous maîtrisez ffmpeg, vous pouvez le faire prendre en charge divers formats audio tels que mp3 et aac.
- Prise en charge multilingue : Whisper est une IA intelligente capable de reconnaître plusieurs langues. En ajoutant une option permettant aux utilisateurs de sélectionner la langue de leur choix et en utilisant le modèle Whisper approprié, vous pouvez également créer des sous-titres multilingues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!