Hi(gh)!
Stand aktuell: der Rechner läuft seit dem 5. April 2018 ca. 10:00 Uhr absturzfrei,das sind etwa 60 Stunden. Allerdings kam es jetzt zum zweiten Mal zu diesem seltsamen Rechenfehler bei der Abarbeitung meines Videobearbeitungs-Skripts.
Zum besseren Verständnis hier der Code des Skripts (bergensbanen.sh):
Code: Alles auswählen
workdir="/home/Video/bergensbanen"
orgfile=bergensbanen
w=1280
h=720
#mkdir $workdir
start=1
digits=6
title="Bergensbanen Bergen to Oslo, October 2009"
# "Psychedelisches" Video mit Bildmittelung
#avgframes=600
avgframes=150
#ffmpeg -i "/media/cdrom0/Norwegen/Scenic train ride from Bergen to Oslo (Norway).mp4" -r 25 -s ${w}"x"${h} -f image2 $workdir/$orgfile"-%0"$digits"d.png"
#filenum=$(find $workdir -type f | wc -l)
filenum=651185
maxnum=$((filenum+avgframes*2))
#bnr.sh $workdir $orgfile"-" 43220 $filenum $digits 43370
#povray +i/home/Raytracing/Povscn/video/blackframe.pov +o$workdir/$orgfile-000.png +fn +w${w} +h${h} +ki1 +kf$avgframes +kfi1 +kff$avgframes
#povray +i/home/Raytracing/Povscn/video/blackframe.pov +o$workdir/$orgfile-.png +fn +w${w} +h${h} +ki1 +kf$avgframes +kfi$((filenum+avgframes+1)) +kff$maxnum
avgfilm_alt.sh $workdir $orgfile $maxnum 212403 $avgframes $digits
ffmpeg -f image2 -i $workdir/$orgfile"_avg"$avgframes"-%0"$digits"d.png" -r 25 -s ${w}"x"${h} -b 6000k "/home/Video/Fertige Videos/${title}, psychedelized (${avgframes} frames averaged).mp4"
# "Psychedelisches" Video mit Bildmittelung, auf 6 Farben reduziert
filenum2=$((filenum+avgframes))
newfile1=${orgfile}"_avg"${avgframes}"-"
batchconv.sh ${workdir} ${newfile1} png $start ${filenum2} $digits tga $w $h # Umwandlung nach TGA
newfile2=${orgfile}"_avg"${avgframes}"_6colors-"
paloptyip.sh ${workdir} ${newfile1} $start ${filenum2} $digits 6 0 ${newfile2} # Farbreduzierung
batchconv.sh ${workdir} ${newfile2} tga $start ${filenum2} $digits png $w $h # Umwandlung nach TGA
ffmpeg -f image2 -i ${workdir}"/"${newfile2}"%0"$digits"d.png" -r 25 -s ${w}"x"${h} -b 6000k "/home/Video/Fertige Videos/${title}, psychedelized (${avgframes} frames averaged), reduced to 6 colors.mp4"
# Atari ST monochrom, keine Rasterung
brm.sh ${workdir} ${newfile2} $start $filenum2 $digits tga
brm.sh ${workdir} ${newfile2} $start $filenum2 $digits png
brm.sh ${workdir} ${newfile1} $start $filenum2 $digits tga
brm.sh ${workdir} ${newfile1} $start $filenum2 $digits png
brm.sh ${workdir} ${orgfile}"-" $start $avgframes $digits png
brm.sh ${workdir} ${orgfile}"-" $filenum2 $((filenum+avgframes*2)) $digits png
bnr.sh ${workdir} ${orgfile}"-" $((avgframes+1)) $((filenum2-1)) $digits 1
w=533
h=400
batchconv.sh $workdir ${orgfile}"-" png $start $filenum $digits tga $w $h
newfile=${orgfile}"_atarist_monochrome_nodither_threshold_128-"
bwfsyip.sh $workdir ${orgfile}"-" $start $filenum $digits 0 128 "normal" $newfile
w=$((w*4))
h=$((h*4))
batchconv.sh $workdir $newfile tga $start $filenum $digits png $w $h
ffmpeg -f image2 -i ${workdir}"/"${newfile}"%0"$digits"d.png" -r 25 -s ${w}"x"${h} -b 12000k "/home/Video/Fertige Videos/${title}, Atari ST monochrome, no dither, threshold value 128 ("$w" by "$h").mp4"
ffmpeg -f image2 -i ${workdir}"/"${newfile}"%0"$digits"d.png" -r 25 -s 533x400 -b 12000k "/home/Video/Fertige Videos/${title}, Atari ST monochrome, no ither, threshold value 128.mp4"
# Atari ST monochrom, keine Rasterung, adaptiver Schwellwert
w=533
h=400
brm.sh $workdir $newfile $start $filenum $digits png
brm.sh $workdir $newfile $start $filenum $digits tga
batchconv.sh $workdir ${orgfile}"-" png $start $filenum $digits tga $w $h
newfile=${orgfile}"_atarist_monochrome_nodither_threshold_adaptive-"
bwfsyip.sh $workdir ${orgfile}"-" $start $filenum $digits 0 1 "adaptive" $newfile
w=$((w*4))
h=$((h*4))
batchconv.sh $workdir $newfile tga $start $filenum $digits png $w $h
ffmpeg -f image2 -i ${workdir}"/"${newfile}"%0"$digits"d.png" -r 25 -s ${w}"x"${h} -b 12000k "/home/Video/Fertige Videos/${title}, Atari ST monochrome, no dither, adaptive threshold value ("$w" by "$h").mp4"
ffmpeg -f image2 -i ${workdir}"/"${newfile}"%0"$digits"d.png" -r 25 -s 533x400 -b 12000k "/home/Video/Fertige Videos/${title}, Atari ST monochrome, no dither, adaptive threshold value.mp4"
# Atari ST monochrom, Floyd-Steinberg-Rasterung
brm.sh $workdir $newfile $start $filenum $digits png
brm.sh $workdir $newfile $start $filenum $digits tga
newfile=${orgfile}"_atarist_monochrome_floydsteinberg-"
bwfsyip.sh $workdir ${orgfile}"-" $start $filenum $digits 1 0 "normal" $newfile
batchconv.sh $workdir $newfile tga $start $filenum $digits png $w $h
ffmpeg -f image2 -i ${workdir}"/"${newfile}"%0"$digits"d.png" -r 25 -s ${w}"x"${h} -b 12000k "/home/Video/Fertige Videos/${title}, Atari ST monochrome, Floyd-Steinberg dithering ("$w" by "$h").mp4"
ffmpeg -f image2 -i ${workdir}"/"${newfile}"%0"$digits"d.png" -r 25 -s 533x400 -b 12000k "/home/Video/Fertige Videos/${title}, Atari ST monochrome, Floyd-Steinberg dithering.mp4"
# Reduzierung auf 1, 2, 4, 8 und 16 Farben, ohne Rasterung
brm.sh $workdir $newfile $start $filenum $digits png
brm.sh $workdir $newfile $start $filenum $digits tga
brm.sh $workdir $orgfile"-" $start $filenum $digits tga
w=640
h=480
cl=16
batchconv.sh $workdir $orgfile"-" png $start $filenum $digits tga $w $h # Umwandlung nach tga
for i in $(seq 4 4)
do
newfile=$orgfile"_"$cl"colors-"
paloptyip.sh $workdir $orgfile"-" $start $filenum $digits $cl 0 $newfile # Reduzierung auf eine Farbe
batchconv.sh $workdir $newfile tga $start $filenum $digits png $w $h # Umwandlung nach PNG
ffmpeg -f image2 -i ${workdir}"/"${newfile}"%0"$digits"d.png" -r 25 -s ${w}"x"${h} -b 6000k "/home/Video/Fertige Videos/${title}, reduced to "$cl" colors.mp4"
brm.sh $workdir $newfile $start $filenum $digits png
brm.sh $workdir $newfile $start $filenum $digits tga
cl=$((cl*2))
done
cd ..
rm -r $workdir
Wie man leicht erkennt, ruft dieses bash-Script wiederum andere Scripts auf, darunter avgfilm_alt.sh:
Code: Alles auswählen
# avgfilm
# Generates movies from averaged frames
# `
#function digits()
digits()
{
c=1
d=0
while [ $c -le $1 ]
do
c=$((c*10))
d=$((d+1))
done
return $d
}
#function leadingzeroes()
leadingzeroes()
{
lz=""
for i in $(seq 0 $1)
do
lz=${lz}0
done
echo $lz
return $lz
}
if [ $1 = "old" ]
then
echo "Erster Frame in der Originalsequenz:"
read fframe
echo "Letzter Frame in der Gesamtsequenz einschließlich Vor- und Abspannframes:"
read mframe
echo "Höchste Framenummern-Stellenzahl in der Gesamtserie:"
read maxdigits
echo "Anzahl der zu mittelnden Frames:"
read avgfrm
path="/home/Video/mudcompilation/mudcompilation-001/sub"
oldfile="mud001"
else
path=$1
oldfile=$2
mframe=$3
fframe=$4
avgfrm=$5
maxdigits=$6
fi
laframe=$((mframe-avgfrm))
lframe=$((fframe+avgfrm-1))
dest=$path"/temp/"
copypath=$path"/temp2/"
copyfile=$oldfile"_avg"$avgfrm"-"
digits $mframe
mfdigits=$?
digits $laframe
lafdigits=$?
digits $fframe
ffdigits=$?
#digits $lframe
#lfdigits=$?
mkdir $dest
mkdir $copypath
# rm ${copy}*
# echo "Eventuell vorhandene Original-Frames aus der letzten Sitzung wurden gelöscht!"
for j in $(seq $fframe $lframe)
do
digits $j
jdigits=$?
leadingzeroes $((maxdigits-jdigits-1))
zeroes=`leadingzeroes $((maxdigits-jdigits-1))`
file=${path}"/"${oldfile}"-"${zeroes}${j}.png
destfile=${dest}${oldfile}"-"${zeroes}${j}.png
cp $file $destfile
echo "Datei $file kopiert."
done
for j in $(seq $fframe $laframe)
do
digits $j
jdigits=$?
leadingzeroes $((mfdigits-jdigits-1))
zeroes=`leadingzeroes $((mfdigits-jdigits-1))`
# nice -n 19
convert -average ${dest}* ${copypath}${copyfile}${zeroes}${j}.png
echo "Frames $j bis $((j+avgfrm-1)) gemittelt!"
file=${dest}${oldfile}"-"${zeroes}${j}.png
rm $file
echo "Frame $j gelöscht!"
new=$((j+avgfrm))
digits $new
ndigits=$?
leadingzeroes $((mfdigits-ndigits-1))
zeroes=`leadingzeroes $((mfdigits-ndigits-1))`
file=${path}"/"${oldfile}"-"${zeroes}${new}.png
cp $file ${dest}${oldfile}"-"${zeroes}${new}.png
echo "Frame $new hinzukopiert!"
echo $j
echo $fframe
echo $lafram
done
cd $copypath
for j in $(seq 1 $laframe)
do
digits $j
jdigits=$?
leadingzeroes $((mfdigits-jdigits-1))
zeroes=`leadingzeroes $((mfdigits-jdigits-1))`
mv ${copyfile}${zeroes}${j}.png ..
done
rm -r $dest
rm -r $copypath
#rm ${copy}*
#echo "Temporär kopierte Original-Frames wurden gelöscht!"
bergensbanen.sh erzeugt aus einem im Original 7 Stunden und 14 Minuten (651185 Einzelframes) langen Video insgesamt 13 neue Videos, und zwar als erstes ein "psychedelisches" Video, bei dem für jeder Einzelframe mittels ImageMagick mit den jeweils 150 folgenden Original-Frames gemittelt wird. Dies wiederum geschieht durch das Script "avgfilm_alt.sh" (Zeile 21 in bergensbanen.sh): zwei neue Ordner werden erstellt, die ersten 150 Bilder ab vorgegebenen Startframe (zuletzt Frame Nr. 212403) in den ersten Ordner kopiert, gemittelt und das Ergebnis in den zweiten Ordner geschrieben. Danach wird der erste Frame der 150 Frames gelöscht, der nächste (also sozusagen der 151. bzw. im aktuellen Lauf der 212553.) aus der Gesamtsequenz hinzukopiert, wieder gemittelt und so weiter.
Aufgrund der enormen Länge des Original-Videos ist "bergensbanen.sh" bis jetzt nur mit diesem ersten neuen Video beschäftigt. Eigentlich sollte das Script problemlos weiterlaufen, solange der Rechner nicht abstürzt - allerdings tat er das vom 5. auf den 6. April nur bis morgens um 6:14 Uhr bzw. 21213 Frames lang, dann "entgleiste" das Script und sprang in eine spätere Zeile von bergensbanen.sh (welche genau es war kann ich nicht mehr rekonstruieren, den Fehlermeldungen nach müsste es Zeile 31 gewesen sein, wo ein anderes Skript, "batchconv.sh" mittels ImageMagick TGA-Dateien nach PNG konvertiert. Da diese TGA-Dateien aber erst durch eine übersprungene Skiptzeile (28 in bergensbanen.sh) erzeugt wurde, konnten sie in diesem Fall nicht gefunden werden, was zu Zehntausenden von Fehlermeldungen führte.
Beim zweiten Mal trat die "Entgleisung" schon nach 16261 Frames auf, diesmal sprang der Shell-Interpreter in Zeile 30 von bergensbanen.sh, wo das zweite Video erzeugt wird, nämlich eine auf 6 Farben reduzierte Version des ersten Videos, allerdings mit Hilfe meines hier auch schon öfters erwähnten kommadozeilenbasierten Bildarbeitungsprogramms "yip". Dieses Programm kann allerdings nur unkomprimierte TGA-Dateien verarbeiten, die natürlich vorher nicht erzeugt wurden, weshalb es wiederum Fehlermeldungen hagelte.
Muss ich jetzt davon ausgehen, dass das 4GB-Speichermodul defekt ist? Oder ist es doch ein Bug in der bash, der bei sehr großen Anzahlen von Schleifendurchläufen Fehler produziert?
If operating systems were countries, Linux would be pre-1978 Afghanistan: an all-time favourite among alternative globetrotters, but shunned by mainstream tourists because of its lack of fancy beaches, shortage of alcoholic beverages and its fondness of beards...