Для конвертации всех .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 — программный кодек, даёт отличное качество, но медленнее.

От alex

Обучаемый.