(GNOME2、Ubuntu 10.04 LTS)さまざまなコーデックでいっぱいのディレクトリがある場合は、フォルダ - >スクリプト - > THISSCRIPT.txtを右クリックすると、すべてのビデオファイルを再帰的に変換できるようにノーチラススクリプトを作成しました(ビデオMIMEタイプとして識別されます)をx.264コーデックに変換します。ここで、128Kbit mp3はaviです。これにより、小さなサイズ+高品質が得られます。本当に効果があります!
質問:Zenityの進行状況バーで「キャンセル」を押すと、mencoderは終了しません。どうすればいいですか? Zenityの進行状況バーで「キャンセル」を押すとmencoderが終了します。どうすればいいですか?
#!/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
答え1
このオプションを使用する必要があります--auto-kill
。スクリプトを少し修正しました。固定観念から抜け出して考えてみてくださいを使用してくださいrev
。しかし、他の方法もあります。 :) ...これは一つです。
yad
代わりに使用しました、zenity
フォークでした。ライン、コマンドはデフォルトで同じです。私が読んだところによると、庭はより積極的に開発されており、より多くの機能を備えています。 (これは私が利用できる素晴らしい機会です。)この--auto-kill
オプションは両方に適用されます。ラインそして庭。
パーセンテージの表示に加えて、スクリプトは以下も表示します。たくさんカウントしてみると(例:3/8)と現在のファイル名。パーセント計算はawk
(構文に満足しているため)..を使用します。
あなたの具体的な質問についてはそれで--auto-kill
十分です。
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"