たくさんのファイルをバッチ変換しようとしていますが、変換されたファイルの簡単なリストをテキストドキュメントに変換して、スクリプトを停止し、開始した頃から続行できるようにしています。
#! /bin/sh
source_dir="/home/eldamar/video"
find $source_dir -type f -regex ".*/.*\.\(mov\|mpg\|mkv\|avi\|m2v\|wmv\|flv\|m2ts\|vob\)" | {
while read file
do
ext=${file##*.}
filename=${file##*/}
basename=${filename%.*}
dirname=${file%/*}
touch converted.txt
if grep -Fxq "$filename" converted.txt
then
echo "$(tput setaf 2)File "$filename" is allready converted, ignoring it :D$(tput setaf 7)"
else
# Extract subtitles for mkv files
echo $ext
if [ "$ext"=="mkv" ]; then
# input.srt <- default subtitle
# input.lang.srt <- other languages
$sublang=""
mkvinfo=$(mkvinfo $file | grep subtitles -B3 -A3)
# Replace existing .srt
# rm $dirname/$basename.srt
# Extract subtitle from mkv
# mkvextract tracks input.mkv -c ISO8859-1 3:$dirname/$basename.$sublang.srt
fi
avconv -y -i $file -map 0 -map -0:s -vcodec libx264 -acodec libfaac $dirname/$basename.mp4
# Store the filename in list
echo $filename >> converted.txt
fi
done;
}
字幕の抽出も進行中ですが、avconvが失敗するかどうかわからないのですが、方法はありますか?
編集このスクリプトでやや完了しました。ここにあります http://Pastebin.com/trMDRaq5 助けてくれてありがとう!
エラーが発生した場合、ほとんどのコマンドはゼロ以外の戻り値を返します。その戻りコードをキャプチャするか、||
および&&
を介して処理することができます。
例:
avconv -y -i file1 ; echo command finished
avconv -y -i file1 && echo command finished successfully.
avconv -y -i file1 || echo command finished but indicated failure!
[編集]
シェルで$?
を確認することもできます。例:
#!/ bin/sh /usr/bin/true echo $? /usr/bin/false echo $?
Trueは常に成功します。テストスクリプトを実行すると、0が返されます。
Falseは常に失敗します。テストスクリプトを実行すると、0以外が返されます。 (私の場合は1ですが、異なる場合があります)。