一只股票分析全面分析
安卓手機愛奇藝app中離線視頻導出
2020-03-23 09:25:15來源:閱讀:-

安卓手機愛奇藝app中離線視頻導出:

通常我在愛奇藝中發現好的視頻,想保存下來,點擊離線緩存,緩存好后,在手機上可以查看,但是使用手機連接電腦打開后,發現保存視頻的文件夾是空的。

1) 在手機中愛奇藝文件夾下找到已離線緩存的視頻,路徑在Android\data\com.qiyi.video\files\app\download\video里面,在手機上可以查看到,但是電腦上不行。

2) 在手機上對vide文件夾進行壓縮,變成壓縮包,還放在download下面,在從電腦上查看,發現download下多了個vide.zip的壓縮包,把這個壓縮包拷到電腦上,解壓縮,就得到我們要的視頻啦。

3) 拷到電腦上以后查看一下,發現vide文件夾下是一個個的文件夾,每個文件夾對應你下載的一個視頻,讓我們打開看一下吧。什么 ?沒有發現我們熟悉的文件,不要著急,仔細找找,那個.qsv文件就是我們要找的視頻文件。

4) 但是視頻的名字為啥不對呢,因為愛奇藝在qiyicfg里放了這個視頻的名字和信息。仔細看圖中subTitle對應的那行就是視頻的名字了。采用萬國碼進行編碼的,有興趣的朋友可以自己查找萬國碼碼表自行翻譯。

5) 那沒興趣的朋友,又想知道視頻的名字咋辦呢,下面是我自己寫的一段Matlab的小程序,在Matlab里運行一下,就可以自己得出名字了,使用時記得把LinStr的值修改為你自己視頻中的subTitle關鍵字后面對應的萬國碼。

LinStr='\\u300A\\u4E09\\u4EE4\\u4E94\\u7533\\u300B';

SubTit=strrep(LinStr,'subTitle=','');

HalSubTitLen=length(SubTit);

j=0;

DlsLen=1

DlcPath{DlsLen,3}='';

SubTitHex=[];

while(j<HalSubTitLen-1)

j=j+1;

if strcmp(SubTit(j:j+1),'\\u')

SubTitHex=[strcat(SubTit(j+2),SubTit(j+3));strcat(SubTit(j+4),SubTit(j+5))];

SubTitDec=hex2dec(SubTitHex);

TemNam=native2unicode(uint8(SubTitDec'),'UTF-16BE');%解析后的工況名字

j=j+5;

if j>HalSubTitLen

DlcPath{DlsLen,3}=strcat(DlcPath{DlsLen,3},SubTit(j-5:HalSubTitLen));

break;

end

else

TemNam=SubTit(j);

end

DlcPath{DlsLen,3}=strcat(DlcPath{DlsLen,3},{TemNam});%第二個參數用胞元是為了合并空格時起作用

end

if j==HalSubTitLen-1

DlcPath{DlsLen,3}=char(strcat(DlcPath{DlsLen,3},SubTit(HalSubTitLen)));

end

DlcPath{DlsLen,3}

6) 要是很多個文件呢,總不能讓我一個個的復制粘貼吧。下面我們編寫一個自動的轉換工具。使用時記得修改相應的路徑啊,比如我把拷貝的video文件夾放在了E:\aiqiyi下面,PrjPath就設置為E:\aiqiyi,RunNam設置為video,NewRunNam是新命名后的視頻存放的路徑,可以不改名。運行這段程序后,你E:\aiqiyi\video下的所有文件夾下的視頻會自動拷貝到E:\aiqiyi\newvideo下,并且名字已經變成你熟悉的名字了。

把PrjPath設置成你電腦上的video文件夾

%FindQiYiqsv用于查找qsv文件,并拷貝到newvideo文件夾下

clc;clear;

PrjPath='E:\aiqiyi';

RunNam='video';

NewRunNam='newvideo';

NewPrjPath=strcat(PrjPath,'\',NewRunNam);

mkdir(NewPrjPath);

Path=strcat(PrjPath,'\',RunNam);

ListName{1,1}=Path;

first=1;%ListName的當前元素下標

rear=1;%ListName的最后一個元素下標

DlcPath={};%各工況路徑及名稱

DlsLen=0;%工況個數

disp('開始搜索...');

while(1)

disp(char(strcat('正在搜索第',num2str(first),'個文件夾,名為"',Path,'"')));

SubPath=dir(Path);

Len=length(SubPath)-2;

for i=1:Len

if ~SubPath(i+2,1).isdir%判斷是否為文件夾

PjNamPos=findstr(SubPath(i+2,1).name,'.qsv');%*.$TE文件中記錄了工況是否正確仿真完

if PjNamPos

DlsLen=DlsLen+1;

DlcPath{DlsLen,1}=Path;%DlcPath中記錄各小工況的路徑

DlcPath{DlsLen,2}=SubPath(i+2,1).name(1:PjNamPos-1);%工況名字


%文件名字解析

fid=fopen(strcat(DlcPath{DlsLen,1},'\',DlcPath{DlsLen,2},'.qiyicfg'),'r');

while ~feof(fid)

LinStr=fgetl(fid);

if findstr(LinStr,'subTitle=')

break;

end

end

fclose(fid);

SubTit=strrep(LinStr,'subTitle=','');

HalSubTitLen=length(SubTit);

j=0;

DlcPath{DlsLen,3}='';

SubTitHex=[];

while(j<HalSubTitLen-1)

j=j+1;

if strcmp(SubTit(j:j+1),'\\u')

SubTitHex=[strcat(SubTit(j+2),SubTit(j+3));strcat(SubTit(j+4),SubTit(j+5))];

SubTitDec=hex2dec(SubTitHex);

TemNam=native2unicode(uint8(SubTitDec'),'UTF-16BE');%解析后的工況名字

j=j+5;

if j>HalSubTitLen

DlcPath{DlsLen,3}=strcat(DlcPath{DlsLen,3},SubTit(j-5:HalSubTitLen));

break;

end

else

TemNam=SubTit(j);

end

DlcPath{DlsLen,3}=strcat(DlcPath{DlsLen,3},{TemNam});%第二個參數用胞元是為了合并原文件名中的空格

end

if j==HalSubTitLen-1

DlcPath{DlsLen,3}=strcat(DlcPath{DlsLen,3},SubTit(HalSubTitLen));

end

DlcPath{DlsLen,3}=char(DlcPath{DlsLen,3});

if(isempty(DlcPath{DlsLen,3}))

DlcPath{DlsLen,3}=DlcPath{DlsLen,2};

end


%去掉文件名中的非法字

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'\','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'/','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},':','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'*','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'?','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'"','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'<','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'>','');

DlcPath{DlsLen,3}=strrep(DlcPath{DlsLen,3},'|','');


%文件拷貝

if DlsLen<10

OrdStr=strcat('00_',num2str(DlsLen));

elseif DlsLen<100

OrdStr=strcat('0_',num2str(DlsLen));

else

OrdStr=strcat('_',num2str(DlsLen));

end

OrdStr='';

try

copyfile(strcat(DlcPath{DlsLen,1},'\',DlcPath{DlsLen,2},'.qsv'),strcat(NewPrjPath,'\',DlcPath{DlsLen,3},'.qsv'),'f');

catch

disp(DlcPath{DlsLen,1});

return;%直接結束程序,下面的不運行了;break是直接結束本循環

end

%pause(1);

end

else

rear=rear+1;

ListName{rear,1}=strcat(Path,'\',SubPath(i+2,1).name);

end

end

first=first+1;

if first>rear

break;

end

Path=ListName{first,1};

end

disp(strcat('搜索完畢,共搜索',num2str(first-1),'個文件夾,找到',num2str(DlsLen),'個文件.'));

% Unicode表

% label=[];

% for i=1:255

% for j=1:255

% label{i,j}=native2unicode(uint8([i-1;j-1]'),'UTF-16BE');

% end

% i

% j

% end

版權和免責申明

吉林信息港所有文字、圖片、視頻、音頻等資料均來自互聯網,不代表本站贊同其觀點,本站亦不為其版權負責。相關作品的原創性、文中陳述文字以及內容數據龐雜本站無法一一核實,如果您發現本網站上有侵犯您的合法權益的內容,請聯系我們,本網站將立即予以刪除!

{ganrao}