下载M3U8视频的时候,很多时候拿到的是一堆.ts小文件,看着就头大。怎么把它们拼成一个完整的MP4?其实办法有好几种,从最简单到最稳妥,我挨个讲。
如果你有对应的M3U8索引文件,那最简单,一行命令搞定:
ffmpeg -i input.m3u8 -c copy output.mp4
FFmpeg会按照M3U8里的顺序读取TS切片,自动处理时间戳和编码,合并成一个MP4。这是最推荐的做法,因为FFmpeg会帮你做很多幕后工作,比如修正切片之间的时间戳偏移。
如果你没有M3U8文件,只有TS切片,可以先用文本编辑器写一个临时的M3U8文件。内容格式很简单:
#EXTM3U #EXTINF:10.0, segment001.ts #EXTINF:10.0, segment002.ts #EXT-X-ENDLIST
把文件名替换成你实际的TS文件,然后丢给FFmpeg处理就行。
TS文件有个好处,它的格式设计就是支持直接拼接的。你可以用操作系统的命令把多个TS文件按顺序拼成一个:
Windows命令:
copy /b segment001.ts + segment002.ts + segment003.ts combined.ts
Mac/Linux命令:
cat segment001.ts segment002.ts segment003.ts > combined.ts
拼完之后得到一个大的TS文件,再用FFmpeg封装成MP4:
ffmpeg -i combined.ts -c copy output.mp4

如果你不想敲命令,网上有一些图形界面的TS合并工具,比如TS Merger、TsMuxer这些。操作基本都是拖进去、点合并,对新手友好。
不过这些工具更新频率不一,有些对新编码支持不好。如果遇到合并不成功,还是建议用FFmpeg,稳。
时间戳不连续: 有些TS切片的时间戳不是连续的,直接拼在一起会导致音画不同步或者播放卡顿。FFmpeg的-c copy有时候也处理不了,需要去掉copy参数让它重新编码。
编码不一致: 不同批次的TS切片可能用了不同的分辨率或码率,强行合并会出问题。用FFmpeg重新编码可以统一参数,但速度会慢很多。
切片顺序错了: 文件名排序不一定就是播放顺序,一定要按照M3U8里的顺序来拼。搞错顺序的话,画面会跳来跳去。
总之,最稳的方案始终是FFmpeg。学会这一条命令,99%的合并需求都能搞定。