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