传输流和MPEG文件格式

6
我想将TS文件转换为MPEG文件。有没有描述这个过程的文档? 我了解TS架构,但不了解MPEG文件的架构。任何关于这个主题的信息都将非常感激。
谢谢。
3个回答

16
你可能想要做的是将MPEG-TS(传输流)转换为MPEG-PS(程序流)。 MPEG-PS 是标准 .mpg 文件以及 DVD 视频使用的格式。你应该了解一下 ISO/IEC 13818-1 标准,它包含了所有 MPEG-TS 和 MPEG-PS 容器的详细信息(不包括编码视频,该内容在 ISO/IEC 13818-2 中有详细介绍)。
幸运的是,这种转换相当简单,因为大部分 MPEG-PS 结构都包含在 MPEG-TS 格式中。传输流包含一系列具有头部的 188 字节数据包。PES(程序元素流)包含在数据包有效负载中。 PES 包可以是任何长度,并且大多数情况下它们跨越多个 TS 数据包。从传输流中分离 PES 包实际上只涉及删除 TS 头并正确连接有效负载数据以形成 PES 包。
一旦你拥有了一串 PES 数据包,你将按照标准规定的格式将它们复用到程序流格式中。所以基本上,你不需要解析 PES 数据包或它们的内容,只需从一种格式中提取它们并插入到另一种格式中即可。
尽管转换相对简单,但仍需要相当多的工作量,因为你需要对容器标准非常熟悉,并且需要非常仔细地解析比特流以确保正确。因此,即使我说转换很简单,只是指与其他格式转换相比,你不必深入挖掘视频数据。

10

我正在尝试添加一些有用的资源。

以下是一些文件,详细说明传输和程序流以及相关的数据包结构。

  1. 这个解释了传输流和程序流之间的区别。
  2. 这个概述了MPEG并包括分组过程。
  3. 这个解释了传输流的其他方面,如使用表格选择节目等。

基本上,您需要对传输流进行解包,并将其分解为PES数据包(连同时间戳),然后应用程序流分组过程。

关键在于当您将其复合回去时,如何保持PS流中数据包的相对差异和时间。因此,必须保留PES数据包中的PTS/DTS时间戳。

我在此列出一些工具-它们是您工作的一部分的良好示例-而且它们更加符合MPEG2系统标准。

  1. tstools (http://tstools.berlios.de/)
  2. mplex (来自mjpegtools)
  3. dvb-mplex (libdvb的一部分,http://www.metzlerbros.org/dvb/)
  • DVB-replex (也是libdvb的一部分,http://freshmeat.net/projects/dvb-replex/http://www.metzlerbros.org/dvb/)
  • avidemux。 http://avidemux.sourceforge.net/
  • 学习的另一个好方法是使用Gstreamer插件框架,如果您想快速了解更广泛的流程。


    2

    FFMPEG 可以用来将 TS 转换为 MPEG。更多信息请参考这里


    我知道,但我必须编写自己的TS->mpeg实现。这就是为什么我需要了解一些关于mpeg文件架构的信息。 - user472155
    @Natko - 如果您使用某些构建选项,则FFMPEG是LGPL,因此最好使用它。 - Daniel Mošmondor
    2
    @natko - FFMPEG是开源的。即使您不得不编写自己的代码,您能否将其用作反向工程所需格式的模型? - Steve Townsend
    嗨,有哪些好的开源mpeg-ts可用?FFmpeg是一个好选择吗? - ransh

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接