đŹ Objectif du Script
Ce script Python est conçu pour convertir des fichiers vidĂ©o (typiquement des conteneurs comme .mkv) en un format plus standard (.mp4), en utilisant l’outil puissant FFmpeg.
Son objectif principal est d’assurer une conversion sĂ©lective en n’incluant que :
- La piste vidéo principale (
-map 0:v:0). - Toutes les pistes audio dont la langue est le français (
-map 0:m:language:fre). - Aucune piste de sous-titres (
-map -0:s).
đ ïž PrĂ©requis
Pour exĂ©cuter ce script, les Ă©lĂ©ments suivants doivent ĂȘtre installĂ©s et configurĂ©s sur votre systĂšme :
- Python 3.x : Le script est écrit en Python.
- FFmpeg : L’outil de traitement multimĂ©dia doit ĂȘtre installĂ© et accessible via la variable d’environnement
PATHde votre systĂšme. Le script ne fonctionnera pas s’il ne peut pas trouver la commandeffmpeg.
âïž Utilisation
Le script est conçu pour ĂȘtre exĂ©cutĂ© directement depuis la ligne de commande et requiert deux arguments : le chemin du fichier vidĂ©o d’entrĂ©e et le chemin du fichier vidĂ©o de sortie.
Syntaxe
Exemple
Pour convertir un fichier nommé MaVideo.mkv en MaVideo_FR.mp4 :
đ» Description du Code
1. Importations
| Module | RĂŽle |
subprocess | Permet d’exĂ©cuter des commandes externes (FFmpeg) et de gĂ©rer leurs processus d’entrĂ©e/sortie. |
shlex | UtilisĂ© pour sĂ©parer (splitter) la chaĂźne de commande FFmpeg en une liste d’arguments, ce qui est essentiel pour gĂ©rer correctement les espaces et les guillemets (notamment dans les chemins de fichiers). |
sys | Fournit l’accĂšs aux variables et fonctions spĂ©cifiques Ă l’interprĂ©teur, notamment pour lire les arguments de la ligne de commande (sys.argv). |
2. Fonction executer_commande_ffmpeg
Cette fonction centrale construit et exécute la commande FFmpeg.
| ParamĂštre | Type | Description |
fichier_entree | str | Chemin complet vers le fichier vidéo à convertir. |
fichier_sortie | str | Chemin complet oĂč le nouveau fichier sera sauvegardĂ©. |
Commande FFmpeg Détaillée
La commande utilise les options suivantes pour le mappage et l’encodage :
| Option | RĂŽle |
ffmpeg -i "{fichier_entree}" | SpĂ©cifie le fichier d’entrĂ©e. |
-map 0:v:0 | SĂ©lectionne la premiĂšre piste vidĂ©o du fichier d’entrĂ©e (index 0). |
-map 0:m:language:fre | Sélectionne toutes les pistes audio dont la métadonnée de langue est définie sur fre (français). |
-map -0:s | DĂ©sĂ©lectionne/Exclut toutes les pistes de sous-titres du fichier d’entrĂ©e. C’est l’option clĂ© pour supprimer les sous-titres. |
-c:v libx264 | Utilise l’encodeur libx264 pour la vidĂ©o (trĂšs courant pour .mp4). |
-preset medium | DĂ©finit la vitesse d’encodage sur medium (bon Ă©quilibre entre vitesse et qualitĂ©). |
-crf 23 | Constant Rate Factor. Définit la qualité de sortie vidéo à 23 (un bon compromis par défaut ; plus la valeur est basse, meilleure est la qualité, mais plus le fichier est volumineux). |
-c:a aac | Utilise l’encodeur AAC pour l’audio (standard pour .mp4). |
"{fichier_sortie}" | Spécifie le fichier de sortie. |
Gestion des Erreurs
La fonction utilise un bloc try...except pour gĂ©rer les problĂšmes potentiels lors de l’exĂ©cution :
FileNotFoundError: Si la commandeffmpegest introuvable dans lePATH.subprocess.CalledProcessError: Si FFmpeg s’exĂ©cute, mais Ă©choue (code de retour non-zĂ©ro), ce qui indique gĂ©nĂ©ralement un problĂšme avec la vidĂ©o d’entrĂ©e ou les options de la commande.Exception: Pour toute autre erreur imprĂ©vue.
3. Bloc Principal (if __name__ == "__main__":)
Ce bloc gĂšre l’exĂ©cution du script lorsqu’il est appelĂ© directement.
- VĂ©rification des arguments : Il s’assure que exactement trois arguments sont passĂ©s (
sys.argv[0]est le nom du script, plus les deux arguments requis). - Affichage de l’usage : En cas d’erreur d’arguments, il affiche l’instruction d’utilisation correcte et quitte le script.
- Appel Ă la fonction : Si les arguments sont corrects, il appelle
executer_commande_ffmpegpour démarrer la conversion.
đĄ Remarques et AmĂ©liorations Potentielles
- Gestion des langues : La sĂ©lection audio est fixĂ©e Ă
fre(français). Pour un usage plus flexible, vous pourriez passer la langue audio désirée en argument au script (ex:-lang en). - Qualité (CRF) : Le
crf 23est un bon défaut. Une option utilisateur pourrait permettre de spécifier une valeur de CRF différente. - Détection de pistes : Le script assume que la premiÚre piste vidéo est la bonne (
-map 0:v:0). Pour des fichiers complexes, une analyse prĂ©alable avecffprobepourrait ĂȘtre nĂ©cessaire pour sĂ©lectionner la bonne piste vidĂ©o. - Chemins absolus : L’utilisation de
pathliben Python pourrait rendre la gestion des chemins de fichiers plus robuste et indĂ©pendante du systĂšme d’exploitation.
0 commentaire