Concatenate TS files with correct timestamps

Pete9119 picture Pete9119 · Nov 8, 2015 · Viewed 12.7k times · Source

I'm trying to merge multiple ts chunk files to one single file, without any loss of quality or reencoding. The files are taken from a live stream, however I'm trying to merge them in a diffrent order and not the order they were streamed.

Example of files:

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

I tried:

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

and

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

This kinda works, however I instead of beeing 4 seconds long it's around 15. It plays this way:

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

This happens to both the cat and ffmpeg combined version. So it seems the ts chunks contain timestamps from the stream that are beeing used.

How can I fix that to make it one continous clip?

The chunks here are more of an example, the chunks will be dynamically selected.

Answer

Gyan picture Gyan · May 23, 2016

Haven't checked whether this works with the concat protocol, but you need to generate a new set of timestamps.

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