markus
1
#!/usr/bin/env bash
# DVD ISO -> MP4 konvertáló (összes film)
# Szerzői jog: 2025, YnM
# Szerkesztette: Markus ([email protected])
# Minden jog fenntartva.
ISO_DIR="/media/x/e/[DVD] Rolie Polie Olie 1 - 2 - 3"
OUTPUT_DIR="/media/x/e"
MOUNT_BASE="/mnt/rolie"
# Minimum fájlméret bájtban (pl. 50MB = 52428800 bájt)
# Ez kiszűri a kis menü/trailer fájlokat
MIN_SIZE=52428800
mkdir -p "$OUTPUT_DIR"
mkdir -p "$MOUNT_BASE"
echo "🔍 ISO könyvtár ellenőrzése: $ISO_DIR"
if [ ! -d "$ISO_DIR" ]; then
echo "❌ HIBA: Az ISO könyvtár nem létezik: $ISO_DIR"
exit 1
fi
echo "📁 ISO fájlok keresése..."
ls -la "$ISO_DIR"/*.iso 2>/dev/null || echo "⚠️ Nem található .iso fájl a könyvtárban"
for iso in "$ISO_DIR"/*.ISO "$ISO_DIR"/*.iso; do
[ -e "$iso" ] || continue
echo "🎯 Feldolgozás alatt: $iso"
# ISO fájl neve (kiterjesztés nélkül) - mind .iso, mind .ISO támogatása
if [[ "$iso" == *.ISO ]]; then
iso_name=$(basename "$iso" .ISO)
else
iso_name=$(basename "$iso" .iso)
fi
mount_point="$MOUNT_BASE/$iso_name"
mkdir -p "$mount_point"
echo "🔹 Mountolás: $iso -> $mount_point"
sudo mount -o loop "$iso" "$mount_point"
# Keresd meg az összes VTS_XX_1.VOB fájlt (ezek a fő filmek)
# és szűrd ki a túl kicsiket
vob_files=$(find "$mount_point/VIDEO_TS" -type f -name "VTS_*_1.VOB" -size +${MIN_SIZE}c | sort)
if [ -n "$vob_files" ]; then
echo "📁 Talált filmek az ISO-ban:"
while IFS= read -r vob_file; do
# VTS szám kinyerése (pl. VTS_01_1.VOB -> 01)
vts_num=$(basename "$vob_file" | grep -o 'VTS_[0-9]*' | cut -d'_' -f2)
# Fájlméret ellenőrzése
file_size=$(stat -f%z "$vob_file" 2>/dev/null || stat -c%s "$vob_file" 2>/dev/null)
size_mb=$((file_size / 1024 / 1024))
echo " 📼 VTS_${vts_num} (${size_mb}MB)"
# Időtartam lekérdezése
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$vob_file" 2>/dev/null)
if [ -n "$duration" ] && [ "$duration" != "N/A" ]; then
duration_int=${duration%.*} # Tizedes rész eltávolítása
duration_hms=$(printf '%02d:%02d:%02d\n' $((duration_int/3600)) $((duration_int%3600/60)) $((duration_int%60)))
output_file="$OUTPUT_DIR/${iso_name}_VTS${vts_num}_${duration_hms}.mp4"
else
output_file="$OUTPUT_DIR/${iso_name}_VTS${vts_num}.mp4"
fi
echo " 🎬 Konvertálás: $(basename "$vob_file") -> $(basename "$output_file")"
# FFmpeg konvertálás
if ffmpeg -hide_banner -loglevel error -i "$vob_file" \
-c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 192k \
-avoid_negative_ts make_zero \
"$output_file"; then
echo " ✅ Sikeres: $(basename "$output_file")"
else
echo " ❌ Hiba a konvertálás során: $(basename "$vob_file")"
fi
done <<< "$vob_files"
else
echo "⚠️ Nem található megfelelő VOB fájl: $iso (min. ${MIN_SIZE} bájt)"
fi
echo "🔻 Unmount: $mount_point"
sudo umount "$mount_point"
rmdir "$mount_point"
echo ""
done
echo "✅ Minden ISO feldolgozva!"
echo "📂 Kimeneti könyvtár: $OUTPUT_DIR"
markus
2
> root@ynm:/media/x/e# ./convert.sh
> 🔍 ISO könyvtár ellenőrzése: /media/x/e/[DVD] Rolie Polie Olie 1 - 2 - 3
> 📁 ISO fájlok keresése...
> ⚠️ Nem található .iso fájl a könyvtárban
> 🎯 Feldolgozás alatt: /media/x/e/[DVD] Rolie Polie Olie 1 - 2 - 3/Rolie Polie Olie 1.ISO
> 🔹 Mountolás: /media/x/e/[DVD] Rolie Polie Olie 1 - 2 - 3/Rolie Polie Olie 1.ISO -> /mnt/rolie/Rolie Polie Olie 1
> mount: /mnt/rolie/Rolie Polie Olie 1: WARNING: source write-protected, mounted read-only.
> 📁 Talált filmek az ISO-ban:
> 📼 VTS_01 (1023MB)
> 🎬 Konvertálás: VTS_01_1.VOB -> Rolie Polie Olie 1_VTS01_00:17:09.mp4
> [mpeg2video @ 0x55bc79ca9a40] ac-tex damaged at 15 14
> [mpeg2video @ 0x55bc79ca9a40] Warning MVs not available
> ✅ Sikeres: Rolie Polie Olie 1_VTS01_00:17:09.mp4
> 🔻 Unmount: /mnt/rolie/Rolie Polie Olie 1
>
> 🎯 Feldolgozás alatt: /media/x/e/[DVD] Rolie Polie Olie 1 - 2 - 3/Rolie Polie Olie 2.ISO
> 🔹 Mountolás: /media/x/e/[DVD] Rolie Polie Olie 1 - 2 - 3/Rolie Polie Olie 2.ISO -> /mnt/rolie/Rolie Polie Olie 2
> mount: /mnt/rolie/Rolie Polie Olie 2: WARNING: source write-protected, mounted read-only.
> 📁 Talált filmek az ISO-ban:
> 📼 VTS_01 (1023MB)
> 🎬 Konvertálás: VTS_01_1.VOB -> Rolie Polie Olie 2_VTS01_00:17:09.mp4
markus
3
#!/usr/bin/env bash
# DVD ISO -> MP4 konvertáló (hibatűrő verzió)
# Szerzői jog: 2025, YnM
# Szerkesztette: Markus ([email protected])
# Minden jog fenntartva.
ISO_DIR="/media/x/e/[DVD] Rolie Polie Olie 1 - 2 - 3"
OUTPUT_DIR="/media/x/e"
MOUNT_BASE="/mnt/rolie"
mkdir -p "$OUTPUT_DIR"
mkdir -p "$MOUNT_BASE"
echo "🔍 ISO könyvtár ellenőrzése: $ISO_DIR"
if [ ! -d "$ISO_DIR" ]; then
echo "❌ HIBA: Az ISO könyvtár nem létezik: $ISO_DIR"
exit 1
fi
echo "📁 ISO fájlok keresése..."
iso_counter=1
for iso in "$ISO_DIR"/*.ISO "$ISO_DIR"/*.iso; do
[ -e "$iso" ] || continue
echo "🎯 Feldolgozás alatt: $iso"
# ISO fájl neve (kiterjesztés nélkül)
if [[ "$iso" == *.ISO ]]; then
iso_name=$(basename "$iso" .ISO)
else
iso_name=$(basename "$iso" .iso)
fi
# Szóköz-mentes mount pont
mount_point="$MOUNT_BASE/iso$iso_counter"
mkdir -p "$mount_point"
echo "🔹 Mountolás: $iso -> $mount_point"
sudo mount -o loop "$iso" "$mount_point"
# Keressük meg a VTS számokat
vts_nums=$(ls "$mount_point/VIDEO_TS"/VTS_*_1.VOB 2>/dev/null | sed 's/.*VTS_\([0-9]*\)_1\.VOB/\1/' | sort -u)
if [ -n "$vts_nums" ]; then
echo "📁 Talált VTS csoportok az ISO-ban:"
for vts_num in $vts_nums; do
echo "🔍 VTS_${vts_num} feldolgozása:"
# Gyűjtsük össze az összes VTS_XX_Y.VOB fájlt (Y >= 1)
vts_files=()
while IFS= read -r -d '' vob; do
if [[ ! "$vob" =~ _0\.VOB$ ]]; then
vts_files+=("$vob")
fi
done < <(find "$mount_point/VIDEO_TS" -name "VTS_${vts_num}_*.VOB" -print0 | sort -z)
echo " Talált fájlok: ${#vts_files[@]} db"
if [ ${#vts_files[@]} -gt 0 ]; then
# Első fájlból időtartam
first_file="${vts_files[0]}"
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$first_file" 2>/dev/null)
if [ -n "$duration" ] && [ "$duration" != "N/A" ]; then
duration_int=${duration%.*}
duration_hms=$(printf '%02d:%02d:%02d\n' $((duration_int/3600)) $((duration_int%3600/60)) $((duration_int%60)))
output_file="$OUTPUT_DIR/${iso_name}_VTS${vts_num}_${duration_hms}.mp4"
else
output_file="$OUTPUT_DIR/${iso_name}_VTS${vts_num}.mp4"
fi
# Ellenőrizzük, hogy már létezik-e a fájl
if [ -f "$output_file" ]; then
echo " ⏭️ Már létezik: $(basename "$output_file")"
continue
fi
echo " 🎬 Konvertálás: VTS_${vts_num} -> $(basename "$output_file")"
# Robusztus konvertálási beállítások
if [ ${#vts_files[@]} -eq 1 ]; then
# Egyetlen fájl - hibatűrő beállítások
echo " Debug: Egyetlen fájl konvertálása hibatűrő módon..."
ffmpeg -hide_banner -loglevel warning \
-fflags +genpts+igndts \
-err_detect ignore_err \
-i "$first_file" \
-c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 192k \
-avoid_negative_ts make_zero \
-max_muxing_queue_size 1024 \
-y "$output_file"
conversion_result=$?
else
# Több fájl - concat módszer hibatűréssel
temp_list="/tmp/concat_${vts_num}_$$.txt"
> "$temp_list"
for vts_file in "${vts_files[@]}"; do
echo "file '$vts_file'" >> "$temp_list"
done
echo " Debug: Concat lista tartalma:"
cat "$temp_list"
echo " Debug: Több fájl konvertálása hibatűrő módon..."
ffmpeg -hide_banner -loglevel warning \
-fflags +genpts+igndts \
-err_detect ignore_err \
-f concat -safe 0 -i "$temp_list" \
-c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 192k \
-avoid_negative_ts make_zero \
-max_muxing_queue_size 1024 \
-y "$output_file"
conversion_result=$?
rm -f "$temp_list"
fi
echo " Debug: FFmpeg kilépési kód: $conversion_result"
if [ $conversion_result -eq 0 ]; then
echo " ✅ Sikeres: $(basename "$output_file")"
# Ellenőrizzük a kimeneti fájl méretét
if [ -f "$output_file" ]; then
output_size=$(ls -lh "$output_file" | awk '{print $5}')
echo " 📊 Kimeneti fájl mérete: $output_size"
fi
else
echo " ❌ Hiba a konvertálás során: VTS_${vts_num}"
# Ha a concat módszer nem működött, próbáljuk egyenként
if [ ${#vts_files[@]} -gt 1 ]; then
echo " 🔄 Próbálkozás egyenként való konvertálással..."
part_counter=1
for vts_file in "${vts_files[@]}"; do
part_output="${output_file%.mp4}_part${part_counter}.mp4"
echo " Rész $part_counter: $(basename "$part_output")"
ffmpeg -hide_banner -loglevel warning \
-fflags +genpts+igndts \
-err_detect ignore_err \
-i "$vts_file" \
-c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 192k \
-avoid_negative_ts make_zero \
-max_muxing_queue_size 1024 \
-y "$part_output"
if [ $? -eq 0 ]; then
echo " ✅ Rész $part_counter sikeres"
else
echo " ❌ Rész $part_counter sikertelen"
fi
part_counter=$((part_counter + 1))
done
fi
fi
else
echo " ⚠️ Nem található VOB fájl VTS_${vts_num}-hoz"
fi
done
else
echo "⚠️ Nem található VTS fájl: $iso"
fi
echo "🔻 Unmount: $mount_point"
sudo umount "$mount_point"
rmdir "$mount_point"
echo ""
iso_counter=$((iso_counter + 1))
done
echo "✅ Minden ISO feldolgozva!"
echo "📂 Kimeneti könyvtár: $OUTPUT_DIR"