文章目錄
版本
2020-08-11: init 本文的工具都是這個時候的 可能后面有些支持.
概述
最近看到這個視頻課程: 【吳恩達團隊Tensorflow2.0實踐系列課程第一課】TensorFlow2.0中基于TensorFlow2.0的人工智能、機器學習和深度學習簡 就想下載到本地 防止被和諧… 所以就使用you-get 下載. you-get 這個 repo clone下來就可以了: 官方repo. 想著以前也提交過代碼 再看看也沒啥大問題.
使用下載
使用如下命令:
you-get --debug --playlist https://www.bilibili.com/video/BV1zE411T7nb
這個下載沒有問題, 但是我發現中文字幕沒有了.
所以繼續研究了下 如何下載
觀察視頻, 發現字幕是可以拖動的, 于是加上firefox 斷點
加上斷點后攔截請求, 發現有一個請求會初始化對應的subtitles
像上面這個復制為curl 就可以測試:
curl 'https://api.bilibili.com/x/player.so?id=cid%3A162260003&aid=95051759&bvid=BV1zE411T7nb&buvid=FB2BB46F-B1F3-4BDA-A589-333489Q4e0411A155830infoc' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0' -H 'Accept: */*' -H 'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2' --compressed -H 'Origin: https://www.bilibili.com' -H 'Referer: https://www.bilibili.com/video/BV1zE411T7nb' -H 'Connection: keep-alive' -H $'Cookie: _uuid=3FFA2652-F830-7C37-F9A4-333489Q4e0411A155830infoc; buvid3=FB2BB46F-B1F3-4BDA-A589-33348940411A155830infoc; sid=cejpsw6m; CURRENT_FNVAL=16; LIVE_BUVID=AUTO9515820831073003; rpdid=|(k)~RY~mkk|0J\'ul)k|)Juuk; im_notify_type_11615329=0; DedeUserID=11615329; DedeUserID__ckMd5=7c197013cd07c4b6; SESSDATA=b2ce8c5b%2C1600861501%2Ca9549*31; bili_jct=b7000d5d160ed086c798d55808a55f75; PVID=2; CURRENT_QUALITY=80; bsource=search_google; flash_player_gray=false; html5_player_gray=false; bfe_id=6f285c892d9d3c1f8f020adad8bed553' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'TE: Trailers'
這里面需要cid, aid, bvid和 buvid. 只有最后這個buvid不知道是干啥的, 折騰了很久 發現 這個是cookie 中的uuid. 然后經過一些測試后 發現該請求 還需要一個Reffer 不然會報錯-412 (應該就是412 估計是b站自己定義的錯誤碼, 412 意味著前置條件未滿足):
所以獲取該url的最簡單地請求是:
https://api.bilibili.com/x/player.so?id=cid%3A162260003&aid=95051759&bvid=BV1zE411T7nb&buvid=FB2BB46F-B1F3-4BDA-A589-333489Q4e0411A155830infocwith header -H 'Referer: https://www.bilibili.com/video/BV1zE411T7nb' 后面這個是bv號
解析上面的xml輸出
<ip>110.184.137.149
</ip>
<zoneid>4538384
</zoneid>
<zoneip></zoneip>
<country>中國
</country>
<login>true
</login>
<time>1597112522
</time>
<name>scugxl
</name>
<user>11615329
</user>
<user_hash>3f9ed8c9
</user_hash>
<money>681.20
</money>
<face>//i0.hdslb.com/bfs/face/member/noface.jpg
</face>
<isadmin>false
</isadmin>
<permission>10000,1001
</permission>
<level></level>
<level_info>{"current_level":4,"current_min":4500,"current_exp":8127,"next_exp":10800}
</level_info>
<answer_status>0
</answer_status>
<vip>{"vipType":0,"vipDueDate":0,"dueRemark":"","accessStatus":0,"vipStatus":0,"vipStatusWarn":""}
</vip>
<official_verify>{"type":-1,"desc":""}
</official_verify>
<block_time>0
</block_time>
<lastplaytime>18000
</lastplaytime>
<lastcid>162260003
</lastcid>
<aid>95051759
</aid>
<bvid>BV1zE411T7nb
</bvid>
<typeid>201
</typeid>
<vtype>vupload
</vtype>
<oriurl></oriurl>
<suggest_comment>false
</suggest_comment>
<server>chat.bilibili.com
</server>
<maxlimit>1000
</maxlimit>
<chatid>162260003
</chatid>
<pid>1
</pid>
<duration>75:37
</duration>
<arctype>Original
</arctype>
<allow_bp>false
</allow_bp>
<bottom>0
</bottom>
<shot>false
</shot>
<sinapi>1
</sinapi>
<acceptguest>false
</acceptguest>
<acceptaccel>false
</acceptaccel>
<cache>false
</cache>
<broadcast_tcp>broadcast.chat.bilibili.com:4080
</broadcast_tcp>
<broadcast_ws>broadcast.chat.bilibili.com:4090
</broadcast_ws>
<broadcast_wss>broadcast.chat.bilibili.com:4095
</broadcast_wss>
<default_dm>0
</default_dm>
<dm_host>0://comment.bilibili.com,1://comment.bilibili.com/rc
</dm_host>
<role>0
</role>
<has_next>1
</has_next>
<online_count>6
</online_count>
<dm_mask></dm_mask>
<mask_new></mask_new>
<subtitle>{"allow_submit":false,"lan":"","lan_doc":"","subtitles":[{"id":23916631605379079,"lan":"zh-CN","lan_doc":"中文(中國)","is_lock":false,"subtitle_url":"//i0.hdslb.com/bfs/subtitle/dfb81041cf92b5c2ebce2540cd14c9e49674f460.json"}]}
</subtitle>
<player_icon></player_icon>
<view_points></view_points>
<is_pay_preview>false
</is_pay_preview>
<preview_toast>為創作付費,購買觀看完整視頻|購買觀看
</preview_toast>
<interaction></interaction>
<pugv_watch_status>0
</pugv_watch_status>
<pugv_pay_status>0
</pugv_pay_status>
<pugv_season_status>0
</pugv_season_status>
<pcdn></pcdn>
<pcdn_loader>{"flv":{"vendor":"xl","script_url":"\/\/s1.hdslb.com\/bfs\/static\/pcdnjs\/pcdn-xlflv-20.07.20.min.js","group":"eg","labels":{"pcdn_video_type":"flv","pcdn_stage":"release","pcdn_group":"eg","pcdn_version":"20.07.20","pcdn_vendor":"xl"}},"dash":{"vendor":"yf","script_url":"\/\/s1.hdslb.com\/bfs\/static\/pcdnjs\/pcdn-yfdash-20.07.03.min.js","group":"eg","labels":{"pcdn_video_type":"dash","pcdn_stage":"release","pcdn_group":"eg","pcdn_version":"20.07.03","pcdn_vendor":"yf"}}}
</pcdn_loader>
<options>{"is_360":false}
</options>
<guide_attention></guide_attention>
<new_broadcast>1
</new_broadcast>
<realtime_dm>1
</realtime_dm>
<enable_gray_dash_playback>500
</enable_gray_dash_playback>
上面的輸出有個很重要的url就是 subtitles中的json url:
{"allow_submit":false,"lan":"","lan_doc":"","subtitles":[{"id":23916631605379079,"lan":"zh-CN","lan_doc":"中文(中國)","is_lock":false,"subtitle_url":"//i0.hdslb.com/bfs/subtitle/dfb81041cf92b5c2ebce2540cd14c9e49674f460.json"}]}
下載這個json后 我找到了最終的中文字幕:
格式如下:
4. 將json轉為srt字幕
參考的: 這里
修改you-get 代碼
修改之后的commit在這里 可以直接用我的repo. (可能需要修改下buvid的值 每個人應該不一樣 或者用 you-get的cookie file 應該也可以 我沒去測試).
結論
下載了所有課程并共享到百度云了 百度云 鏈接: https://pan.baidu.com/s/1S93he0skiUwAihUH309-2Q 密碼: sn5a以后有時間了把代碼merge到 you-get 中 現在懶得提PR了.有個小疑問, 有沒有什么快速的辦法在FIREFOX中搜索某個字符串是哪個url返回的呢? 可能前端的同學更加清楚修改后的代碼 在: https://github.com/gaoxingliang/you-get/
總結
以上是生活随笔為你收集整理的如何用you-get 下载bilibili 视频以及字幕的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。