![a4cac39b39952a5beba9585bf323b264.png](https://i-blog.csdnimg.cn/blog_migrate/845b357c9edbc11f1ecc57bb0dc5546e.jpeg)
自从3.0的大更新后,脚本好似更加的智能了,使用者没有那么多的需要修改脚本的步骤了,但是3.0版的文章被知乎删除了
不过没关系,今天迎来了3.1版
![3e3c8d22319cc84e3aae649c683acc79.png](https://i-blog.csdnimg.cn/blog_migrate/39c1d8fd292a73d12bac1a77c1071d61.jpeg)
本期更新
- 新增自主检查是否缺失依赖
- 新增各bilibiliApp的版本的支持
本期特点
- 每次运行脚本都会自主检测是否缺失依赖,如果缺失依赖会自动为你安装相关依赖,不再需要自己手动安装,当然前提是你使用的是Termux(包括魔改版)。
- 支持各哔哩哔哩App版本的输出,再也不用自己手动修改脚本里的App位置,目前仅支持手机里安装一个哔哩哔哩App版本。
以后脚本的更新,都是直接把发脚本来,不在介绍如何使用了,因为已经有一篇比较全的使用教程了。见
menGo:bilibili指导篇(总结归类)——从无到有,境无止尽!zhuanlan.zhihu.com![b9e9cb21ead334672c21d9e925661b5a.png](https://i-blog.csdnimg.cn/blog_migrate/d0acb8b36f1ab1ec596776cbb934b134.jpeg)
#!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 ]; then
echo -e "033[1;31m正在安装相关依赖...033[0m"
apt install vim gawk sed grep jq ffmpeg -y
echo -e "033[1;31m所需依赖安装完毕033[0m"
else
echo -e "033[1;31m没有依赖缺失...033[0m"
fi
#定义bilibili输出目录
output_dir="/storage/emulated/0/Video/"
if [ ! -d "$output_dir" ]; then
echo -e "033[1;32m创建输出目录:033[0m033[1;31m$output_dir033[0m"
mkdir $output_dir
else
echo -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"
else
echo -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=0
title_dir="t033[1;35m$((i++)):033[0m033[1;35m全部输出033[0m"
for cache in $cache_dir; do
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_dir+="nt033[1;35m$((i++)):033[0m033[1;37m$title033[0m"
done
title_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"`" id
case $id in
0)
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/" ]; then
echo -e "033[1;32m创建目录:033[0m033[1;31m$title033[0m"
mkdir $output_dir$title
else
echo -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是否小于10
if [ $index -lt 10 ]; then
#判断是否输出过
if [ ! -f $output_dir$title/第0$index话『$index_title』.mp4 ]; then
echo -e "t033[1;32m输出第033[0m033[1;31m$index033[0m033[1;32m个视频033[0m"
#判断后缀是.m4s还是.blv
if [ -f $bili_dir$cache/$video/*/video.m4s ]; then
ffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/第0$index话『$index_title』.mp4
else
ffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/第0$index话『$index_title』.mp4
fi
echo -e "t033[1;32m视频033[0m033[1;31m第0$index话『$index_title』.mp4033[0m033[1;32m合成完成033[0m"
else
echo -e "t033[1;31m第0$index话『$index_title』.mp4033[0m033[1;32m已存在033[0m"
fi
else
#判断是否输出过
if [ ! -f $output_dir$title/第$index话『$index_title』.mp4 ]; then
echo -e "t033[1;32m输出第033[0m033[1;31m$index033[0m033[1;32m个视频033[0m"
#判断后缀是.m4s还是.blv
if [ -f $bili_dir$cache/$video/*/video.m4s ]; then
ffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/第$index话『$index_title』.mp4
else
ffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/第$index话『$index_title』.mp4
fi
echo -e "t033[1;32m视频033[0m033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m合成完成033[0m"
else
echo -e "t033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m已存在033[0m"
fi
fi
else
#判断是否输出过
if [ ! -f $output_dir$title/第$index话『$index_title』.mp4 ]; then
echo -e "t033[1;32m输出第033[0m033[1;31m$index033[0m033[1;32m个视频033[0m"
#判断后缀是.m4s还是.blv
if [ -f $bili_dir$cache/$video/*/video.m4s ]; then
ffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/第$index话『$index_title』.mp4
else
ffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/第$index话『$index_title』.mp4
fi
echo -e "t033[1;32m视频033[0m033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m合成完成033[0m"
else
echo -e "t033[1;31m第$index话『$index_title』.mp4033[0m033[1;32m已存在033[0m"
fi
fi
done
}
#blv肥皂剧输出
soap()
{
for video in $video_dir; do
page=`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是否小于10
if [ $page -lt 10 ]; then
#判断是否输出过
if [ ! -f $output_dir$title/$part.mp4 ]; then
echo -e "t033[1;32m输出第033[0m033[1;31m$page033[0m033[1;32m个视频033[0m"
#判断后缀是.m4s还是.blv
if [ -f $bili_dir$cache/$video/*/video.m4s ]; then
ffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/$part.mp4
else
ffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/$part.mp4
fi
echo -e "t033[1;32m视频033[0m033[1;31m$part.mp4033[0m033[1;32m合成完成033[0m"
else
echo -e "t033[1;31m$part.mp4033[0m033[1;32m已存在033[0m"
fi
else
#判断是否输出过
if [ ! -f $output_dir$title/$part.mp4 ]; then
echo -e "t033[1;32m输出第033[0m033[1;31m$page033[0m033[1;32m个视频033[0m"
#判断后缀是.m4s还是.blv
if [ -f $bili_dir$cache/$video/*/video.m4s ]; then
ffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/$part.mp4
else
ffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/$part.mp4
fi
echo -e "t033[1;32m视频033[0m033[1;31m$part.mp4033[0m033[1;32m合成完成033[0m"
else
echo -e "t033[1;31m$part.mp4033[0m033[1;32m已存在033[0m"
fi
fi
else
#判断是否输出过
if [ ! -f $output_dir$title/$part.mp4 ]; then
echo -e "t033[1;32m输出第033[0m033[1;31m$page033[0m033[1;32m个视频033[0m"
#判断后缀是.m4s还是.blv
if [ -f $bili_dir$cache/$video/*/video.m4s ]; then
ffmpeg -i $bili_dir$cache/$video/*/video.m4s -i $bili_dir$cache/$video/*/audio.m4s -c copy $output_dir$title/$part.mp4
else
ffmpeg -i $bili_dir$cache/$video/*/0.blv -c copy $output_dir$title/$part.mp4
fi
echo -e "t033[1;32m视频033[0m033[1;31m$part.mp4033[0m033[1;32m合成完成033[0m"
else
echo -e "t033[1;31m$part.mp4033[0m033[1;32m已存在033[0m"
fi
fi
done
}
#判断视频类型
if [[ $cache == s* ]]; then
echo -e "t033[1;37m视频类型:番剧033[0m"
story
else
echo -e "t033[1;37m视频类型:肥皂剧033[0m"
soap
fi
;;
*)
echo -e "033[1;31mExit033[0m"
exit
esac
}
#运行脚本
for((;;))
do
look_dir
read_n
done
#文件名过滤
dir_filtration()
{
name=${name//[[:space:]]/_}
return $name
}
本文为原创文章——未经作者授权禁止转载