projects
/
fgen.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Improve video input frames detection
[fgen.git]
/
fgen.sh
diff --git
a/fgen.sh
b/fgen.sh
index
df952fa
..
f2c961f
100755
(executable)
--- a/
fgen.sh
+++ b/
fgen.sh
@@
-20,7
+20,11
@@
trames=1
dry_run=0
SED=sed
dry_run=0
SED=sed
-FFMPEG_OPTS="-hide_banner -loglevel error -y"
+
+# When reading a file line by line, if a command inside the loop
+# also reads stdin, it can exhaust the input file.
+# -nostdin: disable ffmpeg interaction on standard input:
+FFMPEG_OPTS="-hide_banner -loglevel error -y -nostdin"
# -limit memory 5000mb -limit disk 5gb
IM_OPS=""
# -limit memory 5000mb -limit disk 5gb
IM_OPS=""
@@
-107,15
+111,38
@@
function get_dup_to()
echo "${token}"
}
echo "${token}"
}
+# Arg1: start frame
+# Arg1: end frame
+function insert_empty_frames()
+{
+ local w
+ local start
+ local end
+
+ start=${1}
+ end=${2}
+
+ for w in $(seq ${start} ${end}); do
+ log_dbg "New frame ID: ${w} (empty)"
+ cp ${dest}/background.png ${dest}/${group}-f${w}.png
+ done
+}
+
function generate_video()
{
function generate_video()
{
+ local png_files
+
if which ffmpeg 1> /dev/null 2>&1; then
if which ffmpeg 1> /dev/null 2>&1; then
- if [ -f ${dest}/${group}-f1.png ]; then
+ set +e
+ png_files=$(ls ${dest}/${group}-f*.png 2> /dev/null)
+ set -e
+
+ if [ x"${png_files}" != x"" ]; then
log_dbg "generate_video start"
if [ ${dry_run} -eq 1 ]; then
touch ${dest}/${group}.mp4
else
log_dbg "generate_video start"
if [ ${dry_run} -eq 1 ]; then
touch ${dest}/${group}.mp4
else
- ffmpeg ${FFMPEG_OPTS} -r ${fps} -
start_number 1 -i ${dest}/${group}-f%d.png
${dest}/${group}.mp4
+ ffmpeg ${FFMPEG_OPTS} -r ${fps} -
pattern_type glob -i "${dest}/${group}-f*.png"
${dest}/${group}.mp4
fi
log_dbg "generate_video: end"
fi
log_dbg "generate_video: end"
@@
-224,7
+251,7
@@
if [ ${trames} -eq 1 ]; then
nf=""
oldnf=""
files=""
nf=""
oldnf=""
files=""
- group=""
+ group="
default
"
while read l; do
scene=$(get_scene_id "${l}")
while read l; do
scene=$(get_scene_id "${l}")
@@
-279,11
+306,10
@@
if [ ${trames} -eq 1 ]; then
expected_nf=$((${oldnf} + 1))
if [ ${expected_nf} -ne ${nf} ]; then
expected_nf=$((${oldnf} + 1))
if [ ${expected_nf} -ne ${nf} ]; then
- echo "
Error: invalid
frame sequence: ${nf}"
+ echo "
Warning: non-sequential
frame sequence: ${nf}"
echo " previous: ${oldnf}"
echo " expected: ${expected_nf}"
echo " previous: ${oldnf}"
echo " expected: ${expected_nf}"
- files=""
- continue
+ insert_empty_frames ${expected_nf} $((${nf} -1))
fi
fi
fi
fi