汇编无法在媒体播放器中播放的mpeg文件

时间:2012-07-12 06:14:16

标签: python video mpeg

我目前正在开展一个学校项目,我似乎用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()

1 个答案:

答案 0 :(得分:0)

MPEG视频文件包含“编码视频数据”,这意味着它已被压缩。最重要的是,将视频切割成可以单独追加或播放的块并非易事。除非您仔细阅读MPEG2传输流规范并了解在何处找到可以剪切和“拼接”并仍然输出兼容的MPEG流的点,否则您的问题都无法解决。我的猜测是,这不是你想要为学校项目做的事情。

也许您应该尝试阅读如何使用FFMPEG(http://www.ffmpeg.org/)剪切和追加视频文件。

祝你的项目好运。