首页 > 学院 > 开发设计 > 正文

合并百度影音的离线数据withpython2.3格式更新

2019-11-14 17:05:49
字体:
来源:转载
供稿:网友

很久没有更新了。

这次新增支持四种格式的解析。

filelist

slicelist

download.cfg

third_party_download.cfg

还是2个文件。替换之前版本即可。

初步测试正常,但时间轴不对。

# -*- coding: UTF-8 -*-import osimport ioimport codecsimport stringimport shutilimport moviefmtimport tracebackdef coroutine(func):    def start(*args,**kwargs):        g = func(*args,**kwargs)        g.next()        return g    return start@coroutinedef enum_movie_file(target):       selectedFolder = (yield)    for fileitem in os.listdir(selectedFolder):                      targetFO = os.path.join(selectedFolder,fileitem)               if(os.path.isfile(targetFO) == True):            continue;                target.send(targetFO)         @coroutinedef read_movie_file(funcDisp,target):    while(True):        filmFolder = (yield)        for fileitem in os.listdir(filmFolder):                     targetfile = os.path.join(filmFolder,fileitem)             if(os.path.isfile(targetfile) == False):                continue;                       filebasename , fext = os.path.splitext(fileitem);                            if(filebasename[0] == "."):                continue                        if(funcDisp.has_key(string.lower(fext))):                pfn = funcDisp[string.lower(fext)];                (targetFmt,targetObjects,filmFolderEx,filebasenameEx) = pfn(targetfile)                if(targetFmt is None):                    continue;                outputs = filmFolder,filebasename, (targetFmt,targetObjects,filmFolderEx,filebasenameEx);              #  outputs = filmFolder,filebasename, pfn(targetfile);                target.send(outputs)                break            def getWindowsText(orgText):       try:        return orgText.encode('gbk')      except Exception as exc:             PRint("%s" % exc);            return orgText                        @coroutinedef create_report(outputfile):    objTar = codecs.open(outputfile,"w+")            while(1):        filmFolder,filebasename,(extname,piece_list,filmFolderEx,filebasenameEx) = (yield)        if(extname == None) :             break;        objTar.write('cd /"%s/"/r/n' % (filmFolderEx if filmFolderEx else   filmFolder))                              objTar.write('attrib  -h *.*/r/n ')                      if(len(piece_list) >1):            objTar.write('copy  /b ')              else:            objTar.write('copy ')              if(len(piece_list) == 1):            objTar.write('/"%s /"' %(getWindowsText(piece_list[0])))        else:                        bFirst = True            for line in piece_list:                if(bFirst == False):                                        objTar.write('+/"%s/"' %(getWindowsText(line)))                  else:                                        objTar.write('/"%s/"' %(getWindowsText(line)))                    bFirst = False                                relpath = os.path.dirname(filmFolder)                currentPath = os.path.join(getWindowsText(relpath),getWindowsText(filebasenameEx if filebasenameEx else   filebasename))            objTar.write('  %s.%s/r/n' % (currentPath,extname))                              objTar.write('cd %s/r/n' %(relpath))                objTar.close()               if __name__ == '__main__':       funcDisp = dict()    funcDisp['.bdv_0000']= moviefmt.read_bdv_file;    funcDisp['.rmvb_0000']= moviefmt.read_rmvb_file;    funcDisp['.mkv_0000']= moviefmt.read_mkv_file;    funcDisp['.bdv']= moviefmt.read_bdv_index;              funcDisp['.mp4_0000']= moviefmt.read_mp4_file;                 funcDisp['']= moviefmt.read_mkv_2_file;            funcDisp['.filelist'] = moviefmt.read_filelist_index;    funcDisp['.slicelist'] = moviefmt.read_slicelist_index;    funcDisp['.cfg'] = moviefmt.read_cfg_index;        try:        rmf = enum_movie_file(read_movie_file(funcDisp,create_report('film.bat')))        rmf.send(os.getcwd())        rmf.close()    except StopIteration:        pass    except Exception as exc:             print("%s" % exc);            info = traceback.format_exc()        print(info)                           print("done");      

  

# -*- coding: UTF-8 -*-import osimport ioimport sysimport stringimport shutilimport codecsimport globimport redef read_bdv_index_V1(objFile):    piece_list= list()      for line in objFile:        if(line[0:4] != 'file'):            continue;        strings = string.split(line,'/')        tarfile = strings[len(strings)-1]                tempText = string.strip(tarfile)        piece_list.append(tempText)    return "avi",piece_list,None,Nonedef read_bdv_index_V2(objFile):    piece_list= list()      for line in objFile:               nPos = line.count('bdv')        if( nPos <=0):            continue;              tarfile = line[0:len(line)-2]             piece_list.append(tarfile)        return "mpeg",piece_list,None,Nonedef read_bdv_index_V3(objFile):    piece_list= list()              oneFile= os.path.basename(objFile)        piece_list.append(oneFile)    return "avi",piece_list,None,Nonedef read_bdv_index_V4(objFile):    piece_list= list()      #skip #EXT-X-MEDIA-SEQUENCE    objFile.readline();    for line in objFile:        if(line.startswith('#')==True):            continue;                piece_list.append(line.replace('/r/n',''))    return "avi",piece_list,None,None    def count_file_item(objFile,extText):    cItem = 0;    folderName = os.path.dirname(objFile)    for fileitem in os.listdir(folderName):           filebasename , fext = os.path.splitext(fileitem);           if(fext == extText):            cItem = cItem +1    return cItem  def read_bdv_index(filename):     piece_list= list()       ext_type = None    filmFolderEx = None    filebasenameEx = None    # total file count    cItem = count_file_item(filename,".bdv")    if(cItem == 1):        ext_type,piece_list,filmFolderEx,filebasenameEx = read_bdv_index_V3(filename)    else:        objFile = codecs.open(filename,'r','utf-8')            topline = objFile.readline();        bdv_ver = topline.replace("/r/n","")        if(bdv_ver == '#EXTM3U'):            v3Text = objFile.readline();            if(v3Text.startswith('#EXT-X-TARGETDURATION') == False):                ext_type,piece_list = read_bdv_index_V2(objFile)            else:                ext_type,piece_list = read_bdv_index_V4(objFile)        else:            ext_type,piece_list  = read_bdv_index_V1(objFile)            objFile.close()                           return  (ext_type ,piece_list,filmFolderEx,filebasenameEx)        def read_bdv_file(filename):    piece_list= list()    piece_list.append('*.bdv_*')    return  ('avi',piece_list,None,None)def read_rmvb_file(filename):    piece_list= list()    piece_list.append('*.rmvb_*')    return  ('rmvb',piece_list,None,None)def read_mkv_file(filename):    piece_list= list()        piece_list.append('*.mkv_*')    return  ('mkv',piece_list,None,None)def read_mp4_file(filename):    piece_list= list()        piece_list.append('*.mp4_*')    return  ('mp4',piece_list,None,None)def read_mkv_2_file(filename):    piece_list= list()        piece_list.append('video_*')    return  ('mkv',piece_list,None,None)def read_filelist_index(filename):    filmFolderEx = None    filebasenameEx = None    objFile = codecs.open(filename,'r','utf-8')        topline = objFile.readline();    bdv_ver = topline.replace("/r/n","")    if(bdv_ver == '#EXTM3U'):        v3Text = objFile.readline();        if(v3Text.startswith('#EXT-X-TARGETDURATION') == False):            ext_type,piece_list,filmFolderEx,filebasenameEx = read_bdv_index_V2(objFile)        else:            ext_type,piece_list,filmFolderEx,filebasenameEx = read_bdv_index_V4(objFile)                 else:        ext_type,piece_list,filmFolderEx,filebasenameEx  = read_bdv_index_V1(objFile)            objFile.close()           return  ("mp4" ,piece_list,filmFolderEx,filebasenameEx)                 def read_slicelist_index(filename):    piece_list= list()        objFile = codecs.open(filename,'r','utf-8')        topline = objFile.readline();    bdv_ver = topline.replace("/r/n","")    if(bdv_ver == '#BD-SECTION'):            while(True):            currentLine = objFile.readline();            if(currentLine is None or len(currentLine) ==0):                break            piece_list.append(currentLine.replace("/r/n",""))    objFile.close()            return  ('mp4',piece_list,None,None)def read_cfg_index(filename):    piece_list= list()        simpleFileName =  os.path.basename(filename)    if(simpleFileName == 'download.cfg'):        simpleFolderName = os.path.dirname(filename)        chkLst =glob.glob(os.path.join(simpleFolderName, '*.filelist'));        if(chkLst is not None and len(chkLst) >0):            return (None,None,None,None)        chkLst =glob.glob(os.path.join(simpleFolderName, '*.bdv'));        piece_list.append(chkLst[0]);        return  ('avi',piece_list)        if(simpleFileName != 'third_party_download.cfg'):        raise Exception('unknown format file : %s' %(filename))    reObj = re.compile('(?P<var_key>/S+):(?P<var_value>/S+)',re.IGNORECASE)    lineDict = dict()#    [orgLines.append(orgLine.replace("/r/n","") ) for orgLine in codecs.open(filename,'r','utf-8')]    for orgLine in codecs.open(filename,'r','utf-8'):        orgLine = orgLine.replace("/r/n","")                results = reObj.findall(orgLine)        if(len(results) > 0):            lineDict[results[0][0]] =results[0][1]                                             resID = lineDict["resource"]       vid = lineDict[ '%s_vid'%(resID)]    targetName = lineDict["video_name"]    simpleFolderName = os.path.dirname(filename)    upLevelFolderName = os.path.dirname(simpleFolderName)    targetFolder = os.path.join(upLevelFolderName,vid)    targetFolder = os.path.join(targetFolder,vid)        chkLst =glob.glob(os.path.join(targetFolder, '*.%s*' %(resID)));    targetFile = chkLst[0]             #skip #EXT-X-MEDIA-SEQUENCE        for line in codecs.open(targetFile,'r','utf-8'):        if(line.startswith('#')==True):            continue;                line = os.path.basename(line.replace('/r/n',''))        line = os.path.basename(line.replace('/r',''))        line = os.path.basename(line.replace('/n',''))        piece_list.append(line )        return  ('avi',piece_list,targetFolder,targetName)

  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表