寒假又双叒叕延长了,闲来无事(其实是不想学习)又捯饬起了用命令行来下载视频
希望这场瘟疫快点过去,再不让我去学校学习我就要疯啦!武汉加油!中国加油!
1 思路
下载指定URL的视频文件至创建的临时文件夹
如果该链接包含多P视频,可根据需要选择是否全P下载
如果下载的是FLV格式的视频的话,则先转码为MP4格式;
根据需要可以选择是否将MP4格式文件转码为MP3格式;
分别保存MP4文件和MP3文件至指定路径,并删除临时文件夹。
2 实现
2.1 工具
2.1 编写脚本
# accept parameters
options = commandArgs(trailingOnly = TRUE)
mp4Folder = options[1]
mp3Folder = options[2]
list = options[3]
URL = options[4]
# download video file(s)
if(!dir.exists("tempFolder")){dir.create("tempFolder", recursive = TRUE)}
setwd("tempFolder")
if(list == "list"){
system(paste("you-get -l --no-caption ", URL))
}else{
system(paste("you-get --no-caption ", URL))
}
# transcode flv file(s) to mp4 file(s) if necessary
flvFile = gsub(" ", "_", list.files())
file.rename(list.files(), flvFile)
mp4File = gsub(".flv", ".mp4", flvFile)
for(i in 1:length(mp4File)){
if(!flvFile[i] == mp4File[i]){
cat("\ntranscoding", flvFile[i], "to", mp4File[i], "\n\n")
system(paste("ffmpeg -i", flvFile[i], mp4File[i]))
}
}
cat("\ncopping" , mp4File, "from tempFolder to", mp4Folder, "\n\n")
file.copy(mp4File, mp4Folder)
# transcode mp4 file(s) to mp3 file(s) if necessary
if(!mp3Folder == "no_mp3"){
mp3File = gsub(".mp4", ".mp3", mp4File)
for(i in 1:length(mp3File)){
cat("\ntranscoding", mp4File[i], "to", mp3File[i], "\n\n")
system(paste("ffmpeg -i", mp4File[i], "-vn", mp3File[i]))
}
cat("\ncopping" , mp3File, "from tempFolder to", mp3Folder, "\n\n")
file.copy(mp3File, mp3Folder)
}
# clear tempFolder
cat("\nclearing tempFolder\n\n")
setwd("../")
unlink("tempFolder", recursive = TRUE, force = TRUE)
cat("done")
2.3 用法:
Windows系统安装R后,将R下的bin文件夹C:\Program Files\R\R-3.6.1\bin
添加到环境变量PATH中(忘了是不是默认添加的了,反正可以手动添加),之后打开命令提示符面板(快捷键win + x + c
),输入以下格式的内容。
Rscript bilidown.R mp4SaveFolder mp3SaveFolder list URL
一个一个地介绍上面的格式:
-
Rscript
调用R的Rscript命令以运行R脚本
-
bilidown.R
该脚本的命名,这个可以自定义
mp4SaveFolder
下载或转码的MP4文件存放路径,必须使用绝对路径。-
mp3SaveFolder
转码的MP3文件存放路径,必须使用绝对路径
<u>若不需要转码为MP3格式</u>,则必须使用
no_mp3
代替 -
list
选择是否下载所有分P视频,对于所有可分P网站都适用
<u>若只需要下载单个视频</u>,则必须使用
no_list
代替 URL
视频链接,注意链接中不能含有字符&
,否则会影响该命令行的运行,把URL中?
和&
后面的内容都删掉,只留下视频的原链接即可。
注意
该脚本的四个参数一个都不能少,不要问为什么(因为我太菜了|\——/|)
3 示例
3.1 单个视频下载
为了便于展示,MP3和MP4文件保存路径我均设为E:/badai/test
下载需求是需要转MP3且视频分P视频,因此参数使用自定义的MP3saveFolder
和no_list
C:\Users\Jay Chou>Rscript E:/badai/bilidown.R E:/badai/test E:/badai/test no_list https://www.bilibili.com/video/av33508491
site: Bilibili
title: 【鬼畜素材】汤家凤,你能睡得着觉,你有点出息没有!
stream:
- format: dash-flv720
container: mp4
quality: 高清 720P
size: 1.3 MiB (1387328 bytes)
# download-with: you-get --format=dash-flv720 [URL]
Downloading 【鬼畜素材】汤家凤,你能睡得着觉,你有点出息没有!.mp4 ...
100% ( 1.3/ 1.3MB) ├████████████████████████████████████████┤[2/2] 156 kB/s
Merging video parts... Merged into 【鬼畜素材】汤家凤,你能睡得着觉,你有点出息没有!.mp4
Skipping captions or danmaku.
[1] 0
[1] TRUE
copping .mp4 from tempFolder to E:/badai/test
[1] TRUE
transcoding .mp4 to .mp3
ffmpeg version 2.7 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
libavutil 54. 27.100 / 54. 27.100
libavcodec 56. 41.100 / 56. 41.100
libavformat 56. 36.100 / 56. 36.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 16.101 / 5. 16.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.100 / 1. 2.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '銆愰鐣滅礌鏉愩€戞堡瀹跺嚖锛屼綘鑳界潯寰楃潃瑙夛紝浣犳湁鐐瑰嚭鎭病鏈夛紒.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.36.100
description : Packed by Bilibili XCoder v2.0.2
Duration: 00:00:15.58, start: 0.000000, bitrate: 714 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 960x544, 653 kb/s, 24 fps, 24 tbr, 16k tbn, 48 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 53 kb/s (default)
Metadata:
handler_name : SoundHandler
Output #0, mp3, to '銆愰鐣滅礌鏉愩€戞堡瀹跺嚖锛屼綘鑳界潯寰楃潃瑙夛紝浣犳湁鐐瑰嚭鎭病鏈夛紒.mp3':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
description : Packed by Bilibili XCoder v2.0.2
TSSE : Lavf56.36.100
Stream #0:0(und): Audio: mp3 (libmp3lame), 44100 Hz, stereo, fltp (default)
Metadata:
handler_name : SoundHandler
encoder : Lavc56.41.100 libmp3lame
Stream mapping:
Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
size= 244kB time=00:00:15.54 bitrate= 128.4kbits/s
video:0kB audio:243kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.165393%
copping .mp3 from tempFolder to E:/badai/test
[1] TRUE
clearing tempFolder
done
C:\Users\Jay Chou>
结果展示:
3.2 多P视频下载
下载需求是需要转MP3且下载链接里的全P视频,因此参数使用自定义的MP3saveFolder
和list
该链接总共有13P视频,但只有前三集可以免费看,因此只能下载前三集
C:\Users\Jay Chou>Rscript E:/badai/bilidown.R E:/badai/test E:/badai/test list https://www.bilibili.com/bangumi/play/ep30134
you-get: Extracting 1 of 13 videos ...
site: Bilibili
title: 夏目友人帐:第1话 猫和友人帐
stream:
- format: flv
container: flv
quality: 高清 1080P
size: 143.2 MiB (150119613 bytes)
# download-with: you-get --format=flv [URL]
Downloading 夏目友人帐:第1话 猫和友人帐.mp4 ...
100% (143.2/143.2MB) ├████████████████████████████████████████┤[4/4] 3 MB/s
Merging video parts... you-get: Extracting 2 of 13 videos ...
Merged into 夏目友人帐:第1话 猫和友人帐.mp4
Skipping captions or danmaku.
site: Bilibili
title: 夏目友人帐:第2话 露神之祠
stream:
- format: flv
container: flv
quality: 高清 1080P
size: 126.3 MiB (132417588 bytes)
# download-with: you-get --format=flv [URL]
##############################################
############# 此处省略好多字 ###############
##############################################
Stream mapping:
Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
size= 244kB time=00:00:15.54 bitrate= 128.4kbits/s
video:0kB audio:243kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.165393%
copping .mp3 from tempFolder to E:/badai/test
[1] TRUE
clearing tempFolder
done
C:\Users\Jay Chou>
结果展示:
4 vip视频下载方法
经测试,对于B站来说:
- 非VIP视频的可获取的文件格式有MP4和FLV两种,分辨率与B站上的类别数相同,you-get默认下载最清晰的MP4格式的文件
- 对于VIP视频来说,可获得的视频格式只有FLV,且清晰度只有480P这一种,而且用以上方法只能下载免费试看的部分,B站是6分钟试看时间,所以对于那些视频本来就少于6分钟的来说,可以完全下载下来的;而时长大于6分钟就不行了
因此,想下载高清晰度的全长的VIP视频就要使用以下方法了:
加载cookie
并非所有视频可供任何人观看。如果需要登录以观看 (例如, 私密视频), 可能必须将浏览器cookie通过
--cookies
/-c
加载入you-get
.注意:
- 目前我们支持两种cookie格式:Mozilla
cookies.sqlite
和 Netscapecookies.txt
以上是you-get的官方中文教程,至于到底怎么使用cookie,俺也没搞清楚,网上没有详细的教程。
不过可以确定的是,首先你要有一个对应网站的VIP账号才行。