我尝试将多个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块包含正在使用的流中的时间戳。
如何解决这个问题,使其成为一个连续的剪辑?
这里的块更多的是一个例子,块将被动态选择。
答案 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