安卓网页视频抓取工具( 一个辅助提取B站Android客户端缓存视频的小工具介绍 )
优采云 发布时间: 2021-12-02 09:16安卓网页视频抓取工具(
一个辅助提取B站Android客户端缓存视频的小工具介绍
)
[C# | [Unity] B站Android客户端缓存视频提取工具
这篇文章文章用了一个笨方法,后来在网上看到了you-get工具,可以通过URL直接从命令行下载视频,并且支持批量下载。
B站只允许使用手机缓存视频,但是缓存的视频分散在不同的文件夹中,每个视频的名字都是0.blv。不点击打开,不知道是哪个视频,所以写了个小工具,辅助从B站Android客户端提取缓存的视频。
因为Unity正好是开放的,所以我直接在Unity中写了下面的代码,所以使用了一些特殊的Unity类。如果要在其他地方使用以下代码,则需要替换文章中提到的几个特殊类。失去。
指示
该工具用于处理视频量相对较大的视频集。如果是单个视频,只需手动复制视频并重命名即可。
用法非常简单。视频缓存到手机后,将手机连接电脑,打开视频缓存文件夹,将缓存集合拖到电脑上,然后在Unity Inspector面板中填写视频位置信息,点击Extract。完成提取。如果你不想在Unity中使用它,你需要替换下面提到的特殊类,然后调用ExtractVideoFile()方法来提取视频。
注:代码中使用cut方法对视频进行处理。如果不从手机复制缓存的视频直接运行代码,缓存的视频会被剪切到其他位置。如果不想剪切,可以将代码中的 File.Move() 方法改为 File.Copy() 方法。
参数示例
备注:部分视频合集中的部分单集视频会被分成多个视频文件(例如:0.blv、1.blv、2.blv等),没有处理方法在这里。如果遇到这种情况,可以进行多次提取,每次提取时修改源文件名参数VideoName和输出文件扩展名参数OutputExt(例如:VideoName:"1.blv", OutputExt:"-< @1.flv")。多次解压时,解压后的文件会报错找不到视频文件,可以忽略。
B站Android客户端的一些相关资料
使用的特殊类和方法
源代码
<p>using System.IO;
using UnityEngine;
public class BilibiliTool : MonoBehaviour
{
/** 说明
* B站Android客户端缓存视频的存放文件夹是“手机内部存储\Android\data\tv.danmaku.bili\download\”;
* 具体的视频路径是“手机内部存储\Android\data\tv.danmaku.bili\download\\\\”;
* 存储每个视频的信息的文件是“手机内部存储\Android\data\tv.danmaku.bili\download\\\entry.json”;
* 上述说明中的、、、需要根据下载的文件的具体名称进行修改,代码中的“domain”参数就是“lua.xxx.xxx.xxx”部分。
*/
// 默认值仅作示例,每个视频集的avid和视频父文件夹名称都不一样,要进行相应的修改
public string inputFolder = @"E:\资料\视频教程\46312220\";
public string outputFolder = @"E:\资料\视频教程\线性代数\";
public string domain = "lua.flv720.bili2api.64";
public int startNumber = 1;
public int endNumber = 116;
public string videoName = "0.blv";
public string outputExt = ".flv";
public string jsonName = "entry.json";
[Header("点击勾选框执行提取")]
public bool extract = false;
private void OnValidate()
{
if (extract)
{
extract = false;
ExtractVideoFile(inputFolder, outputFolder, domain, startNumber, endNumber, videoName, outputExt, jsonName);
}
}
///
/// 提取视频文件。
///
/// 存放下载的原始视频的文件夹
/// 提取视频的输出文件夹
/// 原始视频文件路径中格式为“lua.x.x.x”的文件夹的名称
/// 视频合集中视频的起始编号
/// 视频合集中视频的结束编号
/// 原始视频名称(默认为0.blv)
/// 输出视频文件的扩展名(默认为flv)
/// 存储视频信息的Json文件的名称(默认为entry.json)
public void ExtractVideoFile(string inputFolder, string outputFolder, string domain, int startNumber, int endNumber, string videoName = "0.blv", string outputExt = ".flv", string jsonName = "entry.json")
{
// 检查输入路径
if (!Directory.Exists(inputFolder))
{
Debug.LogError("文件路径不存在。", this);
return;
}
// 检查输出路径
if (!Directory.Exists(outputFolder))
{
Directory.CreateDirectory(outputFolder);
}
// 移动和重命名
for (int i = startNumber; i