合并百度影音的离线数据 with python 2.2 bdv格式的更新
百度影音的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格式的更新相关推荐
- 合并百度影音的离线数据 with python 2.1 bdv格式的更新
最近百度影音的离线下载文件,格式有新变化. 经过分析,是bdv格式又有新格式,从最初的bdv0001,到bdv.config 的file....,这次更新的格式是直接包含一个片段,其中还有使用guid ...
- 合并百度影音的离线数据 with python
最近很多网站都用百度影音技术,没想到手机版的使用感觉也不错.不过用手机在线看比较费电,当然我优先选择离线下载了. 简单过了一遍下载的目录,每个文件夹包含一个索引文件和4M大小的若干个视频文件. 最初接 ...
- 合并百度影音的离线数据 with python 第二版 基于yield
重新整理了一下代码. 增加了bdv,mkv的处理流程. 目前暂时支持windows平台. bdv,mkv,rmvb的不同处理流程 # -*- coding: UTF-8 -*-import os im ...
- 批量爬起百度图片上的数据代码--python
直接复制粘贴就可以了,不需要进行更改更合参数,谢谢 第一个代码: import requests import os import urllibclass Spider_baidu_image():d ...
- AndroidStudio_百度人脸识别离线SDK_代码分析_使用流程_随时更新---Android原生开发工作笔记217
打开百度的人脸识别的离线识别SDK 的案例,可以看到有个闸机模式, 可以看到上面这个类就是,识别人脸用的.闸机模式下识别人脸的类. 识别流程是这样的: 这里调用 FaceSDKManager 进行摄像 ...
- 百度影音内测版初体验
今天百度影音发布了第一个版本,虽然是内测版,但是大家已经可以从其官网下载安装体验了.从其功能上看,百度影音支持本地播放和在线点播,似乎很强大.实际应用效果如何呢?我们一起来看看吧. 百度影音下载:ht ...
- python 批量读取xlsx并合并_python合并多个excel表格数据-python如何读取多个excel合并到一个excel中...
python如何读取多个excel合并到一个excel中 思路 利用python xlrd包读取excle文件,然后将文件内容存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文 ...
- 【DS with Python】DataFrame的合并、分组聚合与数据透视表
文章目录 前言 一.DataFrame的合并 1.1 按列名合并 (pd.merge()) 1.2 相同列添加行数 (pd.concat()功能) 二.应用 (.apply()功能) 三.分组 (.g ...
- python 实现对地图的点击_利用python和百度地图API实现数据地图标注的方法
如题,先上效果图: 主要分为两大步骤 使用python语句,通过百度地图API,对已知的地名抓取经纬度 使用百度地图API官网的html例程,修改数据部分,实现呈现效果 一.使用python语句,通过 ...
最新文章
- mycncart之微店管理功能
- vue定义一个变量并显示
- linux下c语言http服务器_服务器端开发经验总结 Linux C语言
- 在床上玩手机,千万不能把手机放下!
- 前端学习(1530):钩子函数--代码演示(面试重点)
- 云服务器Linux安装,配置,使用nginx
- mysql show slave_MySQL show slave status 参考
- 为什么派生的子类报错不能实例化抽象类_C# 接口与抽象类实例分析
- 百度08年网页搜索份额73.2% 创历史新高
- DBeaver下载安装教程
- 潇洒郎:Python开发 邮件群发助手:定时发送
- php手册3.1,ThinkPHP3.1手册
- NXP i.MX6Q 双屏同显hdmi显示闪烁解决方案
- 网络安全之基础入门(一)
- UVA 1603 Square Destroyer
- 《寒蝉鸣泣之时:携带版》游戏截图
- 安装好RStudio打开提示 Error Starting R 问题怎么解决?
- Spring三大核心思想学习笔记
- VScode C语言项目文件配置
- 软碟通制作自启动U盘并安装CentOS7系统详细教程
热门文章
- MS08-067 (CVE-2008-4250) 远程命令执行漏洞
- 根据字母的首字母将单词分类
- 我不知道前途是否光明,我只知道道路十分坎坷.
- S32K144(1)新建裸机项目以及烧录调试工程
- AVIATOR——轻量级JAVA表达式求值引擎
- 【Arduino】双主板串口通信并将光敏传感器信息上传到阿里云
- 对mmdetection代码设计的简单理解及代码修改
- Authentication failed for错误解决(Git更新密码)
- ACM--steps--dyx--5.1.2--小希的迷宫
- Windows电脑上如何快速打开heic文件