В Linux ты можешь преобразовать файлы VOB, IFO, BUP в MP4 с помощью утилит ffmpeg или HandBrakeCLI. Наиболее универсальный способ — использовать ffmpeg, который работает напрямую с VOB-файлами.


🛠️ Способ 1: Использование ffmpeg (рекомендуется)

Установи ffmpeg, если он ещё не установлен:

sudo apt install ffmpeg

Затем выполни команду:

ffmpeg -i /путь/к/VIDEO_TS/VTS_01_1.VOB -c:v libx264 -c:a aac -strict experimental output.mp4

🔹 Пояснение:

  • -i — входной файл (обычно VOB)
  • -c:v libx264 — кодек видео (H.264)
  • -c:a aac — кодек аудио
  • output.mp4 — имя выходного файла

💡 Если у тебя несколько VOB-файлов (например, VTS_01_1.VOB, VTS_01_2.VOB), их можно объединить:

cat VTS_01_1.VOB VTS_01_2.VOB > combined.vob
ffmpeg -i combined.vob -c:v libx264 -c:a aac output.mp4

🧠 Способ 2: Использование HandBrakeCLI

Установи:

sudo apt install handbrake-cli

Затем:

HandBrakeCLI -i /путь/к/VIDEO_TS/ -o output.mp4 -e x264 -q 20 -B 160

🔹 Параметры:

  • -i — путь к папке DVD (где лежат VOB, IFO, BUP)
  • -o — выходной файл
  • -e x264 — кодек
  • -q 20 — качество (меньше — лучше)
  • -B 160 — битрейт аудио

📁 Структура DVD

Обычно DVD содержит:

VIDEO_TS/
├── VIDEO_TS.IFO
├── VIDEO_TS.BUP
├── VTS_01_0.IFO
├── VTS_01_0.BUP
├── VTS_01_1.VOB
├── VTS_01_2.VOB
...

Ты можешь работать напрямую с VTS_01_1.VOB, или указать всю папку VIDEO_TS при использовании HandBrakeCLI.


🔄 Автоматизация

Если хочешь конвертировать все VOB-файлы в текущей директории:

for f in *.VOB; do
  ffmpeg -i "$f" -c:v libx264 -c:a aac "${f%.VOB}.mp4"
done

Пакетная обработка

Алексей, вот как можно организовать пакетную обработку VOB-файлов в MP4 через командную строку Linux. Это удобно, если у тебя много DVD-директории или VOB-файлов.


🧰 Скрипт для пакетной конвертации VOB → MP4

Создай файл convert_vob_to_mp4.sh:

#!/bin/bash

# Папка, где лежат VOB-файлы
SOURCE_DIR="/путь/к/VIDEO_TS"
# Папка, куда сохранять MP4
DEST_DIR="/путь/к/output"

mkdir -p "$DEST_DIR"

for vob in "$SOURCE_DIR"/*.VOB; do
    base=$(basename "$vob" .VOB)
    echo "Конвертирую $base.VOB → $base.mp4"
    ffmpeg -i "$vob" -c:v libx264 -c:a aac -strict experimental "$DEST_DIR/$base.mp4"
done

echo "✅ Все VOB-файлы обработаны."

🔧 Как использовать

  1. Установи ffmpeg, если ещё не установлен:
sudo apt install ffmpeg
  1. Сделай скрипт исполняемым:
chmod +x convert_vob_to_mp4.sh
  1. Запусти:
./convert_vob_to_mp4.sh

🧠 Расширение: объединение VOB-файлов

Если DVD разбит на части (VTS_01_1.VOB, VTS_01_2.VOB, …), можно объединить:

cat VTS_01_*.VOB > full.vob
ffmpeg -i full.vob -c:v libx264 -c:a aac output.mp4

Как адаптировать скрипт под структуру VIDEO_TS, чтобы он автоматически находил нужные VOB-файлы, объединял и конвертировал

Вот адаптированный Bash-скрипт, который автоматически:

  1. Находит все папки VIDEO_TS
  2. Объединяет основные VOB-файлы (например, VTS_01_*.VOB)
  3. Конвертирует их в MP4 с помощью ffmpeg
  4. Сохраняет результат в указанную папку

🧰 Скрипт: convert_dvd_to_mp4.sh

#!/bin/bash

# Папка, где искать VIDEO_TS
SOURCE_ROOT="/путь/к/DVD"
# Папка, куда сохранять MP4
DEST_ROOT="/путь/к/output"

mkdir -p "$DEST_ROOT"

# Ищем все VIDEO_TS
find "$SOURCE_ROOT" -type d -name "VIDEO_TS" | while read -r VIDEO_TS_DIR; do
    DVD_NAME=$(basename "$(dirname "$VIDEO_TS_DIR")")
    OUTPUT="$DEST_ROOT/${DVD_NAME}.mp4"

    echo "📀 Обработка DVD: $DVD_NAME"
    
    # Объединяем основные VOB-файлы
    VOB_TEMP="/tmp/${DVD_NAME}_combined.vob"
    cat "$VIDEO_TS_DIR"/VTS_01_*.VOB > "$VOB_TEMP"

    # Конвертируем в MP4
    ffmpeg -i "$VOB_TEMP" -c:v libx264 -c:a aac -strict experimental "$OUTPUT"

    # Удаляем временный файл
    rm "$VOB_TEMP"

    echo "✅ Готово: $OUTPUT"
done

🔧 Как использовать

  1. Установи ffmpeg, если ещё не установлен:
sudo apt install ffmpeg
  1. Сохрани скрипт:
nano convert_dvd_to_mp4.sh
chmod +x convert_dvd_to_mp4.sh
  1. Запусти:
./convert_dvd_to_mp4.sh

🧠 Примечания

  • Скрипт предполагает, что структура такая:
    /путь/к/DVD/Фильм1/VIDEO_TS/
    /путь/к/DVD/Фильм2/VIDEO_TS/
  • Он обрабатывает каждый DVD как отдельный фильм
  • Можно адаптировать под HandBrakeCLI, если хочешь более гибкое управление качеством

Можно добавить логирование, проверку ошибок, или поддержку других VTS-групп (VTS_02_*, VTS_03_*). Или сделать версию, которая работает с ISO-образами. Готов расширить?

Чтобы скрипт использовал видеокарту (GPU) при конвертации, нужно заменить кодек libx264 на аппаратно-ускоренный, соответствующий твоей видеокарте

Вот как модифицировать:


🔧 Обновлённый скрипт с поддержкой GPU

🔹 Для NVIDIA (NVENC):

ffmpeg -hwaccel cuda -i "$VOB_TEMP" -c:v h264_nvenc -preset fast -c:a aac "$OUTPUT"

🔹 Для Intel (QuickSync):

ffmpeg -hwaccel qsv -i "$VOB_TEMP" -c:v h264_qsv -c:a aac "$OUTPUT"

🔹 Для AMD (VAAPI):

ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD128 \
       -i "$VOB_TEMP" -vf 'format=nv12,hwupload' \
       -c:v h264_vaapi -c:a aac "$OUTPUT"

🧠 Пример: NVIDIA-адаптированный скрипт

#!/bin/bash

SOURCE_ROOT="/путь/к/DVD"
DEST_ROOT="/путь/к/output"

mkdir -p "$DEST_ROOT"

find "$SOURCE_ROOT" -type d -name "VIDEO_TS" | while read -r VIDEO_TS_DIR; do
    DVD_NAME=$(basename "$(dirname "$VIDEO_TS_DIR")")
    OUTPUT="$DEST_ROOT/${DVD_NAME}.mp4"

    echo "📀 Обработка DVD: $DVD_NAME"
    
    VOB_TEMP="/tmp/${DVD_NAME}_combined.vob"
    cat "$VIDEO_TS_DIR"/VTS_01_*.VOB > "$VOB_TEMP"

    ffmpeg -hwaccel cuda -i "$VOB_TEMP" -c:v h264_nvenc -preset fast -c:a aac "$OUTPUT"

    rm "$VOB_TEMP"
    echo "✅ Готово: $OUTPUT"
done

📦 Проверка поддержки GPU

Перед запуском проверь, что ffmpeg собран с нужной поддержкой:

ffmpeg -encoders | grep nvenc
ffmpeg -hwaccels

Если h264_nvenc или qsv не отображаются — нужно пересобрать ffmpeg с соответствующими флагами или установить из ppa:graphics-drivers.


От alex

Обучаемый.