百度影音的bdv格式又有变化。

此次存在2种bdv格式。

格式1:每个文件夹内就一个bdv文件,文件合并后改名avi即可。

格式2:每个文件夹内一个bdv文件作为索引,其他附加guid的文件作为数据。

例如:

#EXTM3U
#EXT-X-TARGETDURATION:30
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,

所以python脚本有改。

该脚本修正了单个文件在批处理过程名称。

# -*- coding: UTF-8 -*-import os
import io
import codecs
import string
import shutil
import moviefmtdef coroutine(func):def start(*args,**kwargs):g = func(*args,**kwargs)g.next()return greturn start@coroutine
def 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)         @coroutine
def 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(funcDisp.has_key(string.lower(fext))):pfn = funcDisp[string.lower(fext)];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@coroutine
def create_report(outputfile):objTar = codecs.open(outputfile,"w+")        while(1):filmFolder,filebasename,(extname,piece_list) = (yield)if(extname == None) : break;objTar.write('cd \"%s\"\r\n' % filmFolder)      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 = Truefor line in piece_list:if(bFirst == False):                    objTar.write('+\"%s\"' %(getWindowsText(line)))  else:                    objTar.write('\"%s\"' %(getWindowsText(line)))bFirst = FalseobjTar.write('  ..\\"%s\".%s\r\n' %(filebasename,extname))              objTar.write('cd ..\r\n')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;    try:rmf = enum_movie_file(read_movie_file(funcDisp,create_report('film.bat')))rmf.send(os.getcwd())rmf.close()except Exception as exc:     print("%s" % exc);    print("done");

  

该脚本增加单个文件read_bdv_index_V3和bdv新格式支持read_bdv_index_V4。

# -*- coding: UTF-8 -*-import os
import io
import sys
import string
import shutil
import codecsdef 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_listdef 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_listdef read_bdv_index_V3(objFile):piece_list= list()          oneFile= os.path.basename(objFile)    piece_list.append(oneFile)return "avi",piece_listdef read_bdv_index_V4(objFile):piece_list= list()  #skip #EXT-X-MEDIA-SEQUENCEobjFile.readline();for line in objFile:if(line.startswith('#')==True):continue;        piece_list.append(line.replace('\r\n',''))return "avi",piece_listdef 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 +1return cItem  def read_bdv_index(filename): piece_list= list()   ext_type = None# total file countcItem = count_file_item(filename,".bdv")if(cItem == 1):ext_type,piece_list = 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)        def read_bdv_file(filename):piece_list= list()piece_list.append('*.bdv_*')return  ('avi',piece_list)def read_rmvb_file(filename):piece_list= list()piece_list.append('*.rmvb_*')return  ('rmvb',piece_list)def read_mkv_file(filename):piece_list= list()    piece_list.append('*.mkv_*')return  ('mkv',piece_list)def read_mp4_file(filename):piece_list= list()    piece_list.append('*.mp4_*')return  ('mp4',piece_list)def read_mkv_2_file(filename):piece_list= list()    piece_list.append('video_*')return  ('mkv',piece_list)

  

转载于:https://www.cnblogs.com/febwave/p/3664206.html

合并百度影音的离线数据 with python 2.2 bdv格式的更新相关推荐

  1. 合并百度影音的离线数据 with python 2.1 bdv格式的更新

    最近百度影音的离线下载文件,格式有新变化. 经过分析,是bdv格式又有新格式,从最初的bdv0001,到bdv.config 的file....,这次更新的格式是直接包含一个片段,其中还有使用guid ...

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

    最近很多网站都用百度影音技术,没想到手机版的使用感觉也不错.不过用手机在线看比较费电,当然我优先选择离线下载了. 简单过了一遍下载的目录,每个文件夹包含一个索引文件和4M大小的若干个视频文件. 最初接 ...

  3. 合并百度影音的离线数据 with python 第二版 基于yield

    重新整理了一下代码. 增加了bdv,mkv的处理流程. 目前暂时支持windows平台. bdv,mkv,rmvb的不同处理流程 # -*- coding: UTF-8 -*-import os im ...

  4. 批量爬起百度图片上的数据代码--python

    直接复制粘贴就可以了,不需要进行更改更合参数,谢谢 第一个代码: import requests import os import urllibclass Spider_baidu_image():d ...

  5. AndroidStudio_百度人脸识别离线SDK_代码分析_使用流程_随时更新---Android原生开发工作笔记217

    打开百度的人脸识别的离线识别SDK 的案例,可以看到有个闸机模式, 可以看到上面这个类就是,识别人脸用的.闸机模式下识别人脸的类. 识别流程是这样的: 这里调用 FaceSDKManager 进行摄像 ...

  6. 百度影音内测版初体验

    今天百度影音发布了第一个版本,虽然是内测版,但是大家已经可以从其官网下载安装体验了.从其功能上看,百度影音支持本地播放和在线点播,似乎很强大.实际应用效果如何呢?我们一起来看看吧. 百度影音下载:ht ...

  7. python 批量读取xlsx并合并_python合并多个excel表格数据-python如何读取多个excel合并到一个excel中...

    python如何读取多个excel合并到一个excel中 思路 利用python xlrd包读取excle文件,然后将文件内容存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文 ...

  8. 【DS with Python】DataFrame的合并、分组聚合与数据透视表

    文章目录 前言 一.DataFrame的合并 1.1 按列名合并 (pd.merge()) 1.2 相同列添加行数 (pd.concat()功能) 二.应用 (.apply()功能) 三.分组 (.g ...

  9. python 实现对地图的点击_利用python和百度地图API实现数据地图标注的方法

    如题,先上效果图: 主要分为两大步骤 使用python语句,通过百度地图API,对已知的地名抓取经纬度 使用百度地图API官网的html例程,修改数据部分,实现呈现效果 一.使用python语句,通过 ...

最新文章

  1. mycncart之微店管理功能
  2. vue定义一个变量并显示
  3. linux下c语言http服务器_服务器端开发经验总结 Linux C语言
  4. 在床上玩手机,千万不能把手机放下!
  5. 前端学习(1530):钩子函数--代码演示(面试重点)
  6. 云服务器Linux安装,配置,使用nginx
  7. mysql show slave_MySQL show slave status 参考
  8. 为什么派生的子类报错不能实例化抽象类_C# 接口与抽象类实例分析
  9. 百度08年网页搜索份额73.2% 创历史新高
  10. DBeaver下载安装教程
  11. 潇洒郎:Python开发 邮件群发助手:定时发送
  12. php手册3.1,ThinkPHP3.1手册
  13. NXP i.MX6Q 双屏同显hdmi显示闪烁解决方案
  14. 网络安全之基础入门(一)
  15. UVA 1603 Square Destroyer
  16. 《寒蝉鸣泣之时:携带版》游戏截图
  17. 安装好RStudio打开提示 Error Starting R 问题怎么解决?
  18. Spring三大核心思想学习笔记
  19. VScode C语言项目文件配置
  20. 软碟通制作自启动U盘并安装CentOS7系统详细教程

热门文章

  1. MS08-067 (CVE-2008-4250) 远程命令执行漏洞
  2. 根据字母的首字母将单词分类
  3. 我不知道前途是否光明,我只知道道路十分坎坷.
  4. S32K144(1)新建裸机项目以及烧录调试工程
  5. AVIATOR——轻量级JAVA表达式求值引擎
  6. 【Arduino】双主板串口通信并将光敏传感器信息上传到阿里云
  7. 对mmdetection代码设计的简单理解及代码修改
  8. Authentication failed for错误解决(Git更新密码)
  9. ACM--steps--dyx--5.1.2--小希的迷宫
  10. Windows电脑上如何快速打开heic文件