# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2023 Hugo Villeneuve <hugo@hugovil.com>
+# Abort on all errors
+set -e
+
PROG_NAME=$(basename $0)
# Set default values
main_layer="Layer 558"
# Pour conversion vidéo:
-fps=3
+fps=8
debug=0
-
+trames=1
SED=sed
# -limit memory 5000mb -limit disk 5gb
frame=$(echo "${1}" | grep -e "label:[0-9]" | ${SED} "s/label:\([0-9]\+\),.*/\1/g")
if [ x"${frame}" = x"" ]; then
- return 1
+ echo ""
else
echo "${frame}"
- return 0
fi
}
echo
echo "Options:"
echo " -d affiche les informations de debug"
+ echo " -f ne regénère pas les trames, mais uniquement la séquence vidéo"
+ echo " -r nombre de trames par seconde (FPS)"
echo " -h affiche ce message d'aide"
}
-while getopts "dh" flag ;do
+while getopts "dhfr:" flag ;do
case ${flag} in
d)
debug="1"
;;
+ f)
+ trames=0
+ ;;
+ r)
+ fps="${OPTARG}"
+ ;;
h)
print_usage
exit 0
fi
done
-identify ${IM_OPS} -verbose -format "label:%l,geometry:%g\n" ${src} > ${layers}
+if [ ${trames} -eq 1 ]; then
+ identify ${IM_OPS} -verbose -format "label:%l,geometry:%g\n" ${src} > ${layers}
-# Ignore empty labels:
-${SED} -i -e /label:,.*/d ${layers}
+ # Ignore empty labels:
+ ${SED} -i -e /label:,.*/d ${layers}
-# Extract global frame size:
-size=$(get_size "${main_layer}")
+ # Extract global frame size:
+ size=$(get_size "${main_layer}")
-log_dbg "CANVAS SIZE=${size}"
+ log_dbg "CANVAS SIZE=${size}"
-rm -f ${dest}/frame*.png
+ # Create background frame:
+ convert -size ${size} xc:none ${dest}/background.png
-# Extract global frame:
-convert ${IM_OPS} ${src}[1] ${dest}/psd0.png
+ # Remove first line (Layer 558):
+ ${SED} -i -e '1d' ${layers}
-cp ${dest}/psd0.png ${dest}/temp.png
+ # Will start at frame 2 at first loop iteration
+ f=1
-# Remove first line (Layer 558):
-${SED} -i -e '1d' ${layers}
+ files=""
-# Will start at frame 2 at first loop iteration
-f=1
+ while read l; do
+ f=$((${f} + 1))
-while read l; do
- f=$((${f} + 1))
+ label=$(get_label "${l}")
+ p=$(get_pos "${l}")
+ nf=$(get_frame_id "${l}")
- label=$(get_label "${l}")
- p=$(get_pos "${l}")
- nf=$(get_frame_id "${l}")
+ log_dbg "Couche ${f}"
+ log_dbg " nom: ${label}"
+ log_dbg " pos: ${p}"
- log_dbg "Couche ${f}"
- log_dbg " nom: ${label}"
- log_dbg " pos: ${p}"
+ if is_skip_label "${label}"; then
+ log_dbg " skip..."
+ continue
+ fi
- if is_skip_label "${label}"; then
- log_dbg " skip..."
- continue
- fi
-
- convert ${IM_OPS} ${src}[${f}] ${dest}/psd${f}.png
+ files="${files} -page ${p} ${src}[${f}]"
- composite ${IM_OPS} -geometry ${p} ${dest}/psd${f}.png ${dest}/temp.png ${dest}/temp.png
-
-if [ x"${nf}" != x"" ]; then
- log_dbg "New frame ID: ${nf}"
- cp ${dest}/temp.png ${dest}/f${nf}.png
- cp ${dest}/psd0.png ${dest}/temp.png
- fi
-done <${layers}
+ if [ x"${nf}" != x"" ]; then
+ log_dbg "New frame ID: ${nf}"
+ convert -colorspace sRGB -page +0+0 ${dest}/background.png ${files} -background none -layers merge ${dest}/f${nf}.png
+ files=""
+ fi
+ done <${layers}
+fi
if which ffmpeg 1> /dev/null 2>&1; then
# Conversion vidéo:
ffmpeg -y -r ${fps} -start_number 1 -i ${dest}/f%d.png ${dest}/sequence.mp4
fi
-
-rm -f ${dest}/temp.png
-
-#rm -f ${dest}/psd*.png