Files
videoPlayer/convert-videos.sh
2025-10-02 01:52:03 -06:00

114 lines
3.3 KiB
Bash
Executable File

#!/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."