Технологии

FFmpeg: обработка готового видео без монтажки

22 минАктуально на 18 августа 2026

FFmpeg — обработка видео в приложении

Ты попросил нейросеть сгенерировать ролик для лендинга «Змейки» и получил файл нужного качества, но не того формата, что просит соцсеть. Или записал скринкаст с телефона: как открывается игра, как двигается персонаж, — а файл весит вчетверо больше, чем разрешает форма загрузки. Генератор видео и экран телефона отдают файл таким, какой он есть, а привести его к нужному размеру, длине и формату приходится уже самому. Эту задачу решает не нейросеть и не облачный сервис, а маленькая консольная программа с историей больше двадцати лет — FFmpeg. Она не рисует ни кадра сама, зато конвертирует, сжимает, режет и склеивает практически любой видеофайл, который уже лежит у тебя на диске.

Содержание
  1. Что такое FFmpeg и почему это стандарт де-факто
  2. Чем FFmpeg отличается от Cloudinary и облачных сервисов
  3. Как ИИ-ассистент собирает нужную команду
  4. Типовые задачи, которые решает FFmpeg
  5. Как установить FFmpeg простыми словами
  6. Ограничения консольного инструмента для новичка
  7. Весь путь одной схемой
  8. Как попробовать: практический сценарий с ИИ-ассистентом
  9. Частые вопросы
  10. Заключение

Что такое FFmpeg и почему это стандарт де-факто

FFmpeg — бесплатная консольная утилита для обработки видео и аудио. Никакого окна с таймлайном и кнопками, только команда в терминале: подаёшь на вход файл, описываешь, что с ним сделать, получаешь на выходе результат. Один и тот же инструмент понимает практически любой формат видео и звука, какой только существовал за последние тридцать лет, — от древних AVI до современных WebM и HEVC.

Именно поэтому FFmpeg давно стал негласным стандартом обработки видео. Он бесплатный, открытый, работает одинаково на Windows, macOS и Linux и умеет буквально всё, что вообще можно сделать с видеофайлом: сменить контейнер, перекодировать дорожку, вырезать кусок, наложить фильтр, склеить несколько роликов в один. Огромное количество программ и сервисов, которые показывают пользователю красивый интерфейс с ползунками и превью, внутри всё равно вызывают FFmpeg — просто прячут командную строку за кнопками.

Для вайбкодера это значит одну простую вещь: если приложению нужно что-то сделать с видео — принять загрузку от пользователя, сжать её перед сохранением, вырезать превью, — почти наверняка это можно поручить FFmpeg. Не изобретать свой код обработки видео, а вызвать готовую команду из серверной части приложения или прогнать файл вручную перед публикацией.

Название расшифровывается как «Fast Forward MPEG» — намёк на формат MPEG, вокруг обработки которого утилита изначально строилась, хотя сегодня она давно вышла далеко за пределы одного этого формата. Работает FFmpeg не только с видео целиком, но и с отдельными дорожками внутри файла: можно вытащить только звук, оставить только картинку без звука, заменить одну дорожку на другую, не трогая остальное. Именно эта работа на уровне отдельных дорожек и делает утилиту одинаково полезной и для видео, и для аудио, а не только для одного из двух.

Чем FFmpeg отличается от Cloudinary и облачных сервисов

В статье про Cloudinary разобран управляемый сервис для картинок: загружаешь оригинал один раз, а дальше нужный размер и формат собираются на лету по параметрам прямо в ссылке. Сервер обработки, хранилище и CDN — забота провайдера, тебе остаётся только менять цифры в URL.

FFmpeg устроен ровно наоборот. Это не сервис, а инструмент: нет облака, нет ссылки с параметрами, нет готовой инфраструктуры, которая сама решит, когда и как обработать файл. Команду запускаешь ты сам — либо руками в терминале, либо из кода своего приложения, — и результат появляется сразу же на том компьютере или сервере, где выполнилась команда. Никакой магии на лету по URL: один запуск — один готовый файл.

Разница отражает и разницу тем. Cloudinary решает задачу картинок, которые нужно показывать в разных размерах разным пользователям постоянно, без участия разработчика в каждом отдельном случае. FFmpeg решает разовую задачу: у тебя уже есть конкретное видео, и его нужно один раз привести к нужному виду перед публикацией. Для потокового пережатия видео под сотни устройств существуют отдельные видеосервисы с обработкой на лету, но это уже другой масштаб задачи — для готового ролика на лендинг или в соцсеть хватает одного прогона FFmpeg.

Есть и практическая сторона этой разницы. У Cloudinary картинка живёт в облаке сервиса, и за хранение и обработку в какой-то момент выставляется счёт по тарифу. У FFmpeg файл никуда не отправляется и не хранится на чужой стороне — вся работа идёт на том компьютере или сервере, где установлена утилита, а сама утилита при этом бесплатна и без ограничений на количество запусков. Плата за это — обратная тому, что даёт managed-сервис: не готовая инфраструктура, а полная ответственность за то, где хранится файл, кто его обрабатывает и на что хватает ресурсов конкретной машины.

Как ИИ-ассистент собирает нужную команду

У FFmpeg сотни флагов, и держать их в голове не нужно — команду проще попросить у ИИ-ассистента, чем листать документацию. Ты формулируешь задачу на обычном русском: «сожми это видео под пять мегабайт, не потеряв заметно в качестве» или «вырежи из ролика кусок с пятой по двадцатую секунду» — ассистент подставляет конкретные флаги и объясняет, что каждый из них делает.

Это тот редкий случай, где консольный инструмент без интерфейса становится доступным новичку именно благодаря ИИ. Раньше путь к нужной команде FFmpeg лежал через десяток открытых вкладок с форумами и документацией, где разбирались в разнице между кодеками и битрейтом. Сейчас достаточно описать результат, который нужен, — а разбираться в терминах кодек, контейнер и битрейт можно постепенно, по ходу дела, а не перед первым запуском.

Формулировать задачу стоит через результат, а не через технические термины: не «какой codec использовать», а «мне нужен файл до восьми мегабайт для загрузки в Telegram» или «хочу mp4 вместо .mov, чтобы видео открывалось в браузере». Ассистент сам подберёт кодек, контейнер и параметры сжатия под описанную цель — а заодно подскажет, если задача противоречива: например, если попросить сжать видео до совсем крохотного размера и одновременно сохранить исходное качество без потерь, он честно объяснит, что одно с другим не совместимо.

Полезная привычка — просить не только команду, но и объяснение построчно: что значит каждый флаг. Через несколько таких запросов начинаешь узнавать повторяющиеся куски команд — -i для исходного файла, -ss для точки старта, -t или -to для длительности — и дальше уже можно подправлять готовую команду руками, не начиная каждый раз с нуля.

Ещё один рабочий приём — просить ассистента сначала посмотреть на сам файл, а уже потом предлагать команду. У FFmpeg есть утилита-компаньон ffprobe, которая просто показывает характеристики файла — длительность, разрешение, кодек, битрейт — без какой-либо обработки:

ffprobe input.mp4

Если сначала показать ассистенту вывод этой команды, а не только имя файла, он подберёт параметры сжатия или конвертации точнее — например, не станет предлагать растянуть кадр до разрешения, которого в оригинале и так не было. Для новичка это ещё и способ понять, что вообще происходит внутри файла, прежде чем что-то с ним делать.

Типовые задачи, которые решает FFmpeg

Ниже — пять сценариев, которые чаще всего встают перед вайбкодером, когда готовое видео есть, а в исходном виде оно не годится для публикации.

Конвертация формата

Разные сервисы и разные генераторы видео отдают файл в разных контейнерах: одна нейросеть сохраняет ролик в .mov, другая в .webm, скринкаст с телефона может прийти в .mkv. А браузер, соцсеть или лендинг курса ждут стандартный mp4, который открывается везде без вопросов. Смена контейнера — самая простая операция FFmpeg:

ffmpeg -i input.mov output.mp4

Одна строка меняет упаковку файла на mp4. Если исходный кодек внутри уже совместим с новым контейнером, FFmpeg просто переложит данные без перекодирования — это займёт секунды даже для длинного ролика. Если нет — перекодирует дорожки заново, и это уже займёт время, зависящее от длины видео и мощности компьютера.

Сжатие под лимит размера

