我正在尝试将多个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块包含来自正在使用的流的时间戳。
我如何修复它,使其成为一个连续的剪辑?
这里的组块更多的是一个例子,组块将被动态选择。
发布于 2016-05-23 14:21:40
我还没有检查这是否适用于concat协议,但是您需要生成一组新的时间戳。
ffmpeg -i "concat:0000000033.ts|0000000034.ts|0000000039.ts|0000000044.ts" \
-c copy -bsf:a aac_adtstoasc -fflags +genpts output.mp4发布于 2018-11-23 15:45:41
如果您有一个很长的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发布于 2016-05-23 01:07:15
这些例子的文件号是否准确?因为0033.ts和0034.ts在一起玩,但是需要5秒才能到达0039.ts,然后再用5秒到0044.ts,所以0034 +5秒= 0039和+5秒= 0044,那么你是按正确的顺序加入他们的吗?
很抱歉我读错了问题,但是关于你的问题,一旦你有了15秒的剪辑,moyea有一个名为flv editor lite的程序,它会接收.mp4文件并将其转换为.flv,并允许你削减文件中多余的时间并将其导出为一个文件,但然后你需要再次转换回.mp4
https://stackoverflow.com/questions/33599831
复制相似问题