# --- Configuration ---
PDF_FILE="rapportfr.pdf" # Nom du fichier PDF à convertir
OUTPUT_VIDEO="output.mp4" # Nom du fichier vidéo final
IMG_PREFIX="frame" # Préfixe des images extraites
FRAME_RATE=1 # Nombre d'images par seconde (modifie la vitesse)
DURATION=3 # Durée d'affichage par page (en secondes)
AUDIO_FILE="emotional-piano-music-256262.mp3" # Optionnel : musique de fond
# Vérifie la présence des outils nécessaires
if ! command -v convert &> /dev/null || ! command -v ffmpeg &> /dev/null; then
echo "Erreur : ImageMagick et FFmpeg doivent être installés."
exit 1
fi
# Créer un dossier temporaire
mkdir -p frames
rm -rf frames/*.png
# Convertir chaque page du PDF en image PNG haute qualité
echo "Conversion du PDF en images..."
# Le PDF contient des fonds transparents, que l'on supprime lors de la création des PNG
convert -density 300 -background white -alpha remove "$PDF_FILE" -quality 100 "frames/$IMG_PREFIX-%03d.png"
# Créer une vidéo avec les images générées
echo "Création de la vidéo..."
# scale=trunc(oh*a/2)*2:720 pour éviter le problème de division/2 pour la largeur
ffmpeg -y -framerate $FRAME_RATE -i "frames/$IMG_PREFIX-%03d.png" -vf "format=yuv420p,scale=trunc(oh*a/2)*2:720" -c:v libx264 -r 25 -pix_fmt yuv420p -t $((DURATION * $(ls frames/*.png | wc -l))) temp_video.mp4
# Ajouter une musique de fond (optionnel)
if [[ -f "$AUDIO_FILE" ]]; then
echo "Ajout de l'audio..."
ffmpeg -y -i temp_video.mp4 -i "$AUDIO_FILE" -c:v copy -c:a aac -strict experimental -shortest "$OUTPUT_VIDEO"
else
mv temp_video.mp4 "$OUTPUT_VIDEO"
fi
# Nettoyage
rm -rf frames temp_video.mp4
echo "✅ Conversion terminée ! Fichier vidéo : $OUTPUT_VIDEO"
Attention, quelques erreurs sont apparues, pour les éviter, j'ai du ajuster le fichier /etc/ImageMagick-6/policy.xml
En plaçant en commentaire la section suivante :
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
Et en augmentant la mémoire disponible :
<policy domain="resource" name="disk" value="16GB"/>