阅读 165

Windows UWP 哔哩哔哩(B站)缓存视频重命名工具

写在上面的总结

B站视频下载,使用下来,感觉比较好用的就Windows Store的UWP应用 哔哩哔哩 和Python平台的工具you-get了。

you-get需要Python环境,UWP版的哔哩哔哩需要从Windows store下载。


本文章写的是从 UWP版的哔哩哔哩中缓存下来的视频重命名等处理。

背景

最近发现B站上面一些比较好的视频,想要将它下载本地,当时逛Github的时候,发现一个Python小工具,使用的是Windows应用商城中的哔哩哔哩的缓存功能,然后修改名称的方法。
Windows UWP 哔哩哔哩(B站)缓存视频重命名工具

Windows UWP 哔哩哔哩(B站)缓存视频重命名工具
Windows UWP 哔哩哔哩(B站)缓存视频重命名工具

试用了下,可以实现功能,看了下源码,是很简单的文本字符串处理、文件重命名、文件移动、遍历文件夹功能。
Windows UWP 哔哩哔哩(B站)缓存视频重命名工具
正好最近在学习PowerShell,所以就试用PowerShell重写了此功能。

GitHub: https://github.com/shuimqcn/bilibili_video_rename_tool/blob/master/app.ps1

...
下载好的一个视频目录结构:

F:\Bilibili_Cache\200857352>tree /F
卷 新加卷 的文件夹 PATH 列表
卷序列号为 54A8-0707
F:.
│ 200857352.dvi
│ cover.jpg
│ desktop.ini

├─1
│ 200857352.info
│ 200857352_1.xml
│ 200857352_1_0.mp4

├─10
│ 200857352.info
│ 200857352_10.xml
│ 200857352_10_0.mp4

├─2
│ 200857352.info
│ 200857352_2.xml
│ 200857352_2_0.mp4

├─3
│ 200857352.info
│ 200857352_3.xml
│ 200857352_3_0.mp4

├─4
│ 200857352.info
│ 200857352_4.xml
│ 200857352_4_0.mp4

├─5
│ 200857352.info
│ 200857352_5.xml
│ 200857352_5_0.mp4

├─6
│ 200857352.info
│ 200857352_6.xml
│ 200857352_6_0.mp4

├─7
│ 200857352.info
│ 200857352_7.xml
│ 200857352_7_0.mp4

├─8
│ 200857352.info
│ 200857352_8.xml
│ 200857352_8_0.mp4

└─9
200857352.info
200857352_9.xml
200857352_9_0.mp4

说明:
1、视频名称位于根目录下的“200857352.dvi”文件中的“Title”字段。
2、一套视频有几节,以数字1开始进行命名子文件夹
3、数字子文件夹中的mp4文件就是每节的视频文件
4、数字子文件夹中的xml文件保存的是弹幕(猜测)
5、每节视频的课程名位于“info”文件的“PartName”字段

运行效果:
运行前:
Windows UWP 哔哩哔哩(B站)缓存视频重命名工具
运行:
Windows UWP 哔哩哔哩(B站)缓存视频重命名工具
运行后:
Windows UWP 哔哩哔哩(B站)缓存视频重命名工具
Windows UWP 哔哩哔哩(B站)缓存视频重命名工具

直接上代码:以后再来修改调整博客具体内容。

登录后复制

<#背景:通过Windows应用商店的Windows App 哔哩哔哩可以直接下载B站的视频
         不过是以视频AID命令的文件夹中,视频名称也不是正式的视频名称。

实现思路:
  1. 获取目的目录根目录下的子目录对象,和文件对象。
  2. 从文件对象中读取dvi文件得到视频课程的名称
  3. 循环遍历子目录
    1). 读取子目录中的info文件并取出“PartName”字段
    2). 以1).中读取的“PartName”字段,重命名MP4格式的文件#>$scripts_dir = Split-Path -Parent $MyInvocation.MyCommand.Definition # 脚本所在路径# $root_path = $args    # $args用于命令行传参数$root_path = "F:\Bilibili_Cache\200857352\"

write-host "------------------------------------------------------"
write-host "进入根目录:" $root_path.FullName
write-host "------------------------------------------------------"
Set-Location $root_path # 切换到传入参数的需要操作目录
write-host "获取课程文件夹信息"
write-host "------------------------------------------------------"$split_dir = Get-ChildItem -Path $root_path -Directory  # 获取根目录下的子文件夹对象$dvi_name = (Get-ChildItem -Path $root_path -File | Where-Object -FilterScript {$_.Name -like "*.dvi"} ).Name # 获取根目录下的“.dvi”文件名称$serial_video_name = (Get-Content $root_path$dvi_name -Encoding utf8 | ConvertFrom-Json).Title  # 读取根目录下的dvi文件获得视频课程的名称
write-host "获取课程文件夹信息成功"
write-host "------------------------------------------------------"
<#
write-host "子目录对象:" $split_dirwrite-host "dvi文件名:" $dvi_namewrite-host "视频课程名称:" $serial_video_name#>

write-host "新建课程文件夹信息"
write-host "------------------------------------------------------"

# 以课程名称创建文件夹
# 判断文件夹是否存在,存在删除后新建$path_isexist = (Test-Path ((Get-Location).Path.ToString() +"\*") -Include $serial_video_name)
 if ( $path_isexist -eq $true ){
      Remove-Item -Path $serial_video_name    # 删除旧的课程目录
      New-Item $serial_video_name -ItemType Directory    # 新建课程目录
 }else{
      New-Item $serial_video_name -ItemType Directory    # 新建课程目录
 }

write-host "------------------------------------------------------"
write-host "处理课程目录"
write-host "------------------------------------------------------"

# 循环遍历子目录,将子目录中的.info文件的“PartName”字段取出,作为mp4格式文件的文件名
ForEach ($subdir in $split_dir){

     write-host "进入子目录" $subdir.FullName
     Set-Location $subdir   #进入子目录     $subvideoname = ((Get-Content -Encoding utf8 (Get-ChildItem $subdir.FullName  "*.info" ).FullName ) | ConvertFrom-Json).PartName  # 从info文件中取得子视频的名称     $subvideoname = ($subvideoname).ToString() + ".mp4"   # 文件名加上后缀

     write-host "当前子目录中的视频名称为:" (Get-ChildItem -Filter  "*.mp4").FullName

     (Get-ChildItem  -Filter "*.mp4") | Rename-Item -NewName $subvideoname   # 子目录的mp4格式文件重命名

     Move-Item (Get-ChildItem -Filter "*.mp4" ).FullName ($subdir.Parent.FullName.ToString() + "\" + $serial_video_name )  # 将mp4文件拷贝到上级目录下实现建立的课程目录中

     Set-Location $subdir.Parent.FullName  # 返回上级目录
}
write-host "处理结束:"
write-host "------------------------------------------------------"

Set-Location $scripts_dir # 回到脚本所在路径

©著作权归作者所有:来自51CTO博客作者水幕青辰的原创作品,如需转载,请注明出处,否则将追究法律责任


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