Проблема преобразования MP4 в WebM: анализ и решения
Преобразование видеофайлов — это частая задача для пользователей, работающих с различными форматами. Однако при попытке преобразовать MP4 в WebM, многие сталкиваются с проблемами, связанными с увеличением размера выходного файла. В данной статье мы рассмотрим конкретный случай использования FFmpeg и кодека SVT-AV1, а также предложим возможные решения.
Исходные данные и параметры кодирования
При использовании следующей команды для преобразования файлов:
./ffmpeg -y -hide_banner -nostats \
-i /usr/local/m2/static/lotteon-low-bitrate.mp4 \
-threads auto -f webm -acodec libopus -b:a 96.059k -vcodec libsvtav1 -preset 11 -pix_fmt yuv420p \
-vf "scale="min(-1, iw)":'min(-1,ih)':force_original_aspect_ratio=decrease,crop=trunc(iw/2)*2:trunc(ih/2)*2" \
"/usr/local/m2/m2temp/xcdrtmp/test.webm"
мы получаем выходной файл WebM размером 16 МБ при исходном MP4 размером всего 4,6 МБ. Основной причиной такого увеличения размера является автоматическое управление битрейтом кодека SVT-AV1, который, как выясняется, устанавливает значительно более высокие значения битрейта.
Проблемы с битрейтом и кодированием
Кодек SVT-AV1 по умолчанию работает в режиме CRF (Constant Rate Factor), что ожидаемо приводит к увеличению размера файла. При попытке установить целевой битрейт с помощью параметра -b:v 994k
, возникает ошибка:
Svt[error]: Instance 1: Force key frames is not supported for VBR mode
Это говорит о том, что передача битрейта в режиме VBR (Variable Bit Rate) стала причиной возникновения ошибки, так как кодек не поддерживает принудительные ключевые кадры в данном режиме.
Возможные решения проблемы
-
Использование параметров SVT-AV1: Применение параметра
svtav1-params "mbr=994k"
позволило определить максимальную скорость. Однако размер выходного файла все равно превышает размер исходного MP4, что свидетельствует о варьировании размеров выходного файла даже при тех же настройках. - Установка CBR и режима низкой задержки: Применение параметров
-b:v 994k -svtav1-params "rc=2:pred-struct=1"
в CBR (Constant Bit Rate) с низкой задержкой показало наиболее успешный результат, уменьшив размер выходного файла до 4,3 МБ. Это, по сути, единственный метод, который продемонстрировал значительное сокращение.
Вопросы и дальнейшие исследования
При анализе проблемы возникают несколько вопросов:
-
Причина ошибок при установке битрейта: Почему возникает ошибка принудительного ключевого кадра при установке целевого битрейта, если не используются соответствующие параметры для его установки?
-
Нестабильный размер выходного файла: Почему размер выходного файла варьируется при одинаковых настройках и исходных данных?
- Дополнительные методы для уменьшения размера: Существуют ли другие подходы, которые способны гарантировать меньший размер выхода WebM по сравнению с MP4, помимо использования CBR и низкой задержки?
Заключение
Преобразование видеофайлов из формата MP4 в WebM может представлять собой сложную задачу из-за особенностей кодирования и управления битрейтом. Используя подходы, описанные выше, можно добиться уменьшения размера файла, но для полного решения проблемы необходимо выяснить коренные причины возникающих ошибок и нестабильности размеров выходных файлов. Надеемся, что эта информация будет полезна тем, кто сталкивается с аналогичными ситуациями.