我目前正在开展一个学校项目,我似乎用MPEG文件解决了一些问题。我的项目范围是:
1)将MPEG文件分成许多固定大小的块。
2)在省略某些块的同时组装其中一些。
问题1:
当我在媒体播放器中播放文件时,它将播放视频,直到它到达我省略的块。
示例:
chunk = ["yui_1", "yui_2", "yui_3", "yui_5", "yui_6"]
Duration of each chunk: 1 second
*如果你发现我省略了“yui_4”块。*
如果我要组装除“yui_4”之外的所有块,视频将在整个持续时间内挂起前2秒播放。
问题2:
当我在省略第一个块的同时组装块时,它会使整个mpeg文件无法播放。
示例:
chunk = ["yui_2", "yui_3", "yui_4", "yui_5", "yui_6"]
Duration of each chunk: 1 second
def splitFile(inputFile,chunkSize):
splittext = string.split(filename, ".")
name = splittext[0]
extension = splittext[1]
os.chdir("./" + media_dir)
#read the contents of the file
f = open(inputFile, 'rb')
data = f.read() # read the entire content of the file
f.close()
# get the length of data, ie size of the input file in bytes
bytes = len(data)
#calculate the number of chunks to be created
noOfChunks= bytes/chunkSize
if(bytes%chunkSize):
noOfChunks+=1
#create a info.txt file for writing metadata
f = open('info.txt', 'w')
f.write(inputFile+','+'chunk,'+str(noOfChunks)+','+str(chunkSize))
f.close()
chunkNames = []
count = 1
for i in range(0, bytes+1, chunkSize):
fn1 = name + "_%s" % count
chunkNames.append(fn1)
f = open(fn1, 'wb')
f.write(data[i:i+ chunkSize])
count += 1
f.close()
def assemble():
data = ["yui_1", "yui_2", "yui_3", "yui_4", "yui_5", "yui_6", "yui_7"]
output = open("output.mpeg", "wb")
for item in datafile:
data = open(item, "rb"). read()
output.write(data)
output.close()
答案 0 :(得分:0)
MPEG视频文件包含“编码视频数据”,这意味着它已被压缩。最重要的是,将视频切割成可以单独追加或播放的块并非易事。除非您仔细阅读MPEG2传输流规范并了解在何处找到可以剪切和“拼接”并仍然输出兼容的MPEG流的点,否则您的问题都无法解决。我的猜测是,这不是你想要为学校项目做的事情。
也许您应该尝试阅读如何使用FFMPEG(http://www.ffmpeg.org/)剪切和追加视频文件。
祝你的项目好运。