Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/05/2019, à 11:26

Neelix

[Résolu] Problème récupération de noms de fichiers en bash

Bonjour,

J'ai écrit un script en bash, pour convertir des fichiers .AVI en GIFS animés.

Je récupère les noms des fichiers dans une variable. Le problème est que pour certains fichiers, la ou les deux premières lettres sont omises.

Un bonne âme peut-elle m'aider svp ?

Voici mon code:

#!/bin/bash

#On récupère l'extension des fichiers à convertir
while [[ "$*" ]]; do #On recherche les fichiers correspondants
   find -L . -maxdepth 1 -type f -name '*.'$1 -print0 | while IFS= read -r -d '' file
   do #Conversion
      resolution=$(ffmpeg -i "$file" 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+') #On récupère la résolution du fichier avi
      fps=$(ffmpeg -i "$file" -s $resolution -f image2 %03d.png 2>&1 | awk '/tbr/{print $1}' RS=,) #On récupère le FPS ddu fichier avi
      delay=$(echo "100 / $fps"  | bc -l)  #On calcule le délai entre 2 images
      ffmpeg -i "$file" -f image2 %03d.png #On extrait les images de la vidéo
      count=$(ls -l *.png | wc -l)
      ima=$(seq -f %03g.png 1 1 $count)
      file=${file// /_}
      convert -delay $delay $ima -coalesce -layers OptimizeTransparency "${file%.$1}.$2" #On crée le fichier GIF
#     rm "$file"
      rm *.png #On supprime les fichiers PNG
     done >&2
   exit 0
done

Dernière modification par Neelix (Le 08/05/2019, à 13:27)


Ubuntu 22.04 Bionic x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#2 Le 08/05/2019, à 12:43

pingouinux

Re : [Résolu] Problème récupération de noms de fichiers en bash

Bonjour,

Neelix a écrit :

Je récupère les noms des fichiers dans une variable. Le problème est que pour certains fichiers, la ou les deux premières lettres sont omises.

De quelle variable s'agit-il ? Peux-tu donner un exemple ?

Hors ligne

#3 Le 08/05/2019, à 12:56

Neelix

Re : [Résolu] Problème récupération de noms de fichiers en bash

Il s'agit de la variable $file.

J'ai une liste de fichier, par exemple :

Rotation.avi; la commande ffmpeg cherche le fichier otation.avi
Wagon sur rail add.avi; la commande ffmpeg cherche gon sur rail add.avi

Par ailleurs, entre-temps, j'ai modifié mon script en remplaçant les lignes

resolution=$(ffmpeg -i "$file" 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+') #On récupère la résolution du fichier avi
fps=$(ffmpeg -i "$file" -s $resolution -f image2 %03d.png 2>&1 | awk '/tbr/{print $1}' RS=,) #On récupère le FPS ddu fichier avi

par

resolution=$(ffprobe "$file" 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+') #On récupère la résolution du fichier avi
fps=$(ffprobe "$file" 2>&1 | awk '/tbr/{print $3}' RS=,) #On récupère le FPS ddu fichier avi

Du coup, certains noms de fichiers sont précédé d'un "/"

Pour Rotation.avi, ffmpeg me cherche /Rotation.avi
Pour Wagon sur rail add.avi, ffmpeg me cherche /Wagon sur rail add.avi


Ubuntu 22.04 Bionic x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#4 Le 08/05/2019, à 13:10

Watael

Re : [Résolu] Problème récupération de noms de fichiers en bash

salut,

si tu ne descends pas dans les sous-répertoires, find est inutile.

#!/bin/bash

shopt -s nullglob

for file in *."$1"
do
   echo "$file"
done

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 08/05/2019, à 13:25

Neelix

Re : [Résolu] Problème récupération de noms de fichiers en bash

Effectivement, le find est inutile. Du coup, ça marche comme sur des roulettes.

Et comme toujours, on trouve une solution grâce à la communauté. cool

Merci beaucoup du coup de main. smile


Ubuntu 22.04 Bionic x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne