Support new background layer name
[fgen.git] / fgen.sh
diff --git a/fgen.sh b/fgen.sh
index 07507d7..ea04217 100755 (executable)
--- a/fgen.sh
+++ b/fgen.sh
@@ -9,7 +9,7 @@ set -e
 PROG_NAME=$(basename $0)
 
 # Set default values
-main_layer="Layer 558"
+bg_layer_name="background"
 
 # Pour conversion vidéo:
 fps=8
@@ -17,6 +17,7 @@ fps=8
 debug=0
 trames=1
 SED=sed
+FFMPEG_OPTS="-hide_banner -loglevel error -y"
 
 # -limit memory 5000mb -limit disk 5gb
 IM_OPS=""
@@ -161,19 +162,26 @@ if [ ${trames} -eq 1 ]; then
     ${SED} -i -e /label:,.*/d ${layers}
 
     # Extract global frame size:
-    size=$(get_size "${main_layer}")
+    size=$(get_size "${bg_layer_name}")
 
-    log_dbg "CANVAS SIZE=${size}"
+    log_dbg "Background size: ${size}"
+
+    if [ x"${size}" = x"" ]; then
+        echo "Error: background layer not found"
+        exit 1
+    fi
+
+    # Remove background line:
+    ${SED} -i -e /label:${bg_layer_name},.*/d ${layers}
 
     # Create background frame:
     convert -size ${size} xc:none ${dest}/background.png
 
-    # Remove first line (Layer 558):
-    ${SED} -i -e '1d' ${layers}
-
     # Will start at frame 2 at first loop iteration
     f=1
 
+    nf=""
+    oldnf=""
     files=""
 
     while read l; do
@@ -195,14 +203,28 @@ if [ ${trames} -eq 1 ]; then
         files="${files} -page ${p} ${src}[${f}]"
 
         if [ x"${nf}" != x"" ]; then
+            # Only check expected frame if oldnf is set...
+            if [ x"${oldnf}" != x"" ]; then
+                expected_nf=$((${oldnf} + 1))
+
+                if [ ${expected_nf} -ne ${nf} ]; then
+                    echo "Error: invalid frame sequence: ${nf}"
+                    echo "  previous: ${oldnf}"
+                    echo "  expected: ${expected_nf}"
+                    files=""
+                    continue
+                fi
+            fi
+
             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=""
+            oldnf="${nf}"
         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
+    ffmpeg ${FFMPEG_OPTS} -r ${fps} -start_number 1 -i ${dest}/f%d.png ${dest}/sequence.mp4
 fi