自从3.0的大更新后,脚本好似更加的智能了,使用者没有那么多的需要修改脚本的步骤了,但是3.0版的文章被知乎删除了
不过没关系,今天迎来了3.1版
本期更新
- 新增自主检查是否缺失依赖
- 新增各bilibiliApp的版本的支持
本期特点
- 每次运行脚本都会自主检测是否缺失依赖,如果缺失依赖会自动为你安装相关依赖,不再需要自己手动安装,当然前提是你使用的是Termux(包括魔改版)。
- 支持各哔哩哔哩App版本的输出,再也不用自己手动修改脚本里的App位置,目前仅支持手机里安装一个哔哩哔哩App版本。
以后脚本的更新,都是直接把发脚本来,不在介绍如何使用了,因为已经有一篇比较全的使用教程了。见
menGo:bilibili指导篇(总结归类)——从无到有,境无止尽!zhuanlan.zhihu.com
#!bin/bash
########################################
# 免责声明
# 本脚本仅用于个人学习、研究使用等
# 禁止一切用于商业或盈利性为目的用途
# 通过使用本脚本带来的所有风险与作者无关
# 应遵守著作权法及其他相关法律的规定
# 下载后请在24小时内删除
# 使用者使用本脚本默认同意上述约定
########################################
# 特别感谢 @浅错觉 给予的帮助
########################################
# 已集成自动安装依赖功能
# apt install vim gawk grep jq ffmpeg
########################################
# Version : 3.1
########################################
#允许访问内部储存
termux-setup-storage
#安装相关依赖
echo -e "033[1;31m检查是否缺失依赖...033[0m"
if [ ! -f $PREFIX/bin/vim ] || [ ! -f $PREFIX/bin/awk ] || [ ! -f $PREFIX/bin/sed ] || [ ! -f $PREFIX/bin/grep ] || [ ! -f $PREFIX/bin/jq ] || [ ! -f $PREFIX/bin/ffmpeg ]; thenecho -e "033[1;31m正在安装相关依赖...033[0m"apt install vim gawk sed grep jq ffmpeg -yecho -e "033[1;31m所需依赖安装完毕033[0m"
elseecho -e "033[1;31m没有依赖缺失...033[0m"
fi
#定义bilibili输出目录
output_dir="/storage/emulated/0/Video/"
if [ ! -d "$output_dir" ]; thenecho -e "033[1;32m创建输出目录:033[0m033[1;31m$output_dir033[0m"mkdir $output_dir
elseecho -e "033[1;32m输出目录:033[0m033[1;31m$output_dir033[0m"
fi
#遍历各bilibili版本缓存目录
for bili in tv.danmaku.bili com.bilibili.app.in com.bilibili.app.bule
do#判断各bilibili是否有缓存if [ -d "/storage/emulated/0/Android/data/$bili/download/" ]; then#定义bilibili缓存目录bili_dir="/storage/emulated/0/Android/data/$bili/download/"#获取bilibili缓存目录cache_dir=$(ls $bili_dir)echo -e "t033[1;35m检测到 $bili 中有缓存033[0m"elseecho -e "t033[1;34m检测到 $bili 中没有缓存033[0m"fi
done
#定义bilibili缓存目录
#bili_dir="/storage/emulated/0/Android/data/tv.danmaku.bili/download/"
#获取bilibili缓存目录
#cache_dir=$(ls $bili_dir)
#输出bilibili缓存目录
look_dir()
{i=0title_dir="t033[1;35m$((i++)):033[0m033[1;35m全部输出033[0m"for cache in $cache_dir; dovideo_dir=$(ls $bili_dir$cache)video1=`echo $video_dir | awk '{print $1}'`title=`jq -r '.title' $bili_dir$cache/$video1/entry.json`title=${title//[[:space:]]/_}title_dir+="nt033[1;35m$((i++)):033[0m033[1;37m$title033[0m"donetitle_dir+="nt033[1;35m*:033[0m033[1;31m按回车键退出033[0m"echo -e $title_dir
}
#输入一个数字
read_n()
{read -p "`echo -e "033[1;32m请选择一个视频:033[0m"`" idcase $id in0)echo -e "033[1;31m还没有开发哦 033[0m";;[[:digit:]])cache=`echo $cache_dir | awk -v i=$id '{print $i}'`video_dir=$(ls $bili_dir$cache)video1=`echo $video_dir | awk '{print $1}'`title=`jq -r '.title' $bili_dir$cache/$video1/entry.json`title=${title//[[:space:]]/_}title=${title_}#if [ ! -d "$bili_dir$cache/" ];then#创建视频分类目录if [ ! -d "$output_dir$title/" ]; thenecho -e "033[1;32m创建目录:033[0m033[1;31m$title033[0m"mkdir $output_dir$titleelseecho -e "033[1;32m目录:033[0m033[1;31m$title033[0m033[1;32m已存在033[0m"fi#blv番剧输出story(){for video in $video_dir; do#获取索引index=`jq -r '.ep.index' $bili_dir$cache/$video/entry.json`#获取标题index_title=`jq -r '.ep.index_title' $bili_dir$cache/$video/entry.json`index_title=${index_title//[[:space:]]/_}index_title=${index_title_}#判断$index不等于任意大小写字母if [[ ! $index =~ [[:alpha:]] ]]; then#判断$index是否小于10if [ $index -lt 10 ]; then#判断是否输出过if [ ! -f $output_dir$title/第0$index话『$index_title』.mp4 ]; thenecho -e "t033[1;32m输出第033[0m033[1;31m$index033[0m033[1;32m个视频033[0m"#判断后缀是.m4s还是.blvif [ -f $bili_dir$cache/$video/*/video.m4s ]; thenffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/第0$index话『$index_title』.mp4elseffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/第0$index话『$index_title』.mp4fiecho -e "t033[1;32m视频033[0m033[1;31m第0$index话『$index_title』.mp4033[0m033[1;32m合成完成033[0m"elseecho -e "t033[1;31m第0$index话『$index_title』.mp4033[0m033[1;32m已存在033[0m"fielse#判断是否输出过if [ ! -f $output_dir$title/第$index话『$index_title』.mp4 ]; thenecho -e "t033[1;32m输出第033[0m033[1;31m$index033[0m033[1;32m个视频033[0m"#判断后缀是.m4s还是.blvif [ -f $bili_dir$cache/$video/*/video.m4s ]; thenffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/第$index话『$index_title』.mp4elseffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/第$index话『$index_title』.mp4fiecho -e "t033[1;32m视频033[0m033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m合成完成033[0m"elseecho -e "t033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m已存在033[0m"fifielse#判断是否输出过if [ ! -f $output_dir$title/第$index话『$index_title』.mp4 ]; thenecho -e "t033[1;32m输出第033[0m033[1;31m$index033[0m033[1;32m个视频033[0m"#判断后缀是.m4s还是.blvif [ -f $bili_dir$cache/$video/*/video.m4s ]; thenffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/第$index话『$index_title』.mp4elseffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/第$index话『$index_title』.mp4fiecho -e "t033[1;32m视频033[0m033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m合成完成033[0m"elseecho -e "t033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m已存在033[0m"fifidone}#blv肥皂剧输出soap(){for video in $video_dir; dopage=`jq -r '.page_data.page' $bili_dir$cache/$video/entry.json`part=`jq -r '.page_data.part' $bili_dir$cache/$video/entry.json`part=${part//[[:space:]]/_}part=${part_}#判断$page不等于任意大小写字母if [[ ! $page =~ [[:alpha:]] ]]; then#判断$page是否小于10if [ $page -lt 10 ]; then#判断是否输出过if [ ! -f $output_dir$title/$part.mp4 ]; thenecho -e "t033[1;32m输出第033[0m033[1;31m$page033[0m033[1;32m个视频033[0m"#判断后缀是.m4s还是.blvif [ -f $bili_dir$cache/$video/*/video.m4s ]; thenffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/$part.mp4elseffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/$part.mp4fiecho -e "t033[1;32m视频033[0m033[1;31m$part.mp4033[0m033[1;32m合成完成033[0m"elseecho -e "t033[1;31m$part.mp4033[0m033[1;32m已存在033[0m"fielse#判断是否输出过if [ ! -f $output_dir$title/$part.mp4 ]; thenecho -e "t033[1;32m输出第033[0m033[1;31m$page033[0m033[1;32m个视频033[0m"#判断后缀是.m4s还是.blvif [ -f $bili_dir$cache/$video/*/video.m4s ]; thenffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/$part.mp4elseffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/$part.mp4fiecho -e "t033[1;32m视频033[0m033[1;31m$part.mp4033[0m033[1;32m合成完成033[0m"elseecho -e "t033[1;31m$part.mp4033[0m033[1;32m已存在033[0m"fifielse#判断是否输出过if [ ! -f $output_dir$title/$part.mp4 ]; thenecho -e "t033[1;32m输出第033[0m033[1;31m$page033[0m033[1;32m个视频033[0m"#判断后缀是.m4s还是.blvif [ -f $bili_dir$cache/$video/*/video.m4s ]; thenffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/$part.mp4elseffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/$part.mp4fiecho -e "t033[1;32m视频033[0m033[1;31m$part.mp4033[0m033[1;32m合成完成033[0m"elseecho -e "t033[1;31m$part.mp4033[0m033[1;32m已存在033[0m"fifidone}#判断视频类型if [[ $cache == s* ]]; thenecho -e "t033[1;37m视频类型:番剧033[0m"storyelseecho -e "t033[1;37m视频类型:肥皂剧033[0m"soapfi;;*)echo -e "033[1;31mExit033[0m"exitesac
}
#运行脚本
for((;;))
dolook_dirread_n
done
#文件名过滤
dir_filtration()
{name=${name//[[:space:]]/_}return $name
}
本文为原创文章——未经作者授权禁止转载