b站安卓手机下载视频后使用matlab自动转为mp4文件并归档

zz/2024/7/24 2:29:34

第一步:
首先我们新建一个文件夹,比如我这里的第一个文件夹:b站视频。在这里插入图片描述
第二步:
在matlab中创建新函数用ffmpeg软件来合并b站视频。我这里是matlab2019a,有些版本可能有些matlab自带函数不支持
代码如下:

function bilibili_Video_combined
%%确保根文件夹中的子文件夹名称都是数字
%%根文件夹包含三个转换文件
path=[uigetdir,'\'];
file1=[path,'b站m4s转MP4.bat'];
file2=[path,'b站blv转MP4.bat'];
% try
% rmdir([path,'输出视频']);
% catch
% end
pathall=dir(path);
pathall=struct2cell(pathall);
pathall=pathall(1,cell2mat(pathall(5,:))==1)';
pathall=pathall(3:end);
[~,loc]=sort(cellfun(@str2double,pathall));
pathall=pathall(loc);
%%第一阶段:生成输出视频
for i=1:size(pathall,1)
try
path1=([path,pathall{i},'\']);%path1是pathall的延伸
path2=dir(path1);
path2=struct2cell(path2);
path2=path2(1,cell2mat(path2(5,:))==1)';
path2=path2(3:end);
[~,loc]=sort(cellfun(@str2double,path2));
path2=path2(loc);
for ii=1:size(path2,1)
path3=([path1,path2{ii},'\',]);
[dirall,~,dirsize]=file_thorough(path3,[],[],[]);
m4s='\S+m4s';
out1 = rmempty_cellarray(regexp(dirall,m4s,'match'));
blv='\S+blv';
out2 = rmempty_cellarray(regexp(dirall,blv,'match'));
if isempty(out1)~=1loc=find(out1{1}{1}=='\');path4=out1{1}{1}(1:loc(end));trycopyfile(file1,path4);   catchdisp([path4,'已存在bat文件']);    endwinopen([path4,'b站m4s转MP4.bat']);pause(round(sum(dirsize)/10000000));
%     pause(3);
end
if isempty(out2)~=1loc=find(out2{1}{1}=='\');path4=out2{1}{1}(1:loc(end));trycopyfile(file2,path4);   catchdisp([path4,'已存在bat文件']);    endwinopen([path4,'b站blv转MP4.bat']);pause(round(sum(dirsize)/10000000));
%     pause(3);
end
disp(['子目录已进行',int2str(ii),'/',int2str(size(path2,1)),' 总目录已进行 ',...int2str(100*round((i)/(size(pathall,1)),3)),'%']);       
end
catch
disp('子目录文件不符合程序规范');       
end
endwhile 1  %判断所有的cmd窗口是否完成,再进行第二阶段[~,task]=system('query process');TF=strfind(task,'cmd.exe');if length(TF)<=1breakend
end
pause(2);
%%第二阶段:输出视频移动到同一个输出视频文件夹中for i=1:size(pathall,1)
path1=([path,pathall{i},'\']);
path2=dir(path1);
path2=struct2cell(path2);
path2=path2(1,cell2mat(path2(5,:))==1)';
path2=path2(3:end);
for ii=1:size(path2,1)
path3=([path1,path2{ii},'\',]);
[dirall,~,~]=file_thorough(path3,[],[],[]);
json='\S+entry.json';
out = rmempty_cellarray(regexp(dirall,json,'match'));
data=loadjson(out{1}{1},'Encoding','UTF-8');
try
title_mp4=data.page_data.download_subtitle;
title_path=data.title;
catch
title_mp4=data.title;
title_path=data.title;
end
mp4='\S+output.mp4';
out3 = rmempty_cellarray(regexp(dirall,mp4,'match'));
nostr='\/:*?"<>|';
for n=1:size(nostr,2)title_mp4(title_mp4==nostr(n))=' ';title_path(title_path==nostr(n))=' ';
end
warning off;
path9=[path,title_path,'\'];
mkdir(path9);
try
movefile(out3{1}{1},[path9,title_mp4,'.mp4']);
catch
try
disp(['未找到文件',out3{1}{1}]);
catch
disp('未找到文件');
end
end
end
end
%%测试进度

其中使用到的自己编的子函数有

  1. file_thorough顾名思义,遍历文件夹中的子文件
function [dirall,dirmap,dirsize]=file_thorough(folder1,dirall,dirmap,dirsize)
%%example:[dirall,dirmap]=file_thorough(path1,[],[],[]);命令例子
folder1=dir(folder1);for i1 = 1 : length(folder1)if( isequal( folder1( i1 ).name, '.' )||...isequal( folder1( i1 ).name, '..'))               % 如果不是目录则跳过elsefile1 = [folder1(i1).folder,'\',folder1( i1 ).name] ;if folder1(i1).isdir==0dirall=cat(1,dirall,{file1});    a=find(file1=='\');dirmap=cat(1,dirmap,length(a));filesize=dir(file1);dirsize=cat(1,dirsize,filesize.bytes);elsefolder2 = [folder1( i1 ).folder,'\',folder1( i1 ).name] ;[dirall,dirmap,dirsize]=file_thorough(folder2,dirall,dirmap,dirsize);endendend
  1. rmempty_cellarray,去除使用正则表达式regexp函数后找到的空的元胞。
function [out1,judge]=rmempty_cellarray(out1)
judge=nan(size(out1)); %完美的正则表达式无需判断数据中有错误的cell
for i=1:size(out1,1)for j=1:size(out1,2)judge(i,j)=double(~isempty(out1{i,j}));end
end
out1=out1(judge==1);
  1. loadjson,这个函数是在matlab fileexchange中下载的,链接如下:
    https://ww2.mathworks.cn/matlabcentral/fileexchange/33381-jsonlab-a-toolbox-to-encode-decode-json-files

第三步:
安装ffmpeg,具体详情关联
https://blog.csdn.net/xqhrs232/article/details/104230091?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158759776719195239856573%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=158759776719195239856573&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-4
安装ffmpeg,然后设置环境变量中的路径。

第四步:需要放入b站视频文件夹的bat脚本文件有
一:

@echo off
title=ffpeg B站视频合并脚本 2019年2月5日
echo 1、本脚本依赖于ffpeg 请将ffpeg添加到环境变量中
echo 2、放到视频的根目录下双击运行
:::定义变量并设置默认值
set FileName=output
set OriginalVideoType=blv
set PackageVideoType=mp4
::接收用户输入
::set /p FileName=输入文件名[默认名总合成]
::set /p OriginalVideoType=输入源视频格式[默认blv不用带点]
::set /p PackageVideoType=输入封装的格式[默认mp4不用带点]
::生成ffmpeng配置文件
for %%i in (*.%OriginalVideoType%*) do echo file '%%i' >> ff.txt
::调用ffmpeg合并视频
ffmpeg -f concat -i ./ff.txt -c copy %FileName%.%PackageVideoType%
::删除生成的ffmpeg配置文件
del ff.txt
::pause

以上文本保存为《b站blv转MP4.bat》
二:

ffmpeg -i video.m4s -i audio.m4s -c:v copy -c:a aac -strict experimental output.mp4

以上文本保存为《b站m4s转MP4.bat》

第五步:
将上述两个bat文件放入b站视频。
将安卓手机Android\data\tv.danmaku.bili\download目录下下载的b站视频复制到b
站视频文件夹中。
打开matlab2019a运行bilibili_Video_combined函数。
实际效果如图:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述非文字的子文件夹中的内容就是所要的mp4文件了。


http://www.ngui.cc/zz/2390112.html

相关文章

将bilibili缓存文件转换为MP4格式

最近有想要在b站上下载一些视频&#xff0c;但是目前只能在移动端缓存&#xff0c;并且格式不为普通的MP4格式&#xff0c;作为计算机专业学生当然要想办法解决这个问题啦 使用环境&#xff1a;win10 Ubuntu 18.04子系统 指令神马的都在Ubuntu18.04子系统上运行的&#xff0…

LinuxMint 下 B站 番 blv 缓存 转 mp4

参考https://www.littleqiu.net/archives/886 &#xff08;不过我使用绝对路径&#xff0c;ffmpeg报错&#xff0c;相对路径没问题&#xff09; 一、安装ffmpge sudo apt-get install ffmpeg 在视频目录/home/foo/Videos/s_6463/115195/lua.hdflv2.bb2api.bd下新建一个files.tx…

B站安卓端缓存的视频blv批量转换成完整MP4

B站安卓端缓存视频小段blv合并完整MP4过程前言缓存的视频导入电脑批量转换处理思路找到现成的轮子安装依赖把下载的开源项目复制到bash目录把要转换格式目录放到开源项目的目录利用脚本转换前言 B站不得不说是一个很好的学习网站&#xff0c;没有广告的用户体验更是没得说&…

苹果PD20W快充芯片严重缺货!如何拯救这个苹果PD充电器市场?

苹果PD20W快充芯片严重缺货&#xff01;如何拯救这个苹果PD充电器市场&#xff1f;乐得瑞LDR6023E QC转PD协议方案&#xff01; 整个PD20W电源芯片市场的状况是这样的 或许是这样的 乐得瑞推出新的解决办法——让传统的QC适配器也能够支持输出PD协议快充&#xff0c;这样不但…

LTH7B,LTH7r,LTH7x,LTH7s五脚锂电池充电芯片应用说明电路图

一、 概述 LTH7R.是恒流/恒压座充充电器芯片&#xff0c;主要应用于单节锂电池充电。无需外接检测电阻&#xff0c;其内部为 MOSFET 结构&#xff0c;因此无需外接反向二极管。 LTH7R.在大功率和高环境温度下可以自动调节充电电流以限制芯片温度。它的充电电压固定在 4.2V&…

立创开源|18650锂电池四路充电器

该工程为18650四路电池充电器&#xff0c;支持DC、Micro-USB、USB-typec输入&#xff0c;同时四路充电。 充电芯片采用价格便宜的TP4056&#xff0c;电池盒采用直插电池盒。 每节电池充电电流为1A&#xff0c;由于电流较大&#xff0c;使用MicroUSB或USB-C充电时不建议同时充超…

PD充电器诱骗取电方案详解5V9V12V15V20V

近几年开始流行PD协议充电器&#xff0c;因为其支持的电压多&#xff0c;功率大&#xff0c;通用性广&#xff0c;许多的大公司开始推出PD充电器。这种充电器都是采用Type-C接口&#xff0c;功率从18W到100W不等&#xff0c;广泛应用于手机、平板电脑、笔记本电脑充电器上&…

支持USB,PD充电协议芯片,PD3.0快充芯片

PD充电协议芯片,PD3.0快充芯片 20W55W65W55WPD快充协议芯片,PD3.0芯片方案介绍&#xff0c;适配器PD协议芯片&#xff0c;PD3.0充电协议芯片 RK837充电协议芯片,PD3.0快充芯片: 支持USBType-CPD标准 USB Type-C PD 其最高支持到100W快充 PD充电协议芯片,PD3.0快充芯片支持…

芯片驱动之充电芯片2

充电芯片4054学习手册 芯片封装管脚介绍芯片应用电路 芯片封装 管脚介绍 NAMEFUNCTIONCHRGOpen-Drain Charger Status indication pin. When the battery is charging, the CHRG pin is pulled low by an internal N-channel MOSFET. When the charge cycle is completed, a …

android充电器给mac充电,安卓充电器能不能给苹果充电?手机充电的几个误区

智能手机从兴起到现在也发展了四五年的时间&#xff0c;大多数用户都更换了多款手机设备&#xff0c;甚至有用户从苹果转到安卓再转回苹果。因此很多人家中都积累了各种不同的手机充电器(正规的名字叫电源适配器)。这些多余的电源放在家里很占空间&#xff0c;但丢弃了有觉得可…