(GNOME2, Ubuntu 10.04 LTS) Ich habe ein Nautilus-Skript erstellt, sodass ich, wenn ich ein Verzeichnis voller verschiedener Codecs habe, nur mit der rechten Maustaste in diesen Ordner klicken muss -> Skripte -> THISSCRIPT.txt, und dann, presto, konvertiert es rekursiv alle Videodateien (identifiziert durch Video-MIME-Typ) in den x.264-Codec mit 128 Kbit MP3 nach AVI. Damit sind sie klein und von guter Qualität. Das funktioniert super!
FRAGE: Wenn ich auf dem Zenity-Fortschrittsbalken auf „Abbrechen“ drücke, wird Mencoder nicht beendet. Wie kann ich das machen? Ich meine, ich brauche das. Wenn ich auf dem Zenity-Fortschrittsbalken auf „Abbrechen“ drücke, wird Mencoder beendet. Wie mache ich das?
#!/bin/bash
which mencoder > /dev/null 2>&1; if [[ $? -ne 0 ]]; then echo -e '\nerror, no mencoder package detected'; exit 1; fi
which zenity > /dev/null 2>&1; if [[ $? -ne 0 ]]; then echo -e '\nerror, no zenity package detected'; exit 1; fi
HOWMANYLEFT=0
find . -type f | xargs -I {} file --mime-type {} | fgrep "video/" | rev | awk 'BEGIN {FS="/oediv :"} { print $NF}' | rev | while read ONELINE
do
if file "$ONELINE" | egrep -qvi "x.264|h.264"
then echo $ONELINE
fi
done | sed 's/^.\///' | tee /tmp/vid-conv-tmp.txt | while read ONELINE
do
HOWMANY=`wc -l /tmp/vid-conv-tmp.txt | cut -d " " -f1`
mencoder "$ONELINE" -o "OK-$ONELINE.avi" -ovc x264 -x264encopts bitrate=750 nr=2000 -oac mp3lame -lameopts cbr:br=128 > /dev/null 2>&1
HOWMANYLEFT=`expr $HOWMANYLEFT + 1`
echo "scale=10;($HOWMANYLEFT / $HOWMANY) * 100" | bc | cut -d "." -f1
done | zenity --progress --text="Processing files ..." --auto-close --percentage=0
Antwort1
Sie müssen die --auto-kill
Option verwenden. Ich habe das Skript ein wenig überarbeitet (ich mag Ihrüber den Tellerrand hinaus denkenVerwendung von rev
, aber es gibt auch andere Möglichkeiten :) ... Hier ist eine.
Ich habe yad
anstelle von verwendet zenity
. Es ist eine Abzweigung vonZenitund die Befehle sind im Grunde die gleichen. Soweit ich gelesen habe,jawird aktiver entwickelt und hat mehr Funktionen (und das war eine gute Gelegenheit für mich, damit zu spielen). Die --auto-kill
Option funktioniert mit beidenZenitUndja.
Neben der Prozentangabe zeigt das Skript auch eineAnzahl von so vielen(z. B. 3 von 8) plus den Namen der aktuellen Datei. Die Prozentberechnung verwendet awk
(nur weil ich mit der Syntax vertraut bin) ..
Zu Ihrer konkreten Frage: „einfach“ --auto-kill
sollte reichen.
for p in mencoder yad ;do
which $p >/dev/null 2>&1 || { echo -e '\nerror, no $p package detected'; exit 1; }
done
list="$(mktemp)"
find . -type f -print0 | # -print0 caters for any filename
xargs --null file --print0 --mime-type |
sed -n 's|\x00 *video/.*|\x00|p' | tr -d $'\n' |
xargs --null file --print0 |
sed -nr '/\x00.*(x.264|h.264)/!{s/^\.\///; s/\x00.*//; p}' >"$list"
# At this point, to count how many files there are to process, break out of the pipe.
# You can't know how many there are until they have all passed through the pipe.
fct=0; wcfct=($(wc "$list"));
while IFS= read -r file ;do
((fct+=1)); pcnt=$(awk -v"OFMT=%.2f" "BEGIN{ print (($fct-1)/$wcfct)*100 }")
echo "# $pcnt%: $fct of $wcfct: $file"; echo $pcnt
mencoder "$file" -o "OK-$file.avi" -ovc x264 -x264encopts bitrate=750 nr=2000 -oac mp3lame -lameopts cbr:br=128 >/dev/null 2>&1
done <"$list" | yad --title="Encoding Progress" --progress --geometry +100+100 --auto-close --auto-kill
rm "$list"