哔哩哔哩视频下载,哔哩哔哩动画下载,blibli视频下载电脑
哔哩哔哩视频重命名
================================
©Copyright 蕃薯耀 2021-02-26
http://fanshuyao.iteye.com/
没图片,请移步:
https://www.cnblogs.com/fanshuyao/p/14451413.html
哔哩哔哩视频下载需要使用电脑软件:哔哩哔哩动画
一、哔哩哔哩动画,当前版本是:v2.13.10,微软官网下载地址:
https://www.microsoft.com/zh-cn/p/%e5%93%94%e5%93%a9%e5%93%94%e5%93%a9%e5%8a%a8%e7%94%bb/9nblggh5q5fv?activetab=pivot:overviewtab
二、通过软件下载的视频不规范,需要重命名哔哩哔哩视频的名称
每个视频都生成一个目录,太杂乱
文件夹下的视频名称很不明确
三、通过软件整理视频的名称
整理后的效果:
软件下载地址:
链接: https://pan.baidu.com/s/1PB6C5AczNEF9kPw7FnetuQ 提取码: vdvw
基于Jdk8运行使用:
软件运行截图:
四、核心代码
import java.io.File; import java.util.Date; import java.util.LinkedList; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Service; import com.lqy.blibli.video.VideoComparator; import com.lqy.blibli.video.service.VideoService; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.json.JSONUtil; @Service public class VideoServiceImpl implements VideoService{ private Log log = LogFactory.getLog(getClass()); @Override public void saveVideos(String sourcePath, String destinationPath) { log.info("sourcePath=" + sourcePath); log.info("destinationPath=" + destinationPath); if(StringUtils.isBlank(sourcePath)) { throw new RuntimeException("源路径不能为空"); } File sourceDir = new File(sourcePath); if(!sourceDir.exists()) { throw new RuntimeException("源路径不存在"); } if(!sourceDir.isDirectory()) { throw new RuntimeException("源路径不是文件夹"); } File[] files = sourceDir.listFiles(); if(files == null || files.length < 1) { log.warn("源路径无文件"); throw new RuntimeException("源路径无文件"); } String destinationPathDirName = ""; LinkedList<File> dirFiles = new LinkedList<File>(); //获取文件和主目录名 for (File file : files) { if(file.isFile()) {//文件 String fileName = file.getName(); if(fileName.endsWith(".dvi")) { String dviFileString = FileUtil.readUtf8String(file); if(!StringUtils.isBlank(dviFileString)) { @SuppressWarnings("unchecked") Map<String, Object> dviMap = JSONUtil.toBean(dviFileString, Map.class); destinationPathDirName = (String) dviMap.get("Title"); } }else { continue; } }else { dirFiles.add(file); } } if(StringUtils.isBlank(destinationPathDirName)) { destinationPathDirName = new Date().getTime() + ""; } if(StringUtils.isBlank(destinationPath)) { destinationPath = sourceDir.getParent() + File.separator + destinationPathDirName; } //创建目标文件夹 if(!StringUtils.isBlank(destinationPath)) { File destinationPathDir = new File(destinationPath); if(!destinationPathDir.exists()) { destinationPathDir.mkdirs(); } } //对dirFiles排序 CollectionUtil.sort(dirFiles, new VideoComparator()); //复制文件 for (File dirFile : dirFiles) {//循环目录 log.warn("dirFile=" + dirFile.getAbsolutePath()); String dirFileName = dirFile.getName(); log.warn("dirFileName=" + dirFileName); File videoFile = null; String videoName = ""; File[] videoFiles = dirFile.listFiles(); for (File file : videoFiles) { String fileName = file.getName(); log.warn("fileName=" + fileName); if(fileName.endsWith(".mp4")) { videoFile = file; continue; } if(StringUtils.isBlank(videoName)) { if(fileName.endsWith(".info")) { String infoFileString = FileUtil.readUtf8String(file); if(!StringUtils.isBlank(infoFileString)) { @SuppressWarnings("unchecked") Map<String, Object> dviMap = JSONUtil.toBean(infoFileString, Map.class); String PartName = (String) dviMap.get("PartName"); log.warn("PartName=" + PartName); String prefix = this.getNamePrefix(dirFileName); log.warn("prefix=" + prefix); if(StringUtils.isNotBlank(PartName)) { videoName = prefix + PartName; }else { videoName = prefix + fileName; } } } } } if(videoFile != null) { String destinationFile = destinationPath + File.separator + videoName + ".mp4"; log.info("destinationFile=" + destinationFile); FileUtil.copy(videoFile, new File(destinationFile), true); log.info("++++++++++++++++++++++++++++++++++++++++++++++"); } } log.info("================结束================"); } private synchronized String getNamePrefix(String number) { Integer num = Integer.parseInt(number); String numString = ""; if(num < 10) { numString = "00"; } if(num >= 10 && num < 100) { numString = "0"; } String name = numString + num + "-"; //log.info("number=" +number); //log.info("name=" +name); return name; } }
(如果文章对您有所帮助,欢迎捐赠,^_^)
================================
©Copyright 蕃薯耀 2021-02-26
http://fanshuyao.iteye.com/
相关推荐
仿bilibili哔哩哔哩视频网站主页源码模板 仿bilibili网站主页源码 哔哩哔哩(bilibili)现为国内领先的年轻人文化社区,该网站于2009年6月26日创建,被粉丝们亲切的称为“B站”。B站的特色是悬浮于视频上方的实时...
仿照哔哩哔哩写的,也参考各路大神,基于Wex5开发工具的
粉色的哔哩哔哩手机视频网页,多媒体视频类微信小程序ui前端模板下载。包含:视频主页和播放详情页。
【MATLAB实战应用代码】MATLAB爬取哔哩哔哩视频.zip
哔哩哔哩对视频进行了处理. 将视频,弹幕,音轨分3个文件储存,一直打开文件夹最后会看到video(视频),audio(音频)两个m4s文件,以视频方式打开video只会有视频,没有声音,打开audio只有声音没有视频(T_T). ...
jQuery仿哔哩哔哩视频弹幕代码是一款基于Dplayer.js制作视频文字弹幕。
基于 Node.js 和 Electron 开发的 Bilibili 视频、弹幕下载器。 功能 目前实现的功能: 根据视频地址查询 aid 和 cid 以及视频详细信息 根据视频 cid 获取视频和弹幕文件的下载地址 下载视频(.flv 或 .mp4)和弹幕...
meterial design 使用circularReveal仿哔哩哔哩(bilibili)搜索框动画
模仿哔哩哔哩的视频点播网站源码+项目说明.zip模仿哔哩哔哩的视频点播网站源码+项目说明.zip模仿哔哩哔哩的视频点播网站源码+项目说明.zip模仿哔哩哔哩的视频点播网站源码+项目说明.zip模仿哔哩哔哩的视频点播网站...
微信小程序仿哔哩哔哩视频站demo完整源码.zip
仿哔哩哔哩视频共享平台设计
Miko二次元动漫视频网站源码 视频播放带仿哔哩哔哩视频字幕弹幕网站源码 Dz后台管理方便,整站数据都设置好了,传上即可制作一个完整的动漫网1.源码上传到空间 2.把数据库文件.sql 上传到数据库里 3.后台 域名/admin...
微信小程序仿哔哩哔哩视频站demo完整源码
jQuery仿哔哩哔哩视频弹幕代码, jQuery仿哔哩哔哩视频弹幕代码
哔哩哔哩视频上传软件可以批量上传视频,软件可以批量导入账号、视频、标题。自动填写标题、标签、简介。可以设置时间间隔,支持ADSL拨号切换IP!
互联网文创企业战略财务分析——以哔哩哔哩视频企业为例.pdf
基于Python的“哔哩哔哩视频网“视频热度分析.doc
安装说明: 测试环境:宝塔面板 Ng1.18 PHP5.6 mysql5.6 需要修改的文件是以下三个: 安装目录/config/config_global.php 安装目录/config/config_ucenter.php 安装目录/uc_server/data/config.inc.php ...
Bilibli深度分析