此次存在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)