两个用于从B站下载视频的Shell脚本

我在下载四郎讲棋的、最多收藏的、时长低于10分钟的

用于人工收集URL的:

prev=
while clipnotify; do
t=`xclip -o`
if ! [[ "$t" =~ ^http ]]; then continue; fi
if [[ "$t" == $prev ]]; then continue; fi
prev=$t
echo $t >>url
ffplay -nodisp -autoexit -loglevel quiet /usr/share/sounds/Oxygen-K3B-Insert-Medium.ogg
done

用于下载的:

down () {
  trap 'kill 0' INT # 输入重定向的函数由子Shell执行,exit仅终止子Shell进程
  IFS= read -r line # help read
  for fmt in flv360-AVC flv360-AV1 flv360-HEVC flv480-AVC flv480-AV1 flv480-HEVC; do
    if you-get -F dash-$fmt -n --no-caption $line; then
      sed -i '1d' url # 删除文件url的第1行
      return 0
    fi
  done
  echo $line >>log
  return 1
}

ren () {  if [[ "$1" != "$2" ]]; then mv "$1" "$2"; fi }

merge () {
  x=; y=; z=
  for f in *\[??\].mp4; do
    t=${f// /}; ren "$f" $t; f=$t # ${v//p/s} 换所有
    t=${f/【中国象棋】/}; ren $f $t; f=$t # ${v/p/s} 换一个
    z="$z $f"; x="$x -i $f"
    y=`echo $f | sed 's/\[[0-9]\{2\}\]//'`
  done

  if [[ "$x" != "" ]] &&
     ffmpeg $x -preset fast -c:v copy -c:a aac -b:a 20k -ar 16000 -ac 1 $y 2>/dev/null; then
    mv $y ~/xqv; rm $z
  else
    echo "Files not merged" >>log
  fi
}

cp ~/url /t
cd /t
echo >log

if [[ "`which you-get`" == "" ]]; then . ~/venv/bin/activate; fi

for i in {1..2}; do
  head -n 1 url | down && merge
  #sleep `awk 'BEGIN { srand(); printf "%.4f", rand(); }'`
done

cat log; rm log
cp -i /t/url ~
#ffplay -nodisp -autoexit -loglevel quiet /usr/share/sounds/Oxygen-Im-Sms.ogg

 

posted @ 2025-10-15 13:03  华容道专家  阅读(7)  评论(0)    收藏  举报