#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)
Xubuntu 22.04 Jammy 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,
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
Xubuntu 22.04 Jammy 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.
En 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 22.04 Jammy 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