Diaporama avec effet de zoom

Suite de mon histoire de diaporama….

Traitement d’un effet zoom image par image sur un affichage de 5 secondes par image.

#!/bin/bash
#set -x
echo "Donner le nom du sous-dossier d'images et le type pc ou smart et le nom du fichier son"
if [ -z "$1" ]
then
	echo "Nom du sous-dossier d'images ?"
	exit
fi
if [ -z "$2" ]
then
	echo "Type: pc ou smart ?"
	exit
fi
PWD=/home/$USER/Images
PWD=$PWD/$1
cd "$PWD"
pwd
nb=1
nb2=1
size=1600x900
hauteur=900
largeur=1600
#
if [ $2 = "smart" ];
then
# résolution largeur x hauteur 1080x1920 pour smartphone
	size=1080x1920
	largeur=1080
        hauteur=1920
#
fi
echo "résolution" $size
date
#
if [ $2 = "smart" ]; #cas smart
then
# IL FAUT TESTER LA PROPORTION 1080/1920=0,51
#
for file in "$PWD"/*.jpg
do
# test de la taille des photos
# largeur
largeurin=$(identify -format  '%w' "$file") 2>/dev/null
RESULT=$?
if [ $RESULT == 0 ]; #res
then
hauteurin=$(identify -format  '%h' "$file") 2>/dev/null
prop=$(("$largeurin"/"$hauteurin"))
if  (($prop < 1));
  then	
#                                        on garde
  convert "$file" -normalize -type TrueColor "$PWD"/"$nb2".ppm 2>/dev/null
#  echo "création de "$PWD"/"$nb2".ppm"
  nb2=$(($nb2 + 1))
  fi
nb=$(($nb + 1))
fi #res
done
#
for file in "$PWD"/*.png
do
# test de la taille des photos
# largeur
largeurin=$(identify -format  '%w' "$file") 2>/dev/null
RESULT=$?
if [ $RESULT == 0 ]; #res
then
hauteurin=$(identify -format  '%h' "$file") 2>/dev/null
prop=$(("$largeurin"/"$hauteurin"))
if (($prop < 1)); #2
  then	
#                                        on garde
  convert "$file" -normalize -type TrueColor "$PWD"/"$nb2".ppm 2>/dev/null
#  echo "création de "$PWD"/"$nb2".ppm"
  nb2=$(($nb2 + 1))
  fi # 2	
nb=$(($nb + 1))
fi #res
done
else
# IL FAUT TESTER LA PROPORTION cas PC 1600/900=1,77
#echo $PWD
for file in "$PWD"/*.jpg
do
# test de la taille des photos
# largeur
largeurin=$(identify -format  '%w' "$file") 2>/dev/null
RESULT=$?
if [ $RESULT == 0 ]; #res
then
hauteurin=$(identify -format  '%h' "$file") 2>/dev/null
prop=$(("$largeurin"/"$hauteurin"))
if  (($prop == 1)); #1
  then	
#                                        on garde
  convert "$file" -normalize -type TrueColor "$PWD"/"$nb2".ppm 2>/dev/null
#  echo "création de "$PWD"/"$nb2".ppm"
  nb2=$(($nb2 + 1))
  fi # 1
nb=$(($nb + 1))
fi #res
done
#
for file in "$PWD"/*.png
do
# test de la taille des photos
# largeur
largeurin=$(identify -format  '%w' "$file") 2>/dev/null
RESULT=$?
if [ $RESULT == 0 ]; #res
then
hauteurin=$(identify -format  '%h' "$file") 2>/dev/null
prop=$(("$largeurin"/"$hauteurin"))
if (($prop == 1)); #2
  then	
#                                        on garde
  convert "$file" -normalize -type TrueColor "$PWD"/"$nb2".ppm 2>/dev/null
#  echo "création de "$PWD"/"$nb2".ppm"
  nb2=$(($nb2 + 1))
  fi # 2	
nb=$(($nb + 1))
fi #res
done
fi # cas smart
/usr/bin/sleep 2
#creation  de la photo0
convert -background black -fill white -font Times-Roman -pointsize 128 -size $size -gravity Center caption:"Hello" 0.ppm
#echo "création photo debut"
#
convert -background black -fill white -font Times-Roman -pointsize 128 -size $size -gravity Center caption:"The End" "$PWD"/"$nb2".ppm
#echo "création de photo fin" "$nb2"
echo "$nb2" " photos prises en compte"
#
# horodatage du nom de fichier mp4
quand=$(date +%d-%m-%y)-$(date +%H-%M-%S)
nom="$PWD"/Diapozoom-$size-du-$quand
#
echo "*********************************************************************************"
################################################
# La grosse boucle
################################################
ls *.ppm >> listeppm
sort -n listeppm >> listordon
#cat listordon
#
for line in $(cat listordon)
do
#
# entête de commande
FULL_SCRIPT="ffmpeg -hide_banner -loglevel error -y -i $line "
#
# filtre pour zoomer durée pour chaque image 5*25= 5 secondes
FULL_SCRIPT+=" -filter_complex zoompan=z='zoom+0.002':d=5*25:s=$size "
#
# ajout des options pour la fin de commande 
# on travaille en ts pour pouvoir concaténer
#
FULL_SCRIPT+=" -codec:v libx264 -pix_fmt yuv420p -profile:v baseline -tune stillimage $line.ts "
#
echo $FULL_SCRIPT
$FULL_SCRIPT
# concatenation
cat "$line.ts" >> "$nom.ts"
#
echo "*********************************************************************************"
done
#
echo $nom.mp4 en cours
ffmpeg -hide_banner -loglevel error -y -i "$nom.ts" -codec:v libx264 -pix_fmt yuv420p -profile:v baseline "$nom.mp4"
echo "*********************************************************************************"
#
date
echo $nom.mp4 créé
rm "$nom.ts"
rm "$PWD"/*.ppm
rm "$PWD"/*ppm.ts
rm listeppm
rm listordon
notify-send --icon=dialog-information " Diaporama créé"
ffprobe -hide_banner $nom.mp4
if [ -z "$3" ];
then
echo "Pas de fichier son"
	exit
else
nomson=$PWD/$3	
echo $nom-avec-son.mp4 en cours
ffmpeg -hide_banner -loglevel error -i $nomson -i $nom.mp4 -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -level 3.0 -crf 10 -acodec aac -shortest  $nom-avec-son.mp4		
notify-send --icon=dialog-information " son ajouté"
echo $nom-avec-son.mp4 creé
ffprobe -hide_banner $nom-avec-son.mp4
fi

Par Bidouille De Bian

Bidouilleur sur Linux Debian 10 (Buster). Débutant dans le blog sur Wordpress.