🎬 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