Для конвертации всех .mkv
файлов в директории в .mp4
с использованием видеокарты (например, NVIDIA GPU через ffmpeg
с nvenc
), и последующим удалением исходников, можно использовать следующий скрипт:
🛠 Bash-скрипт с ffmpeg и NVIDIA NVENC
#!/bin/bash
# Убедитесь, что ffmpeg установлен с поддержкой nvenc
# Преобразование всех .mkv файлов в .mp4 с максимальным качеством
for file in *.mkv; do
# Получаем имя файла без расширения
base="${file%.*}"
# Конвертируем с использованием NVENC
ffmpeg -y -hwaccel cuda -i "$file" \
-c:v h264_nvenc -preset slow -cq 19 -b:v 0 \
-c:a copy \
"${base}.mp4"
# Удаляем исходный файл, если конвертация прошла успешно
if [ $? -eq 0 ]; then
rm "$file"
echo "Удалён: $file"
else
echo "Ошибка при обработке: $file"
fi
done
🔍 Пояснение параметров:
-hwaccel cuda
: аппаратное ускорение через CUDA.-c:v h264_nvenc
: кодек NVIDIA для H.264.-preset slow
: более качественная компрессия.-cq 19
: постоянное качество (чем ниже число — тем выше качество).-b:v 0
: отключает битрейт, чтобы использовать только-cq
.-c:a copy
: аудио не перекодируется.
✅ Перед запуском:
- Убедитесь, что у вас установлен
ffmpeg
с поддержкойnvenc
. Проверить можно командой:ffmpeg -encoders | grep nvenc
- Скрипт можно сохранить как
convert.sh
, затем:chmod +x convert.sh ./convert.sh
*Если происходит ошибка
Похоже, твоя видеокарта не поддерживает аппаратное кодирование 10-битного видео через h264_nvenc
. Это довольно распространённая проблема на старых или ограниченных GPU. Вот как можно обойти это:
🔧 Решения:
1. Понизить битность видео до 8-бит
Если исходное видео 10-битное, можно предварительно привести его к 8-битному цвету:
ffmpeg -y -hwaccel cuda -i input.mkv \
-pix_fmt yuv420p \
-c:v h264_nvenc -preset slow -cq 19 -b:v 0 \
-c:a copy output.mp4
-pix_fmt yuv420p
— это 8-битный формат, совместимый сh264_nvenc
.
2. Использовать HEVC (h265_nvenc)
Если твоя видеокарта поддерживает hevc_nvenc
, он может работать с 10-битным видео:
ffmpeg -y -hwaccel cuda -i input.mkv \
-c:v hevc_nvenc -preset slow -cq 19 -b:v 0 \
-c:a copy output.mp4
- HEVC часто поддерживает 10-бит, особенно на более новых GPU.
3. Проверить поддержку кодеков
Выполни команду, чтобы увидеть, какие кодеки доступны:
ffmpeg -hide_banner -encoders | grep nvenc
Если hevc_nvenc
есть — используй его. Если нет — придётся перекодировать через CPU:
4. Перекодирование через CPU (если GPU не подходит)
ffmpeg -y -i input.mkv \
-c:v libx264 -preset slow -crf 18 \
-c:a copy output.mp4
libx264
— программный кодек, даёт отличное качество, но медленнее.