Skip to content

Instantly share code, notes, and snippets.

@maxwellito
Created December 28, 2015 22:05
Show Gist options
  • Save maxwellito/90a0f1c94c3f6e63e52a to your computer and use it in GitHub Desktop.
Save maxwellito/90a0f1c94c3f6e63e52a to your computer and use it in GitHub Desktop.
Concat / join .ts segment files into an mp4 file
#!/bin/sh
# This script must be executed in the repo where
# the *.ts files are.
# It will concatenate the segments into one temp
# file which ffmpeg will reencode the audio track.
# By default the ouptup filename is output.mp4
# but can be changed by providing the name as parameter.
#
# ffmpeg is required
#
# Example:
# $ ./m3u8-concat.sh trololo.mp4
# Get the output file name
output=$1
if [ -z "$output" ]; then
output="output.mp4"
fi
# Get length of segment in the current repo
seglen=`ls -la segment-*.ts | wc -l`
if [ -z "$seglen" ]; then
echo "Not segment file found"
exit 1
fi
# Clean temp files
bin=`rm -f all.ts`
# Concat segments into one
a=1
while [ "$a" -le $seglen ]
do
bin=`cat segment-$a.ts >> all.ts`
a=`expr $a + 1`
done
# Run ffmpeg to reencode the audio
bin=`ffmpeg -i all.ts -bsf:a aac_adtstoasc -vcodec copy $output`
echo $bin
# Delete temp files
bin=`rm -f all.ts`
@mukunm
Copy link

mukunm commented Jul 29, 2018

bin=cat segment-$a.ts >> all.ts

This catting approach produces an all.ts fine.
But, when I ffprobe the all.ts it says the duration is only as long as one ts segment.
Thoughts on why this could be happening?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment