🎬 Вот как можно пакетно сконвертировать все .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
💡 Но это может быть рискованно — лучше удалять файл только после успешной конвертации, чтобы не потерять данные.