Самая частая причина открыть FFmpeg — файл слишком тяжёлый для того места, куда его нужно загрузить. У мессенджеров, соцсетей и почтовых вложений есть ограничения по размеру файла, и точные цифры стоит смотреть в актуальных правилах конкретной площадки, а не в статье, написанной заранее. Задача FFmpeg — подогнать вес видео под нужный лимит, управляя битрейтом:

ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4

Параметр -crf — это шкала качества: чем меньше число, тем выше качество и больше вес файла, чем больше число, тем сильнее сжатие. Для большинства демо-роликов приемлемый компромисс находится в пределах между 23 и 30 — но точное число лучше подбирать пробой на конкретном видео, а не по одной универсальной цифре. Если нужен файл строго определённого веса — скажем, ровно под лимит конкретной площадки, — ИИ-ассистент умеет посчитать нужный битрейт из длительности ролика и целевого размера файла, и сразу собрать готовую команду под эту арифметику.

Обрезка по времени

Скринкаст демо часто получается длиннее, чем нужно: пара секунд подготовки в начале, лишний дубль в конце. Вырезать нужный отрезок — операция с двумя параметрами времени:

ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:25 -c copy output.mp4

-ss задаёт точку старта, -to — точку конца, а флаг -c copy говорит FFmpeg не перекодировать видео заново, а просто вырезать нужный кусок из уже существующих данных — это почти мгновенная операция. Обратная сторона у -c copy одна: точка обрезки иногда сдвигается на ближайший опорный кадр видео и может оказаться не ровно там, где просили. Если важна обрезка ровно по кадру, а не приблизительно, из команды убирают -c copy — тогда FFmpeg перекодирует ролик заново и точку обрезки соблюдает точно, просто чуть дольше по времени.

Кадр для превью и обложки

Для карточки в соцсети, обложки видео на лендинге или превью в списке демо-роликов нужен один статичный кадр из ролика. Доставать его руками — открывать видео, ставить на паузу, делать скриншот — не обязательно, FFmpeg вытаскивает конкретный кадр одной командой:

ffmpeg -i input.mp4 -ss 00:00:03 -vframes 1 cover.jpg

Команда берёт кадр на третьей секунде и сохраняет его отдельным jpg-файлом. Число в -ss стоит подбирать не наугад, а посмотрев видео заранее: удачный кадр для обложки — тот, где на экране видно суть ролика, а не переходную анимацию или чёрный экран в начале записи.

Субтитры поверх видео

Ролик без звука или с закадровой речью на скорости просмотра без звука — обычная ситуация в соцсетях, где видео чаще смотрят в ленте с выключенным звуком. Готовый файл с субтитрами в формате .srt FFmpeg вшивает прямо в кадр:

ffmpeg -i input.mp4 -vf subtitles=subs.srt output.mp4

Текст субтитров при этом нужен заранее — отдельным файлом с таймкодами, где какая фраза появляется. Написать сам файл .srt вручную для короткого демо несложно, а для более длинного ролика с речью проще попросить ИИ-ассистента разбить текст на реплики с таймкодами по длине аудиодорожки, а уже готовый файл подать в FFmpeg этой командой.

Извлечение звука отдельным файлом

Иногда нужно не видео, а именно звуковая дорожка сама по себе — например, чтобы отдать голос диктора на отдельную озвучку или сохранить фоновую музыку из ролика отдельно от картинки. FFmpeg вынимает звук без перекодирования видео, которое в этой задаче вообще не нужно:

ffmpeg -i input.mp4 -vn -acodec copy audio.aac

Флаг -vn отключает видеодорожку целиком, а -acodec copy копирует звук как есть, без потери качества и без лишнего ожидания перекодирования. Если на выходе нужен распространённый формат вроде mp3, а не aac, FFmpeg перекодирует звук той же командой, только с другим кодеком вместо copy — и снова эту деталь проще один раз уточнить у ИИ-ассистента, чем запоминать самому.

Как установить FFmpeg простыми словами

Вопрос «ffmpeg как установить» решается по-разному в зависимости от системы, но логика везде одна: это не программа с установщиком и окном «Далее — Далее — Готово», а консольная утилита, которую ставят через менеджер пакетов операционной системы.

На Windows проще всего поставить через встроенный менеджер пакетов winget одной командой в терминале, либо скачать готовую сборку с официального сайта проекта и добавить путь к ней в переменные окружения системы — второй способ чуть более ручной, но тоже рабочий. На macOS FFmpeg ставится через Homebrew — менеджер пакетов, который многие вайбкодеры и так уже используют для других инструментов. На Linux почти всегда есть в стандартном репозитории дистрибутива и ставится через apt, dnf или аналог, в зависимости от того, какой дистрибутив используется.

Если процесс с менеджерами пакетов кажется незнакомым, самый простой путь — не разбираться в этом вручную, а показать ИИ-ассистенту в терминале, какая у тебя система, и попросить установить FFmpeg: он подберёт правильную команду под конкретную ОС и объяснит, что она делает, прежде чем её выполнить. Стоит только убедиться, что команда ставит именно FFmpeg с официального источника пакетов твоей системы, а не скачивает исполняемый файл с сомнительного сайта.

Отдельный случай — если приложение разрабатывается в облачной среде разработки или деплоится на сервер, где обработка видео происходит уже на бэкенде. Многие готовые окружения для разработки и многие облачные сервера, на которых разворачивают приложения, уже содержат FFmpeg предустановленным или ставят его одной строкой в конфигурации сборки — стоит проверить это до того, как писать код, который на него рассчитывает, чтобы не столкнуться с ошибкой «команда не найдена» уже на проде.

Проверить, что установка прошла успешно, можно одной командой в том же терминале:

ffmpeg -version

Если в ответ терминал печатает номер версии и список поддерживаемых кодеков — всё встало на место. Если вместо этого приходит ошибка вроде «команда не найдена», чаще всего дело не в самой установке, а в том, что путь к программе не попал в системную переменную PATH — терминал просто не знает, где искать исполняемый файл. Здесь снова проще не разбираться в переменных окружения самостоятельно, а показать ИИ-ассистенту точный текст ошибки: он подскажет команду, которая добавит нужный путь, под конкретную операционную систему.

Ограничения консольного инструмента для новичка

При всей мощности FFmpeg остаётся инструментом без единой поблажки для новичка, и об этом стоит знать заранее, а не после первой запутанной ошибки.

Нет визуального превью. В отличие от программы для монтажа, где видно таймлайн и можно на глаз найти нужный момент, FFmpeg работает вслепую по числам таймкодов. Прежде чем резать или доставать кадр, ролик стоит открыть в обычном плеере и заранее выписать нужные секунды — иначе точку обрезки или момент для превью придётся угадывать по нескольку попыток.

Ошибки читаются тяжело. Сообщение об ошибке FFmpeg — это часто длинная техническая простыня с названиями кодеков и внутренних параметров, а не понятная фраза вроде «неверный формат файла». Разобрать такую ошибку самостоятельно новичку сложно, но скопировать текст целиком и отдать ИИ-ассистенту — рабочий путь: он обычно быстро находит, какая часть команды не подошла именно для этого файла.

Файл легко перезаписать поверх исходника. Если по невнимательности указать одно и то же имя на входе и на выходе команды, оригинал будет испорчен или потерян безвозвратно — никакого диалога с подтверждением тут нет, команда просто выполнится. Правило простое и не требует исключений: исходный файл никогда не трогается напрямую, результат всегда сохраняется под новым именем, а оригинал остаётся рядом нетронутым, пока не убедишься, что готовый файл действительно то, что нужно.

Порядок флагов иногда имеет значение. У FFmpeg есть особенность, которая ловит даже опытных пользователей: некоторые флаги нужно ставить строго до входного файла, другие — строго после, и от перестановки местами результат команды может незаметно измениться. Разбираться в этой тонкости вручную новичку не обязательно — если команду собирает ИИ-ассистент, порядок он расставляет сам, а вот при ручной правке готовой команды стоит менять только значения параметров, а не переставлять сами флаги местами без понимания зачем.

Долгая обработка длинных файлов не отменяется на середине. Перекодирование — не мгновенная операция, для длинного видео в высоком разрешении она может занять заметное время, зависящее от мощности компьютера. Прерывать процесс на середине не стоит: лучше запускать обработку на файле, в котором заранее уверен, чем останавливать на середине и разбираться, что осталось от результата.

Не каждый формат поддержан одинаково полно. Большинство распространённых форматов FFmpeg читает и пишет без проблем, но встречаются редкие или проприетарные варианты кодеков, для которых поддержки в конкретной сборке может не быть. Если команда падает с ошибкой про незнакомый кодек на входном файле, часто помогает не разбор ошибки построчно, а простой обходной путь: сначала сконвертировать файл в максимально стандартный формат через любой другой доступный проигрыватель или конвертер, а уже с ним работать дальше в FFmpeg.

Ни одно из этих ограничений не делает FFmpeg неподходящим инструментом для новичка — они лишь означают, что первые несколько команд стоит запускать на копии файла, а не на единственном оригинале, и не стесняться переспрашивать у ИИ-ассистента, что означает та или иная строка в выводе терминала.

Весь путь одной схемой

Если собрать всё выше в один процесс, путь готового видео от исходника до публикации выглядит так:

flowchart TB
    A["Видео от нейросети или скринкаст демо"] --> B["FFmpeg"]
    B --> C["Конвертация формата"]
    B --> D["Обрезка по времени"]
    B --> E["Сжатие под размер"]
    B --> F["Кадр-превью и субтитры"]
    C --> G["Готовый файл для публикации"]
    D --> G
    E --> G
    F --> G

Источник видео на схеме не важен: это может быть ролик, собранный Kling AI или Veo 3 из текстового описания, а может быть обычная запись экрана телефона. Дальше все ветки одинаковые — FFmpeg берёт файл и применяет к нему ровно те операции, которые нужны для конкретной задачи, необязательно все сразу. Часто хватает одной команды: только сжать или только вырезать кадр.

Как попробовать: практический сценарий с ИИ-ассистентом

Возьмём реальную ситуацию из курса: нейросеть сгенерировала короткий ролик для лендинга «Змейки», файл лежит на диске в формате .mov, весит больше, чем разрешает форма загрузки на площадке, и нужна ещё картинка для обложки этого видео.

Порядок действий такой же, как с любой другой задачей вайбкодинга — не изучать документацию FFmpeg заранее, а описать ИИ-ассистенту в терминале результат, который нужен получить. Например:

💡

«У меня есть файл demo.mov. Сделай из него demo.mp4, сожми примерно до восьми мегабайт, и отдельно вытащи кадр на третьей секунде в файл cover.jpg».

Ассистент соберёт из этого описания две команды FFmpeg подряд, объяснит выбранные параметры и запустит их, если у него есть доступ к терминалу проекта. Дальше остаётся посмотреть результат: открыть получившийся mp4 в обычном плеере, проверить, что качество устраивает и вес укладывается в лимит, и глянуть картинку обложки — тот ли это кадр, который нужен.

Если результат не устроил — скажем, картинка получилась смазанной или сжатие пережало видео сильнее, чем хотелось, — не нужно разбираться, какой флаг подправить. Проще снова описать словами, что не так: «сожми не так сильно, качество важнее размера» или «возьми кадр для обложки не на третьей секунде, а ближе к концу ролика» — и получить новую команду. Несколько таких итераций обычно быстрее, чем искать нужный флаг в документации самому.

Тот же принцип работает не только в терминале руками, но и внутри самого приложения: если пользователи загружают видео, а приложению нужно сохранять их уже сжатыми и с готовой обложкой, серверная часть может вызывать FFmpeg программно при каждой загрузке — прямо так и формулируется задача ассистенту: «при загрузке видео пользователем сожми его до разумного размера и сохрани отдельным файлом кадр на первой секунде как превью». Логика обработки останется той же, просто вместо ручного запуска команда будет срабатывать автоматически внутри кода приложения.

Похожий сценарий встречается и с несколькими файлами сразу — например, если после серии тестовых генераций в Kling или Veo 3 на диске скопилось десять коротких клипов и все нужно привести к одному формату и весу перед тем, как выбрать лучший. Прогонять команду по одной вручную десять раз не обязательно: можно попросить ассистента написать короткий скрипт, который применит одну и ту же команду FFmpeg по очереди ко всем файлам в папке. Для разовой задачи курса это не всегда нужно, но полезно знать, что рутинное повторение одной и той же команды — тоже не повод делать её руками.

Частые вопросы

Чем FFmpeg отличается от онлайн-конвертеров видео?

Онлайн-конвертер — это чужой сервер: файл загружается туда, обрабатывается и скачивается обратно, а значит, зависит от скорости интернета, лимитов конкретного сайта и от того, что происходит с файлом на чужой стороне между загрузкой и скачиванием. FFmpeg работает локально на своём компьютере или на своём сервере — файл никуда не отправляется, обработка идёт мгновенно после запуска команды, и никаких посторонних ограничений по размеру или формату файла нет.

Нужно ли знать программирование, чтобы пользоваться FFmpeg?

Нет. Работа с FFmpeg — это ввод одной команды в терминал, а не написание кода. Программирование пригодится только в одном случае: если нужно, чтобы приложение вызывало FFmpeg само, автоматически, при каждой загрузке видео пользователем, — тогда команда FFmpeg встраивается в серверный код приложения, а не вводится руками.

Можно ли сжать видео совсем без потери качества?

Формально да, но выигрыш в размере при этом окажется маленьким — по-настоящему сильное сжатие без потерь качества, заметных на глаз, недостижимо: чем сильнее нужно уменьшить вес файла, тем заметнее становится разница с оригиналом. Практическая задача обычно не «сжать без потерь вообще», а «сжать так, чтобы разница была незаметна на экране телефона или в ленте соцсети» — и здесь FFmpeg с параметром -crf, подобранным пробой, справляется хорошо.

Как понять, что видео обработалось правильно?

Открыть получившийся файл в обычном плеере и посмотреть: та ли длина, то ли качество, нет ли артефактов сжатия в движении. FFmpeg не показывает предпросмотр во время работы — только текст в терминале о ходе выполнения, а проверка результата всегда происходит уже после того, как файл готов.

Можно ли вызывать FFmpeg прямо из кода своего приложения?

Да, и это обычная практика для серверной части приложений, которые принимают видео от пользователей. Серверный код запускает FFmpeg как внешний процесс с нужными параметрами, дожидается завершения и работает дальше уже с готовым обработанным файлом. Именно так внутри многих сервисов с видео, у которых снаружи виден только аккуратный интерфейс без единой команды.

Портится ли исходный файл при обработке?

Сам по себе FFmpeg исходный файл не трогает и не изменяет — он читает его и создаёт новый файл с результатом. Испортить оригинал можно только одним способом: случайно указать для результата то же имя файла, что и у исходника, тогда команда перезапишет его без предупреждения. Хорошая привычка — всегда называть результат обработки по-другому, чтобы такой ошибки не могло случиться в принципе.

Работает ли FFmpeg только с видео или с аудио тоже?

С обоими сразу. Утилита изначально задумывалась для обработки медиафайлов вообще, а не только видео, — она читает и пишет распространённые аудиоформаты, умеет вынимать звуковую дорожку из видео отдельным файлом или, наоборот, заменять звук в ролике на другой. Для чисто звуковых задач, вроде конвертации подкаста или подрезки музыкального трека, FFmpeg подходит так же хорошо, как для видео.

Заключение

FFmpeg закрывает именно тот кусок работы с видео, который остаётся после генерации или записи ролика: привести уже готовый файл к нужному формату, размеру и длине перед публикацией. В отличие от Cloudinary, который обрабатывает картинки как управляемый сервис на лету по ссылке, FFmpeg — сырой инструмент, который запускаешь сам, командой в терминале или из кода приложения, и получаешь результат сразу, без облака посередине.

Разбираться в полном списке флагов для этого не нужно: достаточно описать ИИ-ассистенту, что должно получиться на выходе — конкретный формат, вес файла, длина ролика, кадр для обложки, — и он соберёт нужную команду. Если ролик из нейросети или скринкаст демо приложения уже готов, но не подходит для публикации в исходном виде, следующий шаг — не искать программу для монтажа, а открыть терминал и попросить ассистента подогнать файл под нужный вид ровно так, как описано выше.

Читай дальше

Все статьи

Не просто статьи — тебя доведут до результата

В практикуме за 2499 ₽ рядом живая команда практикующих разработчиков и маркетологов: ведём по шагам до твоего работающего приложения. Не «ролики и сам разбирайся» — помогаем на каждом затыке.

Перейти к практикуму
Все статьи Ещё: технологии и архитектура