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


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

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

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

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

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

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

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

合并比较简单:

  对于rmvb格式:

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

linux平台 catA.rmvb_* > A.rmvb

对于bdv格式:

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

linux平台 catA.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");      

  

优质内容筛选与推荐>>
1、sql手工注入大全
2、代码整洁之道 读书笔记 - 第7章 错误处理
3、java I/O流类概述
4、计算机中如何实现除数是2的幂次的除法【转载自CSDN】
5、Scrapy从入门到精通(2)--使用Selector提取数据


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号