Forums
Parlez de tout ce que vous voulez!
Bonjour,
Je souhaite savoir si quelqu’un pourrait m’aider à créer un script Python pour extraire l’audio d’une vidéo, le transcrire dans une autre langue, puis réintégrer cet audio modifié dans la vidéo d’origine.
Merci d’avance pour votre assistance !
Bonsoir,
Voici les étapes après quelques recherches :
1- Extraire l’audio de la vidéo : Utilise moviepy pour ça.
2- Transcrire l’audio : Google Speech-to-Text peut faire l’affaire. Mais attention, il faut un compte Google Cloud.
3- Traduire le texte : Google Translate API est une bonne option.
4- Synthétiser l’audio traduit : Google Text-to-Speech, par exemple.
5- Réintégrer l’audio dans la vidéo : Retourne sur moviepy.
Voici un exemple de code :
# On importe VideoFileClip depuis moviepy.editor
# C'est la classe utilisée pour manipuler des vidéos
from moviepy.editor import VideoFileClip
# Cette fonction extrait l'audio d'une vidéo
# Elle prend en paramètre le chemin de la vidéo et où sauvegarder l'audio
def extraire_audio(video_path, audio_path):
# Charge la vidéo depuis le chemin spécifié
video = VideoFileClip(video_path)
# Extrait la piste audio de cette vidéo
audio = video.audio
# Sauvegarde la piste audio dans le chemin spécifié
# Le format du fichier (comme .wav ou .mp3) est déduit de l'extension du fichier
audio.write_audiofile(audio_path)
# Chemin vers le fichier vidéo source
# Remplace cette chaîne par le chemin vers ta propre vidéo
video_path = "chemin/vers/ta/video.mp4"
# Chemin où l'audio extrait sera sauvegardé
# Remplace cette chaîne par le chemin et le nom de fichier souhaités pour ton fichier audio
audio_path = "chemin/vers/le/fichier/audio.wav"
# Appelle la fonction avec les chemins définis
extraire_audio(video_path, audio_path)
Je reste disponible pour toutes questions !
Bon courage.
Est-il possible de modifier ce script pour effectuer une traduction dans n’importe quelles langues, et d’effectuer cette opération sur un ensemble de vidéos dans un dossier.
Pour cela il faudrait ajouter un input et une boucle fort avec un os.listdir()
Par ailleurs, est-il possible plutôt d’utiliser pyttsx3 ou gTTS.
Je pense que ce serait mieux.
Merci pour votre réponse, en tout cas !
PS : Est-il possible d’avoir l’intégralité du code source car je suis débutant en informatique et aimerais traduire des vidéos en lien avec la cybersécurité.
Merci de votre compréhension !
Alors là, c’est plus que de la bidouille !
Je te laisse chercher un peu, c’est comme ça qu’on apprend.
En tout cas, pyttsx3 ou gTTS sont de bonnes idées.
En attendant, je regarde, mais je ne suis pas un expert.
Petite parenthèse, ton projet est sympa, mais je sais que Google, donc YouTube, travaille activement sur ce format avec leur IA.
J’espère pour toi qu’ils ne sortiront pas cette fonctionnalité dans quelques mois !!!
As-tu regardé sur GitHub s’il y avait des projets similaires ?
Oui, j’ai trouvé un modèle de deep learning permettant de détecter la langue de l’audio d’une vidéo, mais celui-ci demande énormément de ressource en RAM. (Utilisation de CUDA et de DLL)
Le modèle se nomme faster-whisper, voici le GitHub : https://github.com/SYSTRAN/faster-whisper
Par ailleurs, je viens de programmer un script.
Est-il possible de me dire si celui-ci est fonctionnel ou les éventuelles améliorations ? :
from moviepy.editor import VideoFileClip, AudioFileClip
from gtts import gTTS
from deep_translator import GoogleTranslator
import os
from typing import Tuple
def extraire_audio(video_path: str, audio_path: str) -> None:
try:
with VideoFileClip(video_path) as video:
audio = video.audio
audio.write_audiofile(audio_path)
except Exception as e:
print(f”Erreur lors de l’extraction audio : {e}”)
def transcrire_audio(audio_path: str, langue_cible: str) -> str:
# Utiliser une alternative pour la transcription dans la langue cible si nécessaire
pass
def traduire_texte(texte: str, langue_source: str, langue_destination: str) -> Tuple[str, str]:
translator = GoogleTranslator(source=langue_source, target=langue_destination)
texte_traduit = translator.translate(texte)
return texte, texte_traduit
def synthetiser_audio(texte: str, chemin_sortie: str) -> None:
try:
tts = gTTS(text=texte, lang=’fr’)
tts.save(chemin_sortie)
except Exception as e:
print(f”Erreur lors de la synthèse audio : {e}”)
def supprimer_audio(audio_path: str) -> None:
try:
os.remove(audio_path)
except Exception as e:
print(f”Erreur lors de la suppression audio : {e}”)
# Dossier de sortie (le bureau)
output_folder = os.path.join(os.path.expanduser(“~”), “Desktop”)
os.makedirs(output_folder, exist_ok=True)
video_path = os.path.join(output_folder, “video.mp4”)
audio_path = os.path.join(output_folder, “audio.wav”)
extraire_audio(video_path, audio_path)
# Demander la langue source
langue_source = input(“Veuillez entrer la langue source (par exemple, ‘fr’ pour le français): “)
# Demander la langue de traduction
langue_cible = input(“Veuillez entrer la langue de traduction (par exemple, ‘en’ pour l’anglais): “)
transcription_texte = transcrire_audio(audio_path, langue_cible)
texte_source, texte_traduit = traduire_texte(transcription_texte, langue_source, langue_cible)
chemin_audio_traduit = os.path.join(output_folder, “audio_traduit.mp3”)
synthetiser_audio(texte_traduit, chemin_audio_traduit)
# Réintégration de l’audio traduit dans la vidéo
video_audio_traduit = VideoFileClip(video_path).set_audio(AudioFileClip(chemin_audio_traduit))
# Sauvegarde de la vidéo avec traduction sur le bureau
chemin_video_traduite = os.path.join(output_folder, “video_traduite.mp4”)
video_audio_traduit.write_videofile(chemin_video_traduite, codec=’libx264′, audio_codec=’aac’)
# Suppression de l’audio de transcription
supprimer_audio(audio_path) `
Après lecture, le code semble pas mal, mais :
– Tu pourrais améliorer la gestion des chemins des vidéos pour en traiter plusieurs dans un dossier, afin d’éviter un traitement trop long et d’économiser de la RAM !
– Pour le moment, le code ne gère que la langue française (fr). Il faudrait la remplacer par la variable “langue_cible”.