🎬 Вот как можно пакетно сконвертировать все .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
🧰 Как запустить
- Сделай скрипт исполняемым:
chmod +x convert.sh - Запусти его в нужном каталоге:
./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
💡 Но это может быть рискованно — лучше удалять файл только после успешной конвертации, чтобы не потерять данные.