#!/bin/bash # Script para convertir videos a múltiples calidades # Uso: ./convert-videos.sh set -e VIDEOS_DIR="/home/draganel/repos/videoPlayer/videos" cd "$VIDEOS_DIR" echo "🎬 Iniciando conversión de videos a múltiples calidades..." echo "📁 Directorio: $VIDEOS_DIR" echo "" # Función para obtener la resolución del video get_resolution() { local file="$1" ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 "$file" } # Función para convertir a una calidad específica convert_quality() { local input="$1" local base_name="$2" local extension="$3" local quality="$4" local height="$5" local bitrate="$6" local output="${base_name}_${quality}${extension}" # Si el archivo ya existe, saltarlo if [ -f "$output" ]; then echo " ⏭️ ${quality} ya existe, saltando..." return fi # Obtener la resolución actual del video local current_height=$(get_resolution "$input") # No escalar si el video original es más pequeño que la calidad objetivo if [ "$current_height" -lt "$height" ]; then echo " ⚠️ ${quality} - Video original (${current_height}p) es menor que ${height}p, saltando..." return fi echo " 🔄 Convirtiendo a ${quality}..." ffmpeg -i "$input" \ -vf "scale=-2:${height}" \ -c:v libx264 \ -preset medium \ -crf 23 \ -b:v ${bitrate} \ -c:a aac \ -b:a 192k \ -movflags +faststart \ -y \ "$output" \ -hide_banner \ -loglevel error \ -stats echo " ✅ ${quality} completado!" } # Procesar cada archivo de video que NO tenga sufijo de calidad for video in *.mp4 *.MP4 *.mkv *.MKV 2>/dev/null; do # Verificar que el archivo existe [ -f "$video" ] || continue # Saltar archivos que ya tienen sufijo de calidad if [[ "$video" =~ _(4k|2k|1080p|720p|480p|360p)\.(mp4|MP4|mkv|MKV)$ ]]; then echo "⏭️ Saltando $video (ya tiene sufijo de calidad)" continue fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "📹 Procesando: $video" # Extraer nombre base y extensión filename=$(basename -- "$video") extension="${filename##*.}" base_name="${filename%.*}" # Convertir a diferentes calidades # 4K (2160p) - 20 Mbps convert_quality "$video" "$base_name" ".mp4" "4k" 2160 "20M" # 2K (1440p) - 12 Mbps convert_quality "$video" "$base_name" ".mp4" "2k" 1440 "12M" # 1080p - 8 Mbps convert_quality "$video" "$base_name" ".mp4" "1080p" 1080 "8M" # 720p - 5 Mbps convert_quality "$video" "$base_name" ".mp4" "720p" 720 "5M" # 480p - 2.5 Mbps convert_quality "$video" "$base_name" ".mp4" "480p" 480 "2500k" echo "" done echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "✨ ¡Conversión completada!" echo "" echo "📊 Archivos generados:" ls -lh *_*.mp4 2>/dev/null | awk '{print " 📹", $9, "-", $5}' echo "" echo "💡 Consejo: Los archivos originales siguen en la carpeta." echo " Si deseas conservar solo las versiones convertidas," echo " puedes eliminar los archivos sin sufijo de calidad."