Simplify get_label() and get_frame_id()
[fgen.git] / fgen.sh
diff --git a/fgen.sh b/fgen.sh
index 64baf44..6e66b49 100755 (executable)
--- a/fgen.sh
+++ b/fgen.sh
@@ -9,7 +9,8 @@ set -e
 PROG_NAME=$(basename $0)
 
 # Set default values
-main_layer="Layer 558"
+bg_layer_name="background"
+ref_layer_prefix="ref"
 
 # Pour conversion vidéo:
 fps=8
@@ -43,45 +44,30 @@ function get_size()
 # Arg1: layer
 function get_pos()
 {
-    cat ${layers} | grep "${1}" | ${SED} "s/.*geometry:[0-9]\+x[0-9]\+\(+[0-9]\+[0-9]\+\)/\1/g"
+    cat ${layers} | grep "${1}" | ${SED} "s/.*geometry:[0-9]\+x[0-9]\+\(+[0-9]\++[0-9]\+\),.*/\1/g"
 }
 
 # Arg1: line
 function get_label()
 {
-    frame=$(echo "${1}" | grep -e "label:.*," | ${SED} "s/label:\(.*\),.*/\1/g")
-
-    if [ x"${frame}" = x"" ]; then
-        echo ""
-        return 1
-    else
-        echo "${frame}"
-        return 0
-    fi
+    local token
+    token=$(echo "${1}" | ${SED} "s/.*label:\(.*\),geometry.*/\1/g")
+    echo "${token}"
 }
 
 # Arg1: line
 function get_frame_id()
 {
-    frame=$(echo "${1}" | grep -e "label:[0-9]\+," | ${SED} "s/label:\([0-9]\+\),.*/\1/g")
-
-    if [ x"${frame}" = x"" ]; then
-        echo ""
-    else
-        echo "${frame}"
-    fi
+    frame=$(echo "${1}" | grep -e "label:[0-9]\+," | ${SED} "s/.*label:\([0-9]\+\),.*/\1/g")
+    echo "${frame}"
 }
 
-# Arg1: label
-function is_skip_label()
+# Arg1: line
+function get_scene_id()
 {
-    skip=$(echo "${1}" | grep -e "A8_.*")
-
-    if [ x"${skip}" = x"" ]; then
-        return 1
-    else
-        return 0
-    fi
+    local token
+    token=$(echo "${1}" | ${SED} "s/.*scene:\([0-9]\+\),.*/\1/g")
+    echo "${token}"
 }
 
 print_usage()
@@ -156,46 +142,46 @@ for tool in convert composite identify; do
 done
 
 if [ ${trames} -eq 1 ]; then
-    identify ${IM_OPS} -verbose -format "label:%l,geometry:%g\n" ${src} > ${layers}
+    # %s: scene number
+    identify ${IM_OPS} -verbose -format "scene:%s,label:%l,geometry:%g,\n" ${src} > ${layers}
 
-    # Ignore empty labels:
+    # Remove line(s) with empty label:
     ${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}"
 
-    # Create background frame:
-    convert -size ${size} xc:none ${dest}/background.png
+    if [ x"${size}" = x"" ]; then
+        echo "Error: background layer not found"
+        exit 1
+    fi
 
-    # Remove first line (Layer 558):
-    ${SED} -i -e '1d' ${layers}
+    # Remove background line:
+    ${SED} -i -e /label:${bg_layer_name},.*/d ${layers}
 
-    # Will start at frame 2 at first loop iteration
-    f=1
+    # Remove reference lines:
+    ${SED} -i -e /label:${ref_layer_prefix}.*/d ${layers}
+
+    # Create background frame:
+    convert -size ${size} xc:none ${dest}/background.png
 
     nf=""
     oldnf=""
     files=""
 
     while read l; do
-        f=$((${f} + 1))
-
+        scene=$(get_scene_id "${l}")
         label=$(get_label "${l}")
         p=$(get_pos "${l}")
         nf=$(get_frame_id "${l}")
 
-        log_dbg "Couche ${f}"
+        log_dbg "Layer ${scene}"
         log_dbg "  nom: ${label}"
         log_dbg "  pos: ${p}"
 
-        if is_skip_label "${label}"; then
-            log_dbg "  skip..."
-            continue
-        fi
-
-        files="${files} -page ${p} ${src}[${f}]"
+        files="${files} -page ${p} ${src}[${scene}]"
 
         if [ x"${nf}" != x"" ]; then
             # Only check expected frame if oldnf is set...