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

时间:2015-11-08 22:34:58

标签: ffmpeg mpeg2-ts

我尝试将多个ts块文件合并到一个文件中,没有任何质量损失或重新编码。这些文件来自实时流,但是我试图以不同的顺序合并它们,而不是它们流式传输的顺序。

文件示例:

0000000033.ts
0000000034.ts
0000000039.ts
0000000044.ts

我试过了:

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

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

这种方法很有效,但是我不会花费4秒钟就可以看到15岁左右。它以这种方式播放:

[first 2 clips]
[5 secs pause]
[39.ts]
[5 secs pause]
[44.ts]
[done]

cat和ffmpeg组合版本都会发生这种情况。因此,似乎ts块包含正在使用的流中的时间戳。

如何解决这个问题,使其成为一个连续的剪辑?

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

3 个答案:

答案 0 :(得分:2)

Haven未检查这是否适用于concat协议,但您需要生成一组新的时间戳。

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

答案 1 :(得分:0)

如果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的-f concat选项的-i修饰符读取播放列表。

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

答案 2 :(得分:-1)

示例文件编号是否准确? 0033.ts和0034.ts一起玩但是需要5秒才能达到0039.ts然后又需要5到0044.ts所以0034 + 5秒= 0039和+ 5秒= 0044所以你加入他们的正确购买?

抱歉,我误解了这个问题,但是对于你的问题,一旦你有了15秒的剪辑,就会有一个名为flv editor lite的程序来自moyea,它将把.mp4文件转换为.flv并允许你剪切文件超出时间并将其导出为一个文件,但是您需要再次重新转换回.mp4