Linux(NAS通用)下自动匹配射手字幕脚本

主宰稳场 提交于 2021-02-17 03:50:37
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文件的识别,如果有需要的话完全可以再添加更多的文件类型。如果不会改的朋友可以联系我。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!