使用GAE上的Python将.ts文件从m3u8合并到单个mp4(无ffmpeg)

时间:2015-07-27 06:57:56

标签: python google-app-engine video

我正在尝试使用GAE上的python将m3u8清单中的文件列表下载并合并到单个mp4视频文件中。 现在我正在下载文件,并按照播放列表中的顺序将它们附加到相同的“新”文件中。新文件是可播放的,但仅限于一些播放器。可能是因为大多数玩家无法弄清楚文件类型 - 没有容器。 正在寻找一种将mp4容器元数据写入合并文件的方法。

代码在python中,应该适用于Google应用引擎。这就是我现在所得到的(工作但没有容器标签)。

    gcs_file = cloudstorage.open(filename, 'w', content_type='video/mp4')
    response = urlfetch.fetch(link)
    base_link = link.rsplit('/', 1)[0]

    if response.content:
        lines = response.content.split('\n')
        logging.info('merge_m3u8() - got response for m3u8: %s' % response.content)
        ts_filenames = [line.rstrip() for line in lines if line.rstrip().endswith('.ts')]
        logging.info('merge_m3u8() - found %d items in playlist' % len(ts_filenames))
        for ts_file in ts_filenames:
            logging.info('merge_m3u8() - downloading file %s' % ts_file)
            response = urlfetch.fetch('%s/%s' % (base_link, ts_file))
            gcs_file.write(response.content)

        logging.info('merge_m3u8() - closing file %s' % filename)
        gcs_file.close()

1 个答案:

答案 0 :(得分:1)

有一个容器,容器是TS。解析TS和编写mp4可以在没有ffmpeg的情况下完成,但它的代码很多。 (我在C中写了一个版本,专门设计为尽可能小,它仍然超过2000 SLOC)。格式不同,所以你不能简单地添加mp4 metdata。你必须拆分和重新启动。除了ffmpeg之外还有其他选择。例如mp4box。