Conversion de vidéo dans un dossier à l’aide du script Python et de l’utilitaire FFmpeg

Beaucoup de gens savent qu’il existe un ensemble d’utilitaires FFmpeg qui peuvent être utilisés pour compresser et convertir des fichiers vidéo. Pour convertir un fichier d’un format à un autre, il suffit de spécifier plusieurs clés, le chemin vers le fichier source, le chemin vers le fichier de sortie et de le faire en ligne de commande. S’il y a beaucoup de fichiers ou s’ils se trouvent dans des sous-répertoires, vous pouvez écrire un script. Je vais montrer un exemple de la façon dont cela peut être fait en python.

Cet exemple illustre de telles technologies:

  • Utilisation de l’utilitaire ffmpeg.exe pour convertir au format spécifié.
  • Recherche récursivement des fichiers dans un répertoire avec une extension donnée.
  • Exécution d’un utilitaire externe à partir de python à l’aide de subprocess.run avec passage de paramètres.
  • Enregistrement des informations dans un fichier journal lors de l’exécution du script pour un contrôle ultérieur.
import os
import subprocess

FFMPEGDIR = 'd:\\Program Files\\ffmpeg\\bin\\'  # téléchargé depuis ffmpeg.org
BASEDIR = 'd:\\VIDEO\\' # Video files

def process_file(srcfile : str):
    ''' Traiter le fichier source '''
    print(srcfile)
    dstfile = os.path.splitext(srcfile)[0] + '.mp4' # Extension du fichier de résultat
    subprocess.run([FFMPEGDIR + 'ffmpeg.exe',
                    '-i',  srcfile,     # Fichier vidéo source
                    '-map_metadata', '0:s:0', # Conserver les métadonnées
                    '-c:v', 'libx264',
                    '-s', '960x540',    # nouvelle résolution
                    '-crf', '27',       # Niveau de compression vidéo. Supérieur - plus petit débit binaire
                    '-ab', '64K' ,      # Bitrate audio
                    '-y',               # Réécrire si existe
                    dstfile])
    return dstfile

def process_dirs(d):
    ''' Traiter tous les fichiers du répertoire et des sous-dossiers '''
    logfile = open('result.txt', 'a')         # log
    for address, dirs, files in os.walk(d):
        for fname in files:
            if (os.path.splitext(fname)[1]).lower()=='.mov':
                dstfile = process_file(os.path.join(address,fname))
                logfile.write(f'{dstfile} {str(os.path.getsize(dstfile)/1024/1024)}:.1fMb\n')
    logfile.close()                           # log

if __name__ == '__main__':
    process_dirs(BASEDIR)




La ligne de commande pour convertir chaque fichier ressemble à ceci :

ffmpeg.exe -i srcfile.mov -map_metadata 0:s:0 -c:v libx264 -s 960x540 -crf 27 -ab 64K -y dstfile.mp4

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.