🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
114 lines
3.3 KiB
Bash
Executable File
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."
|