Merge offline data of Baidu audio and video with python 2.3 format update, python2.3

Source: Internet
Author: User
Tags glob

Merge offline data of Baidu audio and video with python 2.3 format update, python2.3

It has not been updated for a long time.

The resolution in four formats is supported.

Filelist

Slicelist

Download. cfg

Third_party_download.cfg

Or two files. Replace the previous version.

The preliminary test is normal, but the timeline is incorrect.

# -*- 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)

  

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.