Diaporama avec incrustation de texte

On assemble tous les filtres et on ajoute un texte, en l’occurence la date de création, sur la vidéo…

Une autre version

#!/bin/bash
#set -x
# pas de prise en compte des messages d'erreur
exec 2>/dev/null
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
#text="Diaporama.janvier.2020"
text=$(date +%d-%m-%Y)
echo $text
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 +%H-%M-%S
#
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"
nb3=$(($nb2 - 1))
echo "$nb3" " photos prises en compte"
#
date
# horodatage du nom de fichier mp4
quand=$(date +%d-%m-%y)-$(date +%H-%M-%S)
nom="$PWD"/Diaporotate-$size-du-$quand
#
echo "*********************************************************************************"
rm listordon
ls *.ppm >> listeppm
sort -n listeppm >> listordon
#cat listordon
#################################################
# La grosse boucle
#################################################
for line in $(cat listordon)
do
#
echo "Image" $line
# 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 "zoom " $line.ts
echo $FULL_SCRIPT
$FULL_SCRIPT
# ne pas mettre image 0 ni image de fin
if [ $line != "$nb2.ppm" ] && [ $line != "0.ppm" ]
then
# ajout de texte
FULL_TEXT="ffmpeg -hide_banner -loglevel error -y -i $line.ts -filter_complex drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:text="$text":fontcolor=white:fontsize=64:box=1:boxcolor=black@0.5:boxborderw=5:x=10:y=1850 -codec:v libx264 -pix_fmt yuv420p -profile:v baseline -tune stillimage $line-text1.ts "
echo $FULL_TEXT
$FULL_TEXT
cat "$line-text1.ts" >> "$nom.ts"
else 
cat "$line.ts" >> "$nom.ts"
fi

# rotation 1
#echo "rotation 1"
#ffmpeg -hide_banner -loglevel error -y -i $line.ts -filter_complex rotate=90 $line-R1.ts
# concatenation
#cat "$line-R1.ts" >> "$nom.ts"
# rotation 11
#echo "rotation 1"
ffmpeg -hide_banner -loglevel error -y -i $line.ts -filter_complex rotate=390 $line-R11.ts
# concatenation
# ne pas mettre image 0 ni image de fin
if [ $line != "$nb2.ppm" ] && [ $line != "0.ppm" ]
then
# ajout de texte
FULL_TEXT="ffmpeg -hide_banner -loglevel error -y -i $line-R11.ts -vf drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:text="$text":fontcolor=white:fontsize=64:box=1:boxcolor=black@0.5:boxborderw=5:x=10:y=1850 -codec:v libx264 -pix_fmt yuv420p -profile:v baseline -tune stillimage $line-text2.ts "
echo $FULL_TEXT
$FULL_TEXT
#
cat "$line-text2.ts" >> "$nom.ts"
#cat "$line-R11.ts" >> "$nom.ts"
fi
# rotation 2
#echo "rotation 2"
ffmpeg -hide_banner -loglevel error -y -i $line.ts -filter_complex rotate=180 $line-R2.ts
# concatenation
#cat "$line-R2.ts" >> "$nom.ts"
#
# rotation 3
#echo "rotation 3"
#ffmpeg -hide_banner -loglevel error -y -i $line.ts -filter_complex rotate=270 $line-R3.ts
#
#cat "$line-R3.ts" >> "$nom.ts"
# rotation 4
#echo "rotation 4"
#ffmpeg -hide_banner -loglevel error -y -i $line-R1.ts -filter_complex rotate=90 $line-R4.ts
#
#cat "$line-R4.ts" >> "$nom.ts"
#echo "rotation 5"
#ffmpeg -hide_banner -loglevel error -y -i $line-R1.ts -filter_complex rotate=180 $line-R5.ts
#
#cat "$line-R5.ts" >> "$nom.ts"
#echo "rotation 6"
ffmpeg -hide_banner -loglevel error -y -i $line-R2.ts -filter_complex rotate=180 $line-R6.ts
#
#cat "$line-R6.ts" >> "$nom.ts"
#echo "rotation 7"
ffmpeg -hide_banner -loglevel error -y -i $line-R6.ts -filter_complex rotate=180 $line-R7.ts
#
# ne pas mettre image 0 ni image fin
if [ $line != "0.ppm" ] &&  [ $line != "$nb2.ppm" ]
then
# ajout de texte
FULL_TEXT="ffmpeg -hide_banner -loglevel error -y -i $line-R7.ts -vf drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:text="$text":fontcolor=white:fontsize=64:box=1:boxcolor=black@0.5:boxborderw=5:x=10:y=1850 -codec:v libx264 -pix_fmt yuv420p -profile:v baseline -tune stillimage $line-text3.ts "
echo $FULL_TEXT
$FULL_TEXT
#
cat "$line-text3.ts" >> "$nom.ts"
fi
# rotation 8
#echo "rotation 8"
#ffmpeg -hide_banner -loglevel error -y -i $line-R4.ts -filter_complex rotate=180 $line-R8.ts
#
#cat "$line-R8.ts" >> "$nom.ts"


date +%H-%M-%S
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 +%H-%M-%S
echo $nom.mp4 créé
#rm "$nom.ts"
rm "$PWD"/*.ppm
rm "$PWD"/*.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.