CLI AI

Сжать видео в MP4 через ffmpeg

2026-06-03

ffmpeg -i in.mp4 -c:v libx264 -crf 28 -preset fast out.mp4 сжимает видео в MP4, немного жертвуя качеством ради заметно меньшего файла — CRF это регулятор, и диапазон 18–28 единственный, который стоит запомнить. Дальше — шкала CRF в реальных цифрах, пакетная конвертация целой папки и шаг, который обычно пропускают: посмотреть длительность и кодеки файла, прежде чем запускать перекодирование на час.

1. Что вообще внутри файла

clai
$ clai покажи длительность этого видео→ ffprobe -v error -show_entries format=duration -of csv=p=0 in.mp42.000000

ffprobe идёт в комплекте с ffmpeg и ничего не перекодирует. Прежде чем запускать конвертацию, которая может занять час, посмотрите, с чем вы имеете дело.

2. Сжать, управляя качеством

clai
$ clai сожми это видео, качество важнее размера→ ffmpeg -i in.mp4 -c:v libx264 -crf 28 -preset fast out.mp4

На тестовом ролике исходник весил 13074 байта, а на выходе получилось 10861 байт. CRF — шкала качества от 0 до 51, где меньше значит лучше и больше. Диапазон, который стоит запомнить, — 18–28: 18 визуально неотличимо от оригинала, 23 разумный вариант по умолчанию, 28 заметно мягче, но годится для большинства случаев.

3. Уменьшить разрешение, если сжатия мало

clai
$ clai сожми сильнее и уменьши высоту до 144 пикселей→ ffmpeg -i in.mp4 -vf "scale=-2:144" -crf 30 small.mp4

Тот же ролик, теперь 8130 байт против исходных 13074. -2 в ширине значит «посчитай сам, сохрани пропорции и округли до чётного» — кодекам нужны чётные размеры, и именно на этом падает половина команд из интернета.

4. Поменять контейнер, не трогая содержимое

clai
$ clai переложи это видео из mov в mp4 без перекодирования→ ffmpeg -i input.mov -c copy output.mp4

-c copy копирует потоки как есть. Занимает секунды вместо минут и не теряет качества — если кодеки внутри совместимы с новым контейнером, а для mov в mp4 обычно так и есть.

5. Обработать всю папку

clai
$ clai сконвертируй все mov в этой папке в mp4, имена сохрани→ for f in *.mov; do ffmpeg -i "$f" -c:v libx264 -crf 23 "${f%.mov}.mp4"; done

${f%.mov} отрезает расширение. Кавычки вокруг $f не опциональны — без них первый же файл с пробелом в имени сломает цикл.

6. Вырезать кусок без перекодирования

clai
$ clai вырежи из видео кусок с 30 секунды длиной в минуту→ ffmpeg -ss 30 -i input.mp4 -t 60 -c copy clip.mp4

-ss до -i работает быстро, потому что ffmpeg перематывает, а не декодирует. С -c copy рез идёт по ближайшему ключевому кадру, поэтому начало может съехать на секунду. Нужна точность до кадра — уберите -c copy и заплатите перекодированием.

Грабли

  • -preset меняет скорость, а не качество. ultrafast кодирует быстро и даёт файл побольше, slow наоборот. На качество при том же CRF влияет слабо — это чистый обмен времени на размер.
  • Звук молча перекодируется. Если про -c:a ничего не сказано, ffmpeg решает сам. Добавьте -c:a copy, когда со звуком ничего делать не нужно.
  • CRF не значит одно и то же для всех кодеков. Для libx265 та же цифра даёт более высокое качество: CRF 28 у x265 примерно равен CRF 23 у x264.

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

Какой CRF выбрать? Начните с 23. Файл слишком большой — берите 28. Для архива, который не должен деградировать — 18.

Чем ffmpeg лучше онлайн-конвертера? Ролик не покидает вашу машину, нет ограничений по размеру, и одна команда обрабатывает целую папку.

Как ускорить кодирование? Аппаратный кодер: -c:v h264_nvenc на NVIDIA, -c:v h264_videotoolbox на macOS. Заметно быстрее, качество при том же битрейте чуть хуже.

Читайте также

CliAI подберёт нужные флаги ffmpeg под то, что вы опишете, включая CRF и фильтр масштабирования. Установка одной строкой.