Задать вопрос
@sergo1217
Программизд, анимешник, либертарианец.

Как лучше сжать видео в ffmpeg?

В общем есть библиотека видео и задача сжать каждое видео до 1.5гб с минимальными потерями.
У меня уже от всех этих кодеков/пресетов/crf/двойных проходов и прочей фигни голова пухнет (раньше не имел дела с кодированием видео)
Посоветуйте подходящие настройки ffmpeg под мою задачу. Время кодирования не важно (если оно не совсем страшное как у av1)
  • Вопрос задан
  • 3089 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
nidalee
@nidalee
Самым безопасным способом будет CRF с ограничением битрейта:
ffmpeg -i input -c:v libx264 -preset veryslow -crf 23 -maxrate X -bufsize 2M output.mp4

Где Х - это максимальный битрейт в мегабитах в секунду, например 6M - 6 мегабит в секунду. Теперь считаем наш предел по этим самым мегабитам:
Битрейт в мегабитах = размер файла в гигабайтах / (количество минут * .0075)

Для часового файла с лимитом в 1,5 гигабайт это 1,5 / (60*0.0075) = 3,3 мегабита в секунду. Не забудьте, что хотя бы 128 килобит нужно оставить на звук. Их придется вычесть из максимального битрейта для видео. Вот тут есть калькулятор.
Тогда:
ffmpeg -i input -c:v libx264 -preset veryslow -crf 23 -maxrate 3M -bufsize 2M -acodec aac -b:a 128k output.mp4

Это, на самом деле, очень мало, но точно влезет в лимит. Достаточно приличным для большинства файлов битрейтом считаю что-то в районе 10 мегабит в секунду, но на самом деле все зависит от картинки, если много статики, то и 3 может хватить.. Ну и я надеюсь, что файлы у вас все же не часовые. :)

Тоже самое, но с битрейтом вместо CRF, можно тоже попробовать, и сравнить результаты:
ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3M -pass 1 -an -f mp4 NUL
ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3M -pass 2 -acodec aac -b:a 128k output.mp4
Это добро идет двумя последовательными строками в bat-файл, должно выполняться одно за другим.

Использовать HEVC (H.265), наверное, нецелесообразно для 1080P. Но попробовать можно:
ffmpeg -i input -c:v libx265 -preset slower -crf 23 -maxrate 3M -bufsize 2M output.mp4


Если вдруг окажется, что у полученного файла средний битрейт получился ниже лимита, значит он был ограничен целевым качеством CRF. Тогда качество можно повысить, для этого цифру нужно понизить. Например, -crf до 21.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы