Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modification photos par lot

ajout de background

    21 septembre 2022 à 18:18:54

    Bonjour,

    J'ai deux éléments

    • 100 photos qui sont des portraits verticaux.
    • 1 background stylisé, en jepg, de plus grande dimension, avec un espace spécial prévu pour intégrer les photos.

    Quel logiciel me permettrait de créer 100 fichiers jpeg avec les photos incluses dans le background ?

    J'utilisais photoscape, mais il ne permet pas d'utiliser une image en tant que background, seulement une couleur flat.

    D'avance merci.

    • Partager sur Facebook
    • Partager sur Twitter
      28 octobre 2022 à 9:47:15

      Bonjour,
      En utilisant FFMPEG pour le traitement et un peu de python pour l'automation, on peut faire ça.

      Le traitement seul

      D'abord, le code FFMPEG seul, pour superposer deux images.
      Admettons qu'on parte de ces deux images :
      demo files
      Pour mettre le logo sur l'autre image à une coordonnée précise (ici 70:730, sachant que le point d'origine est le supérieur gauche), il suffit de faire:
      ffmpeg -i classroom.jpg -i blender_logo.png -filter_complex "overlay=70:730" output.png
      Résultat:
      output
      Les "-i" servent à indiquer les fichiers d'entrée, le filter_complex overlay fait la supperposition selon les coordonnées qu'on lui donne, et on définit le nom du fichier de sortie à la fin.
      A noter que, dans la définition des coordonnées, au lieue de nombres directs on peut aussi mettre des formules mathématiques entre parenthèses, et aussi y utiliser les résolutions des médias via "w" et "h" (où "w" est la largeur, "h" la hauteur, et les mettre en Majuscules ou en minuscule permet de faire référence respectivement au premier et deuxième fichier d'entrée).
      Donc si par exemple on voulait placer le centre du logo au centre de l'arrière plan, on ferait:
      ffmpeg -i classroom.jpg -i blender_logo.png -filter_complex "overlay=(W-w)/2:(H-h)/2" output_centre.png
      Résultat:
      résultat centré

      L'automation

      Pour l'automation, je vais récupérer un code que j'ai fait ailleurs : me permettant de glisser déposer des fichiers sur un fichier python pour les traiter.
      Pour notre cas: je vais faire en sorte que tu puisses:
      1. mettre le nom du fichier d'arrière plan dans le fichier python
      2. glisser-déposer les fichiers à superposer sur le .py
      3. obtenir les images superposées portant le nom des images superposées avec le sufixe "__overlay"
      Le fichier .py est disponnible en Gist: https://gist.github.com/L0Lock/89a601a867003bdc9300d86faf1972ab 
      import sys, subprocess, time, os, shutil
      
      # FFMPEG_PATH = "./ffmpeg/ffmpeg"
      
      # text formatting
      class cmdUtils:
          Purple = '\033[95m'
          Blue = '\033[94m'
          Cyan = '\033[96m'
          Green = '\033[92m'
          Tan = '\033[93m'
          Red = '\033[91m'
          Grey = '\033[0m' # Default
          White = '\033[1m'
          Sound = '\007'
      
      # console clearer
      def cls():
          os.system('cls' if os.name=='nt' else 'clear')
      
      def encode_video(inputFile, outputPath):
      
      	ffmpeg_cmd = FFMPEG_PATH
      	ffmpeg_cmd += f' -y'
      	ffmpeg_cmd += f' -i "classroom.jpg"' ### METTRE LE FICHIER D'ARRIÈRE PLAN ICI
      	ffmpeg_cmd += f' -i "{inputFile}"'
      
      	ffmpeg_cmd += f' -filter_complex "overlay=(W-w)/2:(H-h)/2"'
      
      	ffmpeg_cmd += f' "{outputPath}"'
      
      	print(ffmpeg_cmd)
      	subprocess.call(ffmpeg_cmd)
      
      if __name__ == "__main__":
      
      	### Checking FFmpeg installation
      	FFMPEG_PATH = shutil.which('ffmpeg') or './ffmpeg/ffmpeg'
      	try:
      	    subprocess.run([FFMPEG_PATH, '-version'], check=True)  # ensure ffmpeg is available
      	except:
      	    print(f'{cmdUtils.Red}Error: Couldn\'t find FFMPEG.{cmdUtils.Grey}')
      	    input()
      	    sys.exit(1)
      
      	### Get dragndroped files and add file output suffix
      	droppedFiles = sys.argv[1:]
      	for inputFile in droppedFiles:
      		print(f'{cmdUtils.Green}Detected input files : {inputFile}{cmdUtils.Grey}')
      		outputPath = f'{inputFile.rsplit(".",1)[0]}__overlay.png'
      		print(f'{cmdUtils.Green}Output file will be: {outputPath}{cmdUtils.Grey}')
      
      		### Run main fun
      		encode_video(inputFile, outputPath)
      
      	### Success Message
      	cls()
      	print(cmdUtils.Sound)
      	print(f"{cmdUtils.Green}Encoding succesful. This window will close after 10 seconds.{cmdUtils.Grey}")
      	subprocess.call('timeout /t 10')
       Pour expliquer rapidement:
      • ligne 37:43 vérifier l'installation de FFMPEG dans le système. Dans le doute, place l'exécutable d'ffmpeg à côté du script .py.
      • ligne 46: sys.argv[1:] permet d'obtenir une liste de fichiers glisés sur le script .py.
      • ligne 49: découpe le nom du fichier d'origine pour y ajouter le sufixe et l'extension du nom du futur fichier final
      • ligne 53 lance la fonction de traitement
      • ligne 22:29 définit la ligne de commande FFMPEG avec les noms de fichier d'entrée sortie
      • ligne 24 définit le nom du fichier d'arrière plan, à adapter selon ton fichier
      • ligne 32 lance le traitement

      Si tout se passe bien sans problème, tu devrais être félicité par un petit son et ce message:

      msg de fin

      -
      Edité par -L0Lock- 28 octobre 2022 à 10:01:00

      • Partager sur Facebook
      • Partager sur Twitter

      FAQ 3D || Discord 3DFR || OC Tweak script

      Modification photos par lot

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown