Muito bom, criei alguns scripts e adicionei alguns alias seguindo a mesma ideia.
Talvez isso te atenda bem tbm, esse trecho corta o video em videos menores.
`#!/bin/bash
Uso:
./download_serie_live.sh "https://youtu.be/-1GWW4XjO10" --tempo-total-horas=8 --tempo-total-minutos=15 --tempo-video-minutos=15
URL_DEFAULT="https://youtu.be/-1GWW4XjO10"
URL="$URL_DEFAULT"
DOWNLOAD_PATH="HOME/Downloads/YoutubeLiveParts/PartTwo" mkdir -p "DOWNLOAD_PATH"
Valores padrão
INICIO_HORAS=0
INICIO_MINUTOS=0
TEMPO_TOTAL_MINUTOS_EXTRA=0
Parsing de parâmetros
for arg in "@"
do
case arg in
--tempo-total-horas=) TEMPO_TOTAL_HORAS="{arg#*=}" ;;
--tempo-total-minutos=*) TEMPO_TOTAL_MINUTOS_EXTRA="{arg#=}" ;;
--tempo-video-minutos=) TEMPO_VIDEO_MINUTOS="{arg#*=}" ;;
--quantidade-videos=*) QUANTIDADE_VIDEOS="{arg#=}" ;;
--inicio-horas=) INICIO_HORAS="{arg#*=}" ;;
--inicio-minutos=*) INICIO_MINUTOS="{arg#=}" ;;
http*) URL="$arg" ;;
esac
done
if [ -z "TEMPO_TOTAL_HORAS" ] || [ -z "TEMPO_VIDEO_MINUTOS" ]; then
echo "Uso: $0 [URL] --tempo-total-horas=10 --tempo-total-minutos=15 --tempo-video-minutos=30 [--quantidade-videos=20] [--inicio-horas=H] [--inicio-minutos=M]"
exit 1
fi
echo ">>> Usando URL: $URL"
echo ">>> Baixando vídeo..."
Baixar vídeo consolidado
yt-dlp --no-part -o "DOWNLOAD_PATH/live_raw.%(ext)s" "URL"
RAW_FILE=(ls "DOWNLOAD_PATH" | grep live_raw | head -n 1)
RAW_PATH="DOWNLOAD_PATH/RAW_FILE"
if [ ! -f "$RAW_PATH" ]; then
echo "❌ ERRO: Arquivo da live não foi encontrado. Verifique o link."
exit 1
fi
Converte para .mp4
echo ">>> Convertendo para MP4..."
ffmpeg -i "RAW_PATH" -c copy "DOWNLOAD_PATH/live_completa.mp4" -y
Calcula blocos
TOTAL_MINUTOS=((TEMPO_TOTAL_HORAS * 60 + TEMPO_TOTAL_MINUTOS_EXTRA))
SEGMENTO_MINUTOS=TEMPO_VIDEO_MINUTOS
INICIO_TOTAL_MINUTOS=$((INICIO_HORAS * 60 + INICIO_MINUTOS))
if [ -z "QUANTIDADE_VIDEOS" ]; then
QUANTIDADE_VIDEOS=(( (TOTAL_MINUTOS + SEGMENTO_MINUTOS - 1) / SEGMENTO_MINUTOS ))
fi
convert_to_hhmmss() {
local t=1
printf "%02d:%02d:%02d" ((t/3600)) (((t%3600)/60)) ((t%60))
}
Corta em partes
for ((i=0; i<QUANTIDADE_VIDEOS; i++))
do
START_MIN=((INICIO_TOTAL_MINUTOS + i * SEGMENTO_MINUTOS))
START_SEC=((START_MIN * 60))
START_TIME=(convert_to_hhmmss START_SEC)
END_MIN=$((INICIO_TOTAL_MINUTOS + (i+1) * SEGMENTO_MINUTOS))
if [ $END_MIN -gt $((INICIO_TOTAL_MINUTOS + TOTAL_MINUTOS)) ]; then
END_MIN=$((INICIO_TOTAL_MINUTOS + TOTAL_MINUTOS))
fi
END_SEC=$((END_MIN * 60))
DURATION=$((END_SEC - START_SEC))
echo ">>> Cortando parte $((i+1)) (Início: $START_TIME, Duração: ${DURATION}s)"
ffmpeg -ss $START_TIME -i "$DOWNLOAD_PATH/live_completa.mp4" -t $DURATION -c copy \
"$DOWNLOAD_PATH/parte_$((i+1)).mp4" -y
done
echo "✅ Processo finalizado! Arquivos salvos em: $DOWNLOAD_PATH"`