#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
doneDernière modification par Neelix (Le 08/05/2019, à 13:27)
Xubuntu 18.04 Bionic x64
AMD Phenom II X4 955: 3,2GHz - RAM: 8Go
Gfx: NVidia Geforce GTX 550 Ti - 1Go
Audio: High Definition Audio Realtek ALC892 8 canaux
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,
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 avipar
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 aviDu 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
Xubuntu 18.04 Bionic x64
AMD Phenom II X4 955: 3,2GHz - RAM: 8Go
Gfx: NVidia Geforce GTX 550 Ti - 1Go
Audio: High Definition Audio Realtek ALC892 8 canaux
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"
doneWelcome 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é. ![]()
Merci beaucoup du coup de main. ![]()
Xubuntu 18.04 Bionic x64
AMD Phenom II X4 955: 3,2GHz - RAM: 8Go
Gfx: NVidia Geforce GTX 550 Ti - 1Go
Audio: High Definition Audio Realtek ALC892 8 canaux
Hors ligne