Вопрос или проблема
Я использую FFmpeg через пакетный файл для ремукса моих видео из .mkv
в .mp4
, но он продолжает делать это со скоростью 0.6x
или 0.3x
.
Поскольку это огромные файлы, длительностью от 1 часа до 10 часов, мне нужно, чтобы это происходило достаточно быстро, особенно так как у меня их много. Есть ли способ ускорить время обработки?
Вот команда, которую я использую в данный момент:
for %%i in (*.mkv) do ffmpeg -i "%%i" -map 0:v -vcodec libx265 -crf 24 -map 0:a "%%~ni.mp4"
Есть ли какие-нибудь параметры, чтобы сохранить самое высокое качество для аудио и видео, при этом сведя время обработки и размер файла к минимуму?
Ответ или решение
Чтобы ускорить процесс обработки видео с помощью FFmpeg, важно оптимизировать как команды, так и параметры кодека. В вашем случае задача заключается в ремаршировании видео из формата .mkv в .mp4. Давайте рассмотрим несколько подходов, которые помогут вам достичь более высокой скорости обработки, сохраняя при этом качество видео и аудио.
Оптимизация команды FFmpeg
-
Уберите кодирование видеопотока (если это возможно):
Поскольку вы просто ремаршируете, и если ваш оригинальный видеосигнал уже соответствует требованиям формата .mp4, стоит рассмотреть возможность копирования видеопотока без его перекодирования. Это можно сделать с помощью параметра-c copy
.for %%i in (*.mkv) do ffmpeg -i "%%i" -c copy "%%~ni.mp4"
Это существенно ускорит процесс, так как позволит избежать затрат времени на кодирование.
-
Используйте аппаратное кодирование:
Если ваше оборудование поддерживает аппаратное кодирование (например, через NVIDIA NVENC или Intel QuickSync), используйте соответствующие кодеки, что может значительно ускорить процесс обработки. Например, для NVIDIA:for %%i in (*.mkv) do ffmpeg -i "%%i" -c:v h264_nvenc -preset fast -b:v 5M -map 0:a "%%~ni.mp4"
Это также применимо к другим продавцам оборудования, но параметры будут отличаться.
-
Установите подходящий уровень CRF:
Параметр-crf
(Constant Rate Factor) определяет качество выхода. Значение от 18 до 23 обычно считается хорошим компромиссом между качеством и размером файла. Вы можете экспериментировать с более высоким значением (например,-crf 26
), чтобы уменьшить размер файла и повысить скорость обработки. -
Масштабирование и уменьшение разрешения:
Если качество не является критичным, рассмотрите возможность уменьшения разрешения (например, с 4K на 1080p), чтобы ускорить процесс и снизить размер выходного файла:for %%i in (*.mkv) do ffmpeg -i "%%i" -vf "scale=1280:-1" -c:v h264_nvenc -preset fast -b:v 5M -map 0:a "%%~ni.mp4"
Используя
scale=1280:-1
, вы устанавливаете ширину, а высота рассчитывается автоматически, чтобы сохранить пропорции. -
Параллельная обработка:
Если ваш компьютер имеет многоядерный процессор, вы можете запустить несколько экземпляров FFmpeg в параллельных потоках, чтобы ускорить общий процесс.Пример запуск нескольких процессов в PowerShell:
Get-ChildItem *.mkv | ForEach-Object { ffmpeg -i $_.FullName -c copy "$($_.BaseName).mp4" }
Итог
Для ускорения процесса работы с FFmpeg при ремаршировании видео из формата .mkv в .mp4, постарайтесь минимизировать количество операций, выполняемых по видео и аудио потокам. Попробуйте упростить процесс путем копирования потоков без перекодирования, используя аппаратное кодирование и устанавливая разумные параметры сжатия. Экспериментируйте с разрешениями и CRF, чтобы найти оптимальный баланс между качеством, размером файла и скоростью обработки.
Использование данных рекомендаций позволит вам значительно сократить время обработки, что очень важно в условиях большой загрузки видеофайлов.