Что такое FFmpeg, как он появился и чем он полезен каждому: гайд по установке и использованию

Содержание
Читайте в Telegram
|
FFmpeg — один из самых важных кусков кода в истории интернета, о котором вы, скорее всего, никогда не слышали. Или слышали только краем уха.
Каждый раз, когда вы смотрите видео на YouTube, слушаете подкаст или открываете файл в VLC, где-то в цепочке работает этот инструмент. Он не имеет интерфейса, не просит денег и не показывает рекламу — просто делает свою работу уже больше двадцати лет.
Коротко о том, как это появилось
В конце 90-х мир цифрового видео был настоящим зоопарком: десятки форматов, несовместимые кодеки и дорогой проприетарный софт для работы с ними. В 2000 году французский программист Фабрис Беллар в одиночку написал инструмент, который впоследствии лёг в основу почти всей современной видеоиндустрии.
Он назвал его FFmpeg — от Fast Forward («быстрая перемотка») и названия популярной библиотеки для работы с мультимедиа libmpeg. Изначально это был личный проект: Беллар просто хотел удобный способ конвертировать и обрабатывать видео на своём компьютере.
Проект быстро оброс контрибьюторами и превратился в полноценный опенсорсный инструмент, который сегодня поддерживает десятки форматов и кодеков. Если хотите узнать эту историю подробнее и с деталями — очень рекомендую вот этот ролик от креатора под ником for one, он и вдохновил меня на эту статью.
Кто использует FFmpeg, и зачем вам это знать
FFmpeg сегодня стоит за большей частью видео, которое вы смотрите в интернете — просто вы об этом не подозреваете.
YouTube использует его для обработки миллионов часов видео, которые загружают пользователи каждый день. VLC построен на его библиотеках, Chrome использует их для воспроизведения видео прямо в браузере, а Blender — для работы с видеоредактором. Марсоход Perseverance от NASA сжимает снимки перед отправкой на Землю тоже с помощью FFmpeg.
Всё это звучит круто, но FFmpeg — не только инфраструктура для корпораций. Если вы хоть раз хотели конвертировать видео в другой формат, сжать тяжёлый файл перед отправкой, вырезать кусок из записи, извлечь аудиодорожку или сделать гифку из видеоклипа — FFmpeg умеет всё это, причём бесплатно и без рекламы.
Как установить FFmpeg
FFmpeg — консольный инструмент, у него нет привычного установщика с кнопкой «Далее». Зато установка занимает буквально одну команду в терминале.
Windows. Проще всего через пакетный менеджер winget, он встроен в Windows 10 и 11:
winget install ffmpeg
macOS. Нужен Homebrew — если его ещё нет, установите с brew.sh. Дальше введите:
brew install ffmpegLinux. На Ubuntu и Debian:
sudo apt install ffmpegНа других дистрибутивах команда будет отличаться, но FFmpeg есть в репозиториях практически любого из них.
После установки перезапустите терминал и проверьте, что всё работает — введите ffmpeg -version в терминале, он должен вывести информацию о версии.

Если видите такую выдачу — значит, всё прошло успешно.
Практические примеры команд
Все команды FFmpeg строятся по одному принципу: ffmpeg -i входной_файл [параметры] выходной_файл. Разберём самые полезные сценарии.
Конвертировать видео в другой формат
ffmpeg -i video.mkv output.mp4FFmpeg сам определит нужные кодеки по расширению файла. Так можно конвертировать практически между любыми форматами.
Сжать видео без заметной потери качества
ffmpeg -i video.mp4 -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 128k output.mp4Разберём по частям:
-i video.mp4— входной файл.-c:v libx265— кодек для видео: H.265 (HEVC). Сжимает лучше H.264 при том же качестве.-crf 28— качество: чем выше цифра, тем сильнее сжатие и хуже качество. Диапазон 0–51, где 0 — без потерь, а 28 — хороший баланс для бытового использования.-preset slow— скорость кодирования. Чем медленнее пресет, тем лучше сжатие при том же качестве. Варианты от быстрого к медленному:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow.-c:a aac— кодек для аудио: AAC.-b:a 128k— битрейт аудио: 128 кбит/с. Для речи и фоновой музыки достаточно, для качественного звука лучше взять 192k или 320k.output.mp4— выходной файл.
Вырезать фрагмент
ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:30 -c copy fragment.mp4-ss— точка начала.-to— точка конца.- Флаг
-c copyпозволяет вырезать без перекодирования, поэтому операция занимает секунды или даже выполняется мгновенно.
Извлечь аудиодорожку
ffmpeg -i video.mp4 -q:a 0 -map a audio.mp3-q:a 0— качество аудио в режиме переменного битрейта (VBR). Диапазон 0–9, где 0 — максимальное качество. Это специфично для MP3-кодека LAME.-map a— берём только аудиодорожку из файла, видео игнорируем.audio.mp3— выходной файл. FFmpeg видит расширение.mp3и автоматически использует нужный кодек.
Если дорожек в файле несколько, используйте -map 0:a:0 для самой первой.
Команда вытащит аудио из любого видеофайла и сохранит его в MP3. Удобно, если нужно забрать саундтрек из фильма или запись звука из видеозвонка.
Конвертировать аудио: FLAC → MP3 и ALAC → FLAC
ffmpeg -i audio.flac -b:a 320k audio.mp3
ffmpeg -i audio.m4a -c:a flac audio.flacПервая команда конвертирует FLAC в MP3 с битрейтом 320 кбит/с. Вторая — переводит ALAC (формат Apple, файлы .m4a) в открытый FLAC без потери качества. Во втором случае нет необходимости указывать битрейт, потому что оба контейнера содержат аудио без потерь.
Заменить аудиодорожку на AAC (для телевизоров Samsung)
Телевизоры Samsung не поддерживают DTS и некоторые варианты EAC3 — я лично с этим столкнулся несколько лет назад, когда пытался посмотреть фильм. Чтобы это починить, достаточно перекодировать аудио в AAC, не трогая видео:
ffmpeg -i video.mkv -c:v copy -c:a aac -b:a 320k output.mkv- Флаг
-c:v copy— означает «скопировать видеодорожку без перекодирования». FFmpeg просто перекладывает видеопоток из одного контейнера в другой, не трогая его. Без этого флага FFmpeg стал бы перекодировать видео, это заняло бы много времени.
Перепаковать TS в MP4 или MKV
ffmpeg -i video.ts -c copy output.mp4
ffmpeg -i video.ts -c copy output.mkvФлаг -c copy означает, что видео и аудио не перекодируются — просто меняется контейнер. Операция быстрая и без потери качества.
Изменить разрешение
ffmpeg -i video.mp4 -vf scale=1280:720 output.mp4-vf— это video filter, фильтр для обработки видео. FFmpeg поддерживает целую систему фильтров, иscale— один из них.scale=1280:720— ширина и высота в пикселях. Если хотите сохранить пропорции и не знаете нужную высоту, используйте-1вместо одного из значений, например так:
ffmpeg -i video.mp4 -vf scale=1280:-1 output.mp4Команда масштабирует видео до 720p. Аналогично можно сделать и с любым другим разрешением.
Сделать GIF из видео
ffmpeg -i video.mp4 -ss 00:00:05 -t 3 -vf "fps=15,scale=480:-1" output.gif-t 3— длина гифки в секундах.fps=15— частота кадров.scale=480:-1— ширина в пикселях, высота подбирается автоматически.
Конвертировать HEIC в JPG и HEIF-видео в MP4
ffmpeg -i photo.heic photo.jpg
ffmpeg -i video.heif -c:v libx264 -crf 23 output.mp4Первая команда решает проблему с фото с iPhone, которые иногда не открываются в Windows. Вторая конвертирует видео в формате HEIF (тоже от Apple) в обычный MP4, который откроется в любом редакторе.
Убрать HDR и конвертировать в SDR
ffmpeg -i video.mkv -vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p" -c:v libx264 -crf 18 output.mp4Это самая сложная команда в статье, но логика линейная — идём по цепочке фильтров внутри кавычек.
zscale=t=linear:npl=100— переводим цвета в линейное цветовое пространство.npl=100задаёт пиковую яркость в нитах — стандарт для SDR-экранов.format=gbrpf32le— переводим в 32-битный формат с плавающей точкой. Нужно для точных вычислений при тональном отображении, чтобы не потерять цвета.zscale=p=bt709— применяем цветовой охват BT.709, это стандарт для обычного HD-видео и SDR.tonemap=tonemap=hable:desat=0— само тональное отображение, перевод яркости из HDR в SDR. Алгоритм Hable хорошо сохраняет детали в светах и тенях.desat=0отключает принудительное обесцвечивание пересвеченных участков.zscale=t=bt709:m=bt709:r=tv— финальная калибровка: задаём передаточную функцию, цветовую матрицу и диапазон яркости для телевизионного стандарта.format=yuv420p— возвращаем в стандартный формат пикселей, который понимает любой плеер и редактор.-c:v libx264 -crf 18— кодируем в H.264 с высоким качеством.crf 18здесь ниже обычного, потому что после тонмаппинга лучше не экономить на качестве.
Добавить субтитры в файл
ffmpeg -i video.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4-i subtitles.srt— второй входной файл, субтитры.-c copy— копируем все дорожки без перекодирования.-c:s mov_text— кодек для субтитров (s— subtitles).mov_text— формат субтитров для контейнера MP4. Для MKV нужно указатьsrt— он поддерживает текстовые субтитры напрямую.
Объединить несколько видео в одно
Создайте текстовый файл list.txt с содержимым:
file 'part1.mp4'
file 'part2.mp4'
file 'part3.mp4'Затем выполните:
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4-f concat— указываем FFmpeg использовать специальный демультиплексор для склейки файлов из списка.-safe 0— разрешаем использовать любые пути к файлам вlist.txt. По умолчанию FFmpeg в целях безопасности принимает только относительные пути, этот флаг снимает ограничение.-i list.txt— входной файл со списком видео, которые нужно склеить.-c copy— копируем все дорожки без перекодирования, склейка происходит мгновенно.
Важный момент: все файлы в списке должны быть одного формата, кодека и разрешения — иначе FFmpeg выдаст ошибку или результат будет некорректным.
Что ещё умеет FFmpeg? Неочевидные возможности
Записать экран
ffmpeg -f gdigrab -framerate 30 -i desktop output.mp4gdigrab — встроенный в FFmpeg захватчик экрана для Windows. На macOS замените на -f avfoundation -i "1", на Linux — -f x11grab -i :0.0.
Извлечь кадр из видео
ffmpeg -i video.mp4 -ss 00:00:10 -frames:v 1 frame.jpgСохранит один кадр на отметке 10 секунд в JPG. Замените -frames:v 1 на -vf fps=1 — и получите по одному кадру каждую секунду.
Ускорить или замедлить видео
ffmpeg -i video.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4setpts=0.5*PTS ускоряет видео вдвое, atempo=2.0 — аудио вдвое. Для замедления используйте setpts=2.0*PTS и atempo=0.5. Значение atempo должно быть в диапазоне 0.5–2.0.
Нарезать видео на части одинаковой длины
ffmpeg -i video.mp4 -c copy -map 0 -segment_time 60 -f segment part%03d.mp4Нарежет видео на куски по 60 секунд. Файлы назовёт part001.mp4, part002.mp4 и так далее.
Изменить громкость аудио
ffmpeg -i video.mp4 -af "volume=2.0" output.mp4volume=2.0 — удвоит громкость. Значение меньше 1.0 уменьшит: например, volume=0.5 сделает тише вдвое.
Сдвинуть аудиодорожку
ffmpeg -i video.mp4 -itsoffset 2.0 -i video.mp4 -map 0:v -map 1:a -c copy output.mp4Сдвигает аудио на 2 секунды вперёд относительно видео. Если звук опережает картинку — используйте отрицательное значение: -itsoffset -2.0.
Вывод
FFmpeg — один из тех инструментов, которые стоит установить один раз и держать под рукой всегда. Большинство задач с видео и аудио, для которых раньше нужно было искать какой-нибудь сомнительный конвертер с рекламой, решаются одной командой в терминале.
Команды поначалу выглядят страшновато, но логика у них простая: источник, параметры, результат. Сохраните эту статью в закладки — и в следующий раз, когда видео не откроется на телевизоре или нужно будет сжать папку с исходниками, вы уже будете знать, что делать.







