Merge offline data of Baidu audio and video (withpython2.3)

Source: Internet
Author: User
Tags glob
This article mainly introduces the analysis of the following four formats of offline data (withpython2.3) used to merge Baidu audio and video files:

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.

The Code is as follows:

# -*- 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)    breakdef 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,Nonedef 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
 
  \S+):(?P
  
   \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)
  
 

The above is all the content of this article. I hope you will like it.

Related Article

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.