🎬 Вот как можно пакетно сконвертировать все .mkv-файлы в каталоге в формат .mp4 с помощью ffmpeg и автоматически удалить оригиналы после успешной конвертации:


✅ Скрипт на Bash

Создай файл convert.sh и вставь в него следующее:

#!/bin/bash

for file in *.mkv; do
    [ -e "$file" ] || continue  # пропустить, если нет .mkv файлов

    output="${file%.mkv}.mp4"

    echo "🎥 Конвертация: $file → $output"
    ffmpeg -i "$file" -c:v libx264 -c:a aac -strict experimental "$output"

    if [ $? -eq 0 ]; then
        echo "🗑️ Удаление исходника: $file"
        rm "$file"
    else
        echo "⚠️ Ошибка при конвертации: $file — исходный файл сохранён"
    fi
done

🧰 Как запустить

  1. Сделай скрипт исполняемым: chmod +x convert.sh
  2. Запусти его в нужном каталоге: ./convert.sh

💡 Особенности

  • Используется libx264 + aac — максимально совместимые кодеки.
  • Исходные .mkv-файлы удаляются только после успешной конвертации ($? -eq 0).
  • Можно адаптировать под другие форматы (.avi, .mov) или добавить логирование.

Как использовать при этом видеокарту а не процессор

🎬 Чтобы использовать видеокарту (GPU) вместо процессора (CPU) при пакетной конвертации .mkv.mp4 с ffmpeg, нужно задействовать аппаратное ускорение NVENC — это технология NVIDIA для быстрого кодирования видео.


✅ Обновлённый скрипт с использованием GPU

Вот как выглядит скрипт на Bash, который использует NVENC:

#!/bin/bash

for file in *.mkv; do
    [ -e "$file" ] || continue

    output="${file%.mkv}.mp4"

    echo "🎥 Конвертация с GPU: $file → $output"
    ffmpeg -y -hwaccel cuda -i "$file" \
        -c:v h264_nvenc -preset fast -b:v 5M \
        -c:a aac -b:a 192k "$output"

    if [ $? -eq 0 ]; then
        echo "🗑️ Удаление исходника: $file"
        rm "$file"
    else
        echo "⚠️ Ошибка при конвертации: $file"
    fi
done

🔍 Что делает каждая опция

ПараметрНазначение
-hwaccel cudaВключает аппаратное декодирование на GPU
-c:v h264_nvencКодирует видео с помощью NVENC (GPU)
-preset fastБаланс между скоростью и качеством
-b:v 5MБитрейт видео — можно изменить по желанию
-c:a aacАудио кодек — совместим с браузерами
-b:a 192kБитрейт аудио

💡 Советы

  • Убедись, что ffmpeg поддерживает h264_nvenc: ffmpeg -hide_banner -encoders | grep nvenc
  • Можно заменить h264_nvenc на hevc_nvenc для H.265.
  • Если хочешь максимальную скорость — используй -preset p1, если качество — -preset slow.

🎬 Чтобы конвертировать файл True.Romance.1993.avi в формат MP4 с использованием видеокарты (GPU), можно воспользоваться FFmpeg с поддержкой аппаратного ускорения. Вот базовая команда для NVIDIA GPU:

ffmpeg -hwaccel cuda -i True.Romance.1993.avi -c:v h264_nvenc -preset fast -c:a aac True.Romance.1993.mp4

🔧 Пояснение параметров:

  • -hwaccel cuda — включает аппаратное ускорение с помощью CUDA.
  • -i True.Romance.1993.avi — исходный AVI-файл.
  • -c:v h264_nvenc — кодек NVIDIA NVENC для кодирования видео в H.264.
  • -preset fast — баланс между скоростью и качеством.
  • -c:a aac — кодек AAC для аудио.
  • True.Romance.1993.mp4 — имя выходного файла.

📹 Видео How to Convert mkv to mp4 Using GPU | Very fast ,FFmpeg показывает, как использовать GPU для быстрой конвертации с помощью FFmpeg — применимо и к AVI-файлам.

📦 Также полезно видео How to convert videos with ffmpeg | Convert AVI to MP4 and …, где объясняется установка FFmpeg и базовые команды конвертации.

😬 Ошибка, которую ты получил — это классическая «InitializeEncoder failed: invalid param (8)», и она связана с тем, что ты используешь устаревший режим управления битрейтом vbr_hq, который больше не поддерживается в новых версиях FFmpeg и NVENC SDK.

При ошибке:

✅ Как исправить

Попробуй заменить -rc:v vbr_hq на современный режим -rc:v vbr и добавить -multipass disabled или -multipass fullres, если хочешь двухпроходное кодирование:

ffmpeg -hwaccel cuda -i Planeta_straha.avi -c:v hevc_nvenc -preset p5 -rc:v vbr -cq:v 19 -b:v 5M -maxrate 8M -bufsize 10M -multipass disabled -c:a aac -b:a 320k Planeta_straha.mp4

📌 Обрати внимание:

  • preset p5 — допустимый пресет (от p1 до p7), вместо slow.
  • multipass disabled — отключает двухпроходное кодирование, чтобы избежать конфликта с пресетом.
  • rc:v vbr — актуальный режим переменного битрейта.

Если хочешь максимальное качество, можно использовать:

ffmpeg -hwaccel cuda -i Planeta_straha.avi -c:v hevc_nvenc -preset p7 -rc:v vbr -cq:v 18 -b:v 8M -maxrate 12M -bufsize 16M -multipass fullres -c:a aac -b:a 320k Planeta_straha.mp4

🎥 Это даст тебе высокое качество с двухпроходным кодированием, если твоя видеокарта и драйвер это поддерживают.

🧹 Чтобы после конвертации исходный файл Planeta_straha.avi был удалён, можно просто добавить команду удаления после выполнения FFmpeg. Вот один из способов в командной строке Linux:

ffmpeg -hwaccel cuda -i Planeta_straha.avi -c:v hevc_nvenc -preset p5 -rc:v vbr -cq:v 19 -b:v 5M -maxrate 8M -bufsize 10M -multipass disabled -c:a aac -b:a 320k Planeta_straha.mp4 && rm Planeta_straha.avi

🔍 Что происходит:

  • && означает: выполнить rm (удаление), только если FFmpeg завершится успешно (код возврата 0).
  • rm Planeta_straha.avi удаляет исходный AVI-файл.

📛 Если хочешь удалить исходник независимо от результата, замени && на ;:

ffmpeg ... ; rm Planeta_straha.avi

💡 Но это может быть рискованно — лучше удалять файл только после успешной конвертации, чтобы не потерять данные.

От alex

Обучаемый.