93 lines
2.5 KiB
Bash
93 lines
2.5 KiB
Bash
#!/bin/bash
|
|
|
|
###
|
|
# downloader.sh
|
|
# Descarga video y/o auido usando yt-dlp
|
|
# uso:
|
|
# ./downloader.sh <URL> [-v] [-a]
|
|
# -v Descarga el video en video.mp4
|
|
# -a Descarga el audio en audio.mp3
|
|
###
|
|
|
|
install_dependencies() {
|
|
if command -v apt &> /dev/null; then
|
|
sudo apt update
|
|
sudo apt install -y ffmpeg python3-pip
|
|
sudo pip3 install yt-dlp
|
|
elif command -v pacman &> /dev/null; then
|
|
sudo pacman -Syu --noconfirm ffmpeg yt-dlp
|
|
elif command -v dnf &> /dev/null; then
|
|
sudo dnf install -y ffmpeg yt-dlp
|
|
else
|
|
echo "Distro no soportada. Instala ffmpeg y yt-dlp manualmente en tu s.o."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# yt-dlp & ffmpeg son necesarios
|
|
if ! command -v yt-dlp &> /dev/null || ! command -v ffmpeg &> /dev/null; then
|
|
echo "No se encontraron yt-dlp y/o ffmpeg instaladas. Instalando..."
|
|
install_dependencies
|
|
fi
|
|
|
|
# si no hay url te dice como se usa
|
|
if [ -z "$1" ]; then
|
|
echo "Uso: $0 <url> [-v] [-a]"
|
|
echo " -v: Descargar video"
|
|
echo " -a: Descargar audio"
|
|
exit 1
|
|
fi
|
|
|
|
URL=$1
|
|
DOWNLOAD_VIDEO=false
|
|
DOWNLOAD_AUDIO=false
|
|
|
|
# Parse arguments
|
|
shift
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-v) DOWNLOAD_VIDEO=true ;;
|
|
-a) DOWNLOAD_AUDIO=true ;;
|
|
*) echo "Esta opcion no es soportada por el script! : $1"; exit 1 ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# Validate options
|
|
if ! $DOWNLOAD_VIDEO && ! $DOWNLOAD_AUDIO; then
|
|
echo "Especifica almenos una opcion: -v (video) o -a (audio)"
|
|
exit 1
|
|
fi
|
|
|
|
# Temporary directory for intermediate files
|
|
TEMP_DIR=$(mktemp -d)
|
|
|
|
# descargar video
|
|
if $DOWNLOAD_VIDEO; then
|
|
echo "Descargando video..."
|
|
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" -o "$TEMP_DIR/video.%(ext)s" "$URL"
|
|
VIDEO_FILE=$(find "$TEMP_DIR" -name "video.*")
|
|
if [ -f "$VIDEO_FILE" ]; then
|
|
mv "$VIDEO_FILE" "./$(basename "$VIDEO_FILE")"
|
|
echo "El video se encuentra en ./$(basename "$VIDEO_FILE")"
|
|
else
|
|
echo "Ocurrio un error al descargar el video"
|
|
fi
|
|
fi
|
|
|
|
# descargar audio
|
|
if $DOWNLOAD_AUDIO; then
|
|
echo "Descargando audio..."
|
|
yt-dlp -f "bestaudio[ext=m4a]/bestaudio" -o "$TEMP_DIR/audio.%(ext)s" --extract-audio --audio-format mp3 "$URL"
|
|
AUDIO_FILE=$(find "$TEMP_DIR" -name "audio.*")
|
|
if [ -f "$AUDIO_FILE" ]; then
|
|
mv "$AUDIO_FILE" "./$(basename "$AUDIO_FILE")"
|
|
echo "El archivo se encuentra en ./$(basename "$AUDIO_FILE")"
|
|
else
|
|
echo "Ocurrio un error al descargar el audio"
|
|
fi
|
|
fi
|
|
|
|
# Limpiar el kgadero
|
|
rm -rf "$TEMP_DIR"
|