Ffmpeg 用正确的时间戳连接TS文件

Ffmpeg 用正确的时间戳连接TS文件,ffmpeg,mpeg2-ts,Ffmpeg,Mpeg2 Ts,我正在尝试将多个ts块文件合并到一个文件中,而不丢失任何质量或重新编码。这些文件是从一个实时流中获取的,但是我试图以不同的顺序合并它们,而不是以流的顺序合并它们 文件示例: 0000000033.ts 0000000034.ts 0000000039.ts 0000000044.ts 我试过: cat 0000000033.ts 0000000034.ts 0000000039.ts 0000000044.ts >combined.ts 及 这种方法很有效,但是我没有用4秒的时间,而是

我正在尝试将多个ts块文件合并到一个文件中,而不丢失任何质量或重新编码。这些文件是从一个实时流中获取的,但是我试图以不同的顺序合并它们,而不是以流的顺序合并它们

文件示例:

0000000033.ts
0000000034.ts
0000000039.ts
0000000044.ts
我试过:

cat 0000000033.ts 0000000034.ts 0000000039.ts 0000000044.ts >combined.ts

这种方法很有效,但是我没有用4秒的时间,而是15秒左右。它是这样播放的:

[first 2 clips]
[5 secs pause]
[39.ts]
[5 secs pause]
[44.ts]
[done]
cat和ffmpeg组合版本都会发生这种情况。因此,ts块似乎包含正在使用的流的时间戳

我如何修复它,使其成为一个连续的剪辑


这里的区块更多的是一个示例,区块将被动态选择。

示例的文件编号是否准确?as 0033.ts和0034.ts一起玩,但到达0039.ts需要5秒,然后再到0044.ts需要5秒,所以0034+5秒=0039和+5秒=0044,那么你是否按照正确的顺序加入他们


抱歉,我误读了这个问题,但是关于你的问题,一旦你有了15秒的剪辑,moyea有一个名为flv editor lite的程序,它将接收一个.mp4文件并将其转换为.flv,允许你将多余的时间从文件中删除并导出为一个文件,但是你需要再次转换回.mp4。你还没有检查这是否适用于concat协议,但您需要生成一组新的时间戳

ffmpeg -i "concat:0000000033.ts|0000000034.ts|0000000039.ts|0000000044.ts" \
       -c copy -bsf:a aac_adtstoasc -fflags +genpts output.mp4

如果您有一个很长的TS文件列表,您可以创建一个播放列表,该文件包含以下行格式的TS文件列表:

    file 'seg-37-a.ts'
这些命令生成这样一个文件,TS文件按数字排序

    delimiterBeforeFileNumber="-"
    ls |egrep '[.]ts$' \
        |sort "-t$delimiterBeforeFileNumber" -k2,2n \
        |sed -r "s/(.*)/file '\1'/" >ts.files.txt
然后,创建单个文件可以使用ffmpeg的
-i
选项的
-f concat
修改器读取播放列表

    ffmpeg -f concat -i ts.files.txt -c copy tsw.014.ts.mp4

你能试着用dvbinspect分析结果文件吗?选中菜单中的
Show packets
,并发布PTS/DTS图的屏幕截图。您使用的是最新版本的ffmpeg吗?看看哪个和你的问题相似。
    ffmpeg -f concat -i ts.files.txt -c copy tsw.014.ts.mp4