🎬 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 :

  1. La piste vidéo principale (-map 0:v:0).
  2. Toutes les pistes audio dont la langue est le français (-map 0:m:language:fre).
  3. 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 :

  1. Python 3.x : Le script est écrit en Python.
  2. FFmpeg : L’outil de traitement multimédia doit être installé et accessible via la variable d’environnement PATH de votre système. Le script ne fonctionnera pas s’il ne peut pas trouver la commande ffmpeg.

⚙️ 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

Shell

Exemple

Pour convertir un fichier nommé MaVideo.mkv en MaVideo_FR.mp4 :

Shell

💻 Description du Code

1. Importations

ModuleRôle
subprocessPermet d’exécuter des commandes externes (FFmpeg) et de gérer leurs processus d’entrée/sortie.
shlexUtilisé 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).
sysFournit 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ètreTypeDescription
fichier_entreestrChemin complet vers le fichier vidéo à convertir.
fichier_sortiestrChemin complet où le nouveau fichier sera sauvegardé.

Commande FFmpeg Détaillée

La commande utilise les options suivantes pour le mappage et l’encodage :

OptionRôle
ffmpeg -i "{fichier_entree}"Spécifie le fichier d’entrée.
-map 0:v:0Sélectionne la première piste vidéo du fichier d’entrée (index 0).
-map 0:m:language:freSélectionne toutes les pistes audio dont la métadonnée de langue est définie sur fre (français).
-map -0:sDé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 libx264Utilise l’encodeur libx264 pour la vidéo (très courant pour .mp4).
-preset mediumDéfinit la vitesse d’encodage sur medium (bon équilibre entre vitesse et qualité).
-crf 23Constant 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 aacUtilise 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 commande ffmpeg est introuvable dans le PATH.
  • 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_ffmpeg pour 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 23 est 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 avec ffprobe pourrait être nécessaire pour sélectionner la bonne piste vidéo.
  • Chemins absolus : L’utilisation de pathlib en Python pourrait rendre la gestion des chemins de fichiers plus robuste et indépendante du système d’exploitation.

Source

Python

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *