合并百度影音的离线数据 with python

    最近很多网站都用百度影音技术,没想到手机版的使用感觉也不错。不过用手机在线看比较费电,当然我优先选择离线下载了。

    简单过了一遍下载的目录,每个文件夹包含一个索引文件和4M大小的若干个视频文件。

    最初接触时候,视频文件用guid作为文件名,需要分析索引文件决定先后顺序。     

    不过最近版本bdre文件替代了索引文件,记录一些下载地址等信息。

    视频文件也统一命名格式了。

    目前似乎支持bdv和rmvb的格式,一般打开文件夹里面往往是A.rmvb_0000 A.rmvb_0001...;或者是A.bdv_0000 A.bdv_0001...

  bdv文件合并之后,后缀名改成avi即可使用。

    合并比较简单:

  对于rmvb格式:

    在windows平台 copy /b  A.rmvb_* A.rmvb  

    linux平台 cat A.rmvb_* > A.rmvb  

    对于bdv格式:

    在windows平台 copy /b  A.bdv_* A.avi

    linux平台 cat A.bdv_* > A.avi 

   有时候同时下载很多视频时候,每个文件夹过一次也比较吃力。

   所以顺便写一个python脚本。

   首先,复制视频目录到本地硬盘,例如c:\movie

   然后,运行脚本,产生一个film.bat文件

   最后,你可以看见c:\movie有若干个视频文件。

   ----------------------------------------------------------------------------------------------------

   请保存为makemovie.py后,执行。这是针对windows平台。

# -*- coding: UTF-8 -*-

import os
import io
import string
import shutil




def read_video_file(brpFilmFolder): 
     for fileitem in os.listdir(brpFilmFolder):      
          targetfile = os.path.join(brpFilmFolder,fileitem) 
          if(os.path.isfile(targetfile) == False):
               continue;
          filebasename , fext = os.path.splitext(fileitem);        
          if(string.lower(fext) != ".rmvb_0000"):
               continue;        
          else:
               print(filebasename)
               return filebasename
     return None


# list brp files 
    # read brp file
def enum_video_file(brpFolder,batch_line):     
     for fileitem in os.listdir(brpFolder):              
          targetfile = os.path.join(brpFolder,fileitem)       
          if(os.path.isfile(targetfile) == True):
               continue;
          
          filebasename = read_video_file(targetfile)
          if(filebasename is None):
               continue;
          
          batch_line.append('cd \"%s\"' % targetfile)          
          batch_line.append('copy /b  \"%s\".rmvb_* ..\\\"%s\".rmvb' % (filebasename,filebasename))
          batch_line.append('cd ..')



def create_report(brpFolder):
     try:
          batch_line = list()
        # list brp files     
          enum_brp_file(brpFolder,batch_line)
          
          
          # create bat file
          objTar = open('film.bat','w+')
    
          # write list to file
          for line in batch_line:
               objTar.write(' %s\r\n' %(line))        
          
          # close file
          objTar.close()   
          

     except Exception as exc:     
          print("%s" % exc);       

if __name__ == '__main__':      
     searchFolder = os.getcwd()
     create_report(searchFolder)
     print("done");      

  

原文地址:https://www.cnblogs.com/febwave/p/3122705.html