TS 文件是什么?MPEG 传输流详解
TS 文件是什么?它是 MPEG 传输流,由 188 字节的数据包组成,常见于电视录像和 HLS 分片。本文介绍如何打开,以及如何不重新编码就转成 MP4。
你可能是在硬盘里、摄像机文件夹里,或者一堆带编号的文件中翻到了 .ts 文件,播放器要么播放不正常,要么干脆打不开,这才想弄清 TS 文件到底是什么。简单说,.ts 是一种叫 MPEG 传输流(MPEG transport stream)的视频封装格式。它最初是为广播设计的,如今许多电视录像和流媒体分片仍在使用。
要点速览
- TS 文件就是 MPEG 传输流:它是封装格式(容器),不是编码格式,用固定 188 字节的数据包承载视频、音频和元数据。
.ts文件常见于电视和 DVR 录像以及 HLS 流的分片,部分摄像机使用的是与之相近的变体。- 要打开它,用 VLC 这类通用播放器即可;很多系统自带播放器和剪辑软件支持不佳。
- TS 转 MP4 通常只是转封装:
ffmpeg -i input.ts -c copy output.mp4只改封装,不动里面的视频和音频。 - TS 和 MP4 的区别主要在用途:TS 经得起数据损坏和传输中断,MP4 则重在存储和广泛的播放兼容性。
- 文件夹里一长串带编号的
.ts文件,通常是 HLS 分片,要按顺序合并才能得到完整视频。
什么是 MPEG 传输流
MPEG 传输流(MPEG-TS)是一种源于数字广播的封装格式。它不做成一个结构完整的长文件,而是把所有内容切成固定 188 字节的小数据包。每个包以同步字节开头,并标明自己属于哪一路数据:视频、音频、字幕还是节目信息。
采用固定大小的小包,是因为广播信号在传输中难免丢失数据。个别数据包受损时,接收端可以跳过它们,找到下一个同步字节继续解码。所以信号不好时录下的 TS 文件通常仍能播放,只是会出现花屏等瑕疵;而受损的 MP4 可能根本无法播放。
和所有封装格式一样,TS 只是外壳。里面的视频可能是 MPEG-2(常见于广播录像)或 H.264,音频可能是 AAC、AC-3 或 MP2。封装与编码的整体区别是个更大的话题,本文只谈 .ts 文件本身。
在哪里会遇到 .ts 文件
- 电视和 DVR 录像。 机顶盒、电视卡和采集软件常把收到的广播流原样写入硬盘。
- 摄像机。 部分 AVCHD 摄像机用传输流的变体保存片段,扩展名通常是
.mts或.m2ts,而不是.ts。 - HLS 分片。 HTTP Live Streaming 把视频切成很短的片段。Apple 的 HLS 制作规范允许分片采用 MPEG-TS 或 fMP4(分片 MP4)格式,不少流至今仍在用 TS。
“为什么多出几百个小文件”这类疑问,多半就是第三种情况。至于列出这些分片的清单文件如何运作,是另一个话题,这里不展开。
如何打开 TS 文件
用通用播放器就行。VLC 可以直接播放传输流,包括 MPEG-2 编码的录像。一些系统自带播放器和不少剪辑软件打不开这种文件,或者能播却无法拖动进度,因为 TS 不像 MP4 那样带有索引,里面的编码也未必受它们支持。
如果 TS 文件在哪里都播不了,多半是录制文件严重损坏,或者内容经过加密。加密分片不在本文讨论范围内,这里也不提供任何去除保护的方法。
TS 和 MP4 的区别
| TS | MP4 | |
|---|---|---|
| 设计目的 | 广播和实时传输 | 存储和下载 |
| 数据损坏时 | 接收端在下一个包重新同步 | 索引损坏可能导致整个文件无法播放 |
| 拖动进度 | 受限,没有集中索引 | 很快,有文件级索引 |
| 兼容性 | 在 VLC 和电视硬件上较好,其他环境参差不齐 | 几乎到处都能播 |
两者没有画质高低之分。画质取决于里面的编码和码率,同一路 H.264 视频流放进哪种封装都可以。
把 TS 转成 MP4
如果 TS 里是 H.264 视频加 AAC 音频(HLS 分片通常如此),转换就只是转封装:把音视频流原样复制进新的封装,画质无损,而且因为不重新编码,速度也很快:
ffmpeg -i input.ts -c copy output.mp4
-c copy 告诉 FFmpeg 只复制、不重新编码;用到的复用器和解复用器,说明见 FFmpeg 格式文档。
当数据流不适合放进 MP4 时才需要重新编码。最常见的是广播录像里的 MPEG-2 视频:MP4 播放器通常需要 H.264 这类编码,这时用 -c:v libx264 转换视频;音频如果已经是 AAC,用 -c:a copy 直接复制。
一堆带编号的 .ts 文件
名字像 segment001.ts、segment002.ts 的文件,通常是同一个视频的 HLS 分片,不是各自独立的短片。要先按播放列表的顺序合并,再转封装。使用 FFmpeg 的 concat 解复用器时,先在名为 list.txt 的文本文件里按顺序列出文件:
file 'segment001.ts'
file 'segment002.ts'
file 'segment003.ts'
然后运行 ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4,一步完成合并和转封装。关键是顺序,顺序错了画面就会错乱。如果分片经过加密,这样做得不到可播放的文件,本文也不涉及解密。
整理转换后的文件
TS 录像转成 MP4 之后,保存和反复观看都更方便。网页链接则是另一回事:VidMost 的链接库把你收藏的视频页面连同标题、来源和预览图集中在一处,媒体侧边栏也提供了收藏页面的快捷入口。链接库保存的是页面链接,不是视频文件本身。