Skip to content

Instantly share code, notes, and snippets.

@EdoardoVignati
Created April 1, 2026 18:19
Show Gist options
  • Select an option

  • Save EdoardoVignati/b5aca3d13996ff29545daec77f5237a3 to your computer and use it in GitHub Desktop.

Select an option

Save EdoardoVignati/b5aca3d13996ff29545daec77f5237a3 to your computer and use it in GitHub Desktop.
Download mp4 from ts segments in Bash
if [ -z "$1" ]; then
echo "Uso: $0 <url_segmento_ts>"
exit 1
fi
URL="$1"
# Directory temporanea
TMP_DIR="segments"
LIST_FILE="list.txt"
OUTPUT="output.mp4"
mkdir -p "$TMP_DIR"
rm -f "$LIST_FILE"
# Estrae base URL e filename
BASE_URL="${URL%/*}"
FILE_NAME="${URL##*/}"
# Estrae prefisso, numero segmento e suffisso
# Esempio: seg-24-v1-a1.ts -> PREFIX=seg- , NUMBER=24 , SUFFIX=-v1-a1.ts
if [[ $FILE_NAME =~ ^(seg-)([0-9]+)(-v1-a1\.ts)$ ]]; then
PREFIX="${BASH_REMATCH[1]}"
NUMBER="${BASH_REMATCH[2]}"
SUFFIX="${BASH_REMATCH[3]}"
else
echo "Nome file non compatibile con pattern seg-<num>-v1-a1.ts"
exit 1
fi
PAD=${#NUMBER}
i=$((10#$NUMBER))
echo "Download segmenti da $i in poi..."
while true; do
NUM=$(printf "%0*d" "$PAD" "$i")
SEGMENT="${PREFIX}${NUM}${SUFFIX}"
SEGMENT_URL="$BASE_URL/$SEGMENT"
HTTP_CODE=$(curl -s -o "$TMP_DIR/$SEGMENT" -w "%{http_code}" "$SEGMENT_URL")
if [ "$HTTP_CODE" != "200" ]; then
rm -f "$TMP_DIR/$SEGMENT"
break
fi
echo "Scaricato: $SEGMENT"
echo "file '$TMP_DIR/$SEGMENT'" >> "$LIST_FILE"
((i++))
done
if [ ! -s "$LIST_FILE" ]; then
echo "Nessun segmento trovato."
exit 1
fi
echo "Unione segmenti in $OUTPUT..."
ffmpeg -y -f concat -safe 0 -i "$LIST_FILE" -c copy "$OUTPUT"
echo "Completato ✅"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment