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

软件和网站开发以及相关技术探讨
回复
febwave
帖子: 39
注册时间: 2007-04-29 16:26

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

#1

帖子 febwave » 2014-04-14 15:57

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

此次存在2种bdv格式。

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

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

例如:

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



所以python脚本有改。

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

代码: 全选

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

import os
import io
import sys
import string
import shutil
import codecs


def 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


def 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

def read_bdv_index_V3(objFile):
    piece_list= list()          
    oneFile= os.path.basename(objFile)    
    piece_list.append(oneFile)
    return "avi",piece_list


def 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

    
def 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
    # total file count
    cItem = 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)
回复