录慕课网下载网课视频操作(Linux下执行bash获取)

如何从慕课网下载网课?
原本打算利用chrome插件中的Violentmonkey来实现,但是使用后发现2019年11月的最新脚本已经失效了,于是便自己写了一段脚本来实现从慕课网下载视频片段,拼接从完整视频,最后转码,添加字幕。

1.先说说原理吧
从在chrome中登录慕课网,进入网站,加载视频。这时候打开chrome的开发者工具(DevTool),在Network中可以看到加载了一个已video?videoId=开头的请求,该请求的request中有一个json文件,包含了名称、字幕地址、视频的m3u8文件地址。视频是通过m3u8文件里的一串ts格式的视频片段组成的。只要生成这些ts的下载地址,就完成了!

2.代码

#!/bin/bash
##########该工具仅限学习交流使用,不可用于其他目的,一切后果自负##########
######################by Nautilus,20200302######################
#########在登录慕课网,且加载了所需下载视频的页面情况下才能获取参数########

#手动设置课程文件名称,从chrome中获取video?videoId=的网址,设置完后自动下载
#手动设置文件名称
newname="6.1态度与投入"
#手动设置网址
url="https://vod.study.163.com/eds/api/v1/vod/video?videoId=1215418683&signature=……&clientType=1"

#####开始自动处理文件####
randompath=$(date +%s%N)$RANDOM
mkdir "./.${randompath}"
cd "./.${randompath}"

wget -O jsontmp $url

#获取视频

getvideo=`grep -oP "quality\":3.*.http.*?.\"" jsontmp`
if [[ $getvideo == ''  ]]
then
getvideo=`grep -oP "quality\":2.*.http.*?.\"" jsontmp`
fi
getvideo=${
     getvideo##*http}
getvideo="http$getvideo"
getvideo=`echo $getvideo | sed 's/\"//g'`
wget -O tmp.m3u8 -c $getvideo
sed -e '/^#/d' tmp.m3u8 >tmp.m2
url=${getvideo%.m3u8*}
end=`grep -oP 'hd.*.$' tmp.m2 |sed -n '$p'`
end=${
     end#*hd}
end=${end%.*}

last=".ts"
for ((i=0;i<=$end;i++));
do
echo "从${url}${i}${last} 下载到/.${randompath}/${i}${last}"
wget -O "${i}${last}" "${url}${i}${last}"
done

for ((i=0;i<=$end;i++)) do echo "${i}${last}" ;done | xargs -i cat {
     } >>"${newname}.ts"
ffmpeg -y -i "${newname}.ts" -vcodec copy -acodec copy -vbsf h264_mp4toannexb "${newname}tmp.mp4"

#获取字幕
getsrt=`grep -o "中文" jsontmp `
if [[ $getsrt != '' ]]
then
titlestart="中文\",\"url\":\""
titleend="\"*"
aaa=$(cat jsontmp)
aaa=${
     aaa#*$titlestart}
aaa=${aaa%%$titleend}
wget -O tmp.srt $aaa
ffmpeg -i  "${newname}tmp.mp4" -i "tmp.srt" -c:s mov_text -c:v copy -c:a copy "../${newname}.mp4"
else 
mv "${newname}tmp.mp4" "../${newname}.mp4"
fi

#扫尾处理
cd "../"
rm -r "./.${randompath}"

注意:需要手动设置newname和url两个参数。newname就是最终生成视频的名称,url就是从chrome中获取的video?videoId=开头的网址。填写好之后,保存为getVideo.sh文件,并给予执行权限就可以了。

由于是第一次编写bash,很多命令不是很清楚,处理字符串应该有更简便的方法,没办法只能凑合用吧。

你可能感兴趣的:(Linux,bash,linux,bash,视频处理,download)