CGJU
查工具网
2026年6月5日 · 阅读时长 6 分钟

什么是TS格式

TS(Transport Stream)是一种流媒体容器格式,最初由MPEG-2标准定义,广泛应用于数字电视广播、HLS流媒体等场景。TS格式的特点是将视频、音频、字幕等数据分割成固定大小的数据包(通常为188字节),每个数据包都带有时间戳和纠错信息,因此在传输过程中即使出现部分数据丢失,也能继续播放。

在HLS(HTTP Live Streaming)中,整个视频会被切分成多个TS分片文件,通常每个分片时长为2-10秒。当我们下载了HLS视频的所有TS分片后,就需要将它们合并成一个完整的视频文件以便播放和保存。

TS格式的主要特点

  • 容错性强:数据包独立,部分丢失不影响整体播放
  • 适合流媒体:可以边下载边播放,支持直播
  • 多轨支持:可同时包含多路视频、音频和字幕轨道
  • 固定包长:每个数据包188字节,便于同步和传输

方法一:Concat Demuxer(推荐)

Concat Demuxer 是 FFmpeg 提供的一种文件合并方式,它通过读取一个文本文件中列出的文件列表,将它们依次连接起来。这种方法的优点是不需要重新编码,速度非常快,而且支持几乎所有的容器格式。

操作步骤

首先创建一个文本文件(例如 filelist.txt),内容格式如下:

file 'segment1.ts'
file 'segment2.ts'
file 'segment3.ts'
file 'segment4.ts'

然后执行以下 FFmpeg 命令:

ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

参数说明

  • -f concat:指定使用 concat demuxer
  • -safe 0:允许使用绝对路径(默认只允许相对路径)
  • -i filelist.txt:指定文件列表
  • -c copy:直接复制流,不重新编码

方法二:Concat Protocol

Concat Protocol 是另一种简单的合并方法,它直接在输入文件中使用 concat 协议将多个文件连接起来。这种方法只适用于某些特定的容器格式(如 MPEG-TS、MPEG-PS 等),对于 TS 文件非常适用。

命令示例

ffmpeg -i "concat:segment1.ts|segment2.ts|segment3.ts" -c copy output.mp4

如果 TS 文件数量很多,可以使用通配符方式(需要 shell 支持):

ffmpeg -i "concat:$(ls *.ts | sort -V | tr '\n' '|' | sed 's/|$//')" -c copy output.mp4

注意事项

  • 只支持 MPEG 系列格式(TS、PS 等),不支持 MP4、MKV 等格式
  • 文件顺序必须正确,否则会导致播放异常
  • 文件名中不能有特殊字符

方法三:Concat Filter

Concat Filter 是 FFmpeg 的滤镜功能之一,它可以在滤镜层面将多个视频流连接起来。这种方法的特点是会进行重新编码,因此速度较慢,但它的兼容性最好,可以处理不同编码参数的文件。

命令示例

ffmpeg -i segment1.ts -i segment2.ts -i segment3.ts \
    -filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
    -map "[outv]" -map "[outa]" output.mp4

参数说明

  • concat=n=3:指定要合并的文件数量为3
  • v=1:输出1路视频流
  • a=1:输出1路音频流
  • [outv][outa]:输出流的标签名

方法四:中间文件方法

中间文件方法是一种比较传统的做法,先将所有 TS 文件先合并成一个大的 TS 文件,然后再转封装为 MP4 或其他格式。这种方法在 Windows 上可以直接使用 copy 命令,非常简单。

Windows 命令行方式

copy /b segment1.ts + segment2.ts + segment3.ts combined.ts
ffmpeg -i combined.ts -c copy output.mp4

Linux/Mac 方式

cat segment1.ts segment2.ts segment3.ts > combined.ts
ffmpeg -i combined.ts -c copy output.mp4

四种方法对比

方法 速度 是否重编码 适用格式 推荐指数
Concat Demuxer 极快 几乎所有格式 ★★★★★
Concat Protocol 极快 MPEG系列 ★★★★
Concat Filter 所有格式 ★★★
中间文件法 TS等流式格式 ★★★

适用场景建议

推荐使用 Concat Demuxer 的场景

  • 所有 TS 文件编码参数一致
  • 需要快速合并,不想等待重编码
  • 文件数量较多,需要批量处理
  • 希望输出 MP4、MKV 等其他格式

需要使用 Concat Filter 的场景

  • 各 TS 文件编码参数不一致
  • 需要同时进行其他滤镜处理
  • 对输出质量有特殊要求
  • 合并后出现音视频不同步问题

常见问题与解决

1. 合并后音视频不同步

这通常是由于 TS 分片的时间戳不连续导致的。可以尝试使用 Concat Filter 方法,或者添加 -fflags +genpts 参数重新生成时间戳:

ffmpeg -f concat -safe 0 -i filelist.txt -fflags +genpts -c copy output.mp4

2. 某些分片无法播放

可能是分片文件损坏。可以先用 ffprobe 检查每个文件的完整性,或者尝试使用 Concat Filter 方法进行重新编码。

3. 文件名排序问题

TS 分片通常命名为 1.ts、2.ts、...、10.ts,直接按字符串排序会导致 10.ts 排在 2.ts 前面。建议使用自然排序(如 Linux 的 sort -V)或补零命名(01.ts、02.ts...)。

总结

TS 文件合并是处理 HLS 视频时的常见需求,FFmpeg 提供了多种方法来满足不同场景的需求。对于大多数情况,Concat Demuxer 是最佳选择,它速度快、兼容性好且使用简单。如果遇到编码参数不一致等问题,再考虑使用 Concat Filter 方法。

如果你不想手动执行命令,可以直接使用我们的 TS文件批量合并工具,上传 TS 分片后一键合并为 MP4 文件,方便快捷。

相关推荐

更多精彩文章和实用工具

需要合并TS文件?

使用我们的免费TS合并工具,上传分片一键合并为MP4,无需下载安装任何软件

立即体验 ➡