2014/02/17更新:加入因超时导致获取字幕不成功的状况。 2014/02/15更新:优化了脚本,充分考虑获取字幕失败后的状况,保证在下次运行时还能再次获取上次失败的字幕。 从头学起,用了一天的时间写的第一个实用BASH脚本,基本达到可用状态。 使用场景:家中有一台Atom的miniPC,安装了OpenMediaVault作为NAS使用,添加了transmission插件用作PT下载,下载完成后会自动转移到complete目录下。 早前曾使用transmission自带的“完成后脚本”功能尝试自动匹配字幕,但是一直没有成功,而且通用性不强。这次利用学习机会改写了一下,使得脚本可以几乎用在所有Linux Based的机器上。 使用前必须安装GetSubtitle,主页地址:https://github.com/firnsan/GetSubtitle 编译安装前需确认安装libcurl4-openssl-dev库,接着就可以直接编译GetSubtitle,不需要再手动安装curl库了。过程不详述。 脚本很初级,高手勿笑。
#!/bin/bash
# transmission 下载完成后运行的脚本
# TR_APP_VERSION
# TR_TIME_LOCALTIME
# TR_TORRENT_DIR
# TR_TORRENT_HASH
# TR_TORRENT_ID
# TR_TORRENT_NAME
#WATCH_DIR:下载完成后的保存目录,根据个人需要自行更改(输入绝对路径)
WATCH_DIR="/media/btdownload/completed"
FILE_CHECKED="./checked.txt"
FILE_NEW="./new.txt"
FILE_UNCHECK="./uncheck.txt"
LOG_FILE="./GetSub.log"
TEMP_FILE="./temp.txt"
cd $WATCH_DIR
if [ ! -f "$FILE_CHECKED" ]; then
echo "`date "+%Y-%m-%d %H:%M:%S" ` Can't find checked.txt, create one!" >> $LOG_FILE
find $WATCH_DIR -name "*.mkv" ! -name "*.Sample.mkv" > "$FILE_CHECKED"
echo "`date "+%Y-%m-%d %H:%M:%S" ` checked.txt created!" >> $LOG_FILE
fi
echo "`date "+%Y-%m-%d %H:%M:%S" ` creating new mkv file list..." >> $LOG_FILE
find $WATCH_DIR -type f -name "*.mkv" ! -name "*.Sample.mkv" > "$FILE_NEW"
echo "`date "+%Y-%m-%d %H:%M:%S" ` new mkv file list created!" >> $LOG_FILE
#比较文件,输出新增文件名
echo "`date "+%Y-%m-%d %H:%M:%S" ` Checking the new files..." >> $LOG_FILE
grep -vxFf "$FILE_CHECKED" "$FILE_NEW" > "$FILE_UNCHECK"
echo "`date "+%Y-%m-%d %H:%M:%S" ` New added file list created!" >> $LOG_FILE
#按行获取文件名
echo "`date "+%Y-%m-%d %H:%M:%S" ` Start getting sub..." >> $LOG_FILE
while read line
do
#MKVFILE=$(ls $line |sed "s:^:`pwd`/:")
echo "`date "+%Y-%m-%d %H:%M:%S" ` Getting sub for $line" >> $LOG_FILE
#提取字幕
GetSubtitle $line >> $TEMP_FILE
if cat $TEMP_FILE | grep "No subtitle finded" >/dev/null
then
#未找到字幕
cat $TEMP_FILE >> $LOG_FILE
elif cat $TEMP_FILE | grep "Timeout was reached" >/dev/null
then
#超时
cat $TEMP_FILE >> $LOG_FILE
else
#找到字幕
echo "$line" >> $FILE_CHECKED
cat $TEMP_FILE >> $LOG_FILE
fi
rm -f $TEMP_FILE
echo -e "n" >> $LOG_FILE
done < $FILE_UNCHECK
rm -f $FILE_UNCHECK
rm $FILE_NEW
最后将此脚本添加到transmission的完成后自动执行里,或者设置为定时任务,就可以达到效果了。另外需要注意的是这里只添加了mkv文件的识别,如果有需要的话完全可以再添加更多的文件类型。如果不会改的朋友可以联系我。
来源:oschina
链接:https://my.oschina.net/u/2304110/blog/419562