![](https://habrastorage.org/webt/sq/-r/y5/sq-ry5plpxabgkztrkj01cw99hm.jpeg)
Считается, что работа в консоли эффективнее GUI по нескольким причинам. Во-первых, там быстрее набирать команды, чем двигать курсором. Во-вторых, на CPU, память и GPU не ложится лишнее бремя графической оболочки, так что любые процессы быстрее выполняются в консоли.
Но есть люди, которые всегда предпочтут GUI. Они считают графический интерфейс «наиболее эффективным и удобным способом работы на десктопе». На самом деле они во многом правы, в том числе для специфических задач видеообработки важно сразу видеть результат.
FFmpeg — изначально консольная утилита. Но её популярность крайне высока. Поэтому появляются всё новые варианты графических оболочек для FFmpeg, чтобы доступ к инструменту получили абсолютно все пользователи.
Эта консольная утилита объединяет в одном бинарнике более 300 видео/аудио/графических кодеков, декодеров, муксеров, демуксеров и фильтров для обработки/сжатия/редактирования аудио и видео. В универсальном комбайне FFmpeg есть абсолютно любые мыслимые функции, а документация только к утилите не уступает Photoshop. Например, в популярной бесплатной книжке-руководстве по FFmpeg больше тысячи страниц. А есть же ещё библиотеки, API, разные компоненты.
Мы уже упоминали про безграничные возможности FFmpeg на конкретных примерах. В прошлый раз мы приводили пример из продвинутого мануала, чтобы оценить уровень крутости FFmpeg. Вот он:
ffmpeg -y \ -ss 20 -t 60 -i bbb_sunflower_1080p_60fps_normal.mp4 \ -i train.jpg \ -ss 4 -i voice_recording.wav \ -filter_complex "[0:v]hue=h=80:s=1[main] ; [1:v]crop=w=382:h=304:x=289:y=227[train] ; [main][train]overlay=x=200:y=200,vignette=PI/4[video] ; [2:a]volume=1.5,aecho=0.8:0.9:100:0.3[speech] ; [0:a][speech]amix=duration=shortest,asplit[audio1][audio2]" \ -map '[video]' -map '[audio1]' -metadata title="Editor's cut" bbb_edited.mp4 \ -map '[audio2]' bbb_edited_audio_only.wav
Эта команда делает в том числе следующее:
- Открывает файл.
- Вырезает фрагмент (
-ss 20 -t 60
).
- Накладывает изображение
train.jpg
.
- Обрезает наложенное изображение (
crop
).
- Добавляет эффект виньетирования под углом PI/4.
- Накладывает фильтр для коррекции тона (
hue
).
- Накладывает дополнительную звуковую дорожку
voice_recording.wav
.
- Увеличивает громкость.
- Добавляет эхо.
- Экспортирует результат в разные форматы.
- Экспортирует оригинальную звуковую дорожку.
Одна команда в консоли заменяет десять минут редактирования в Premiere Pro!
Естественно, выучить и запомнить все возможные ключи и опции FFmpeg никто не в силах. Все мы подсматриваем в документацию. Но есть ещё один вариант: использовать графические оболочки, которые упрощают выполнение базового редактирования в FFmpeg и снижают порог входа.
▍ FFmpeg Explorer
FFmpeg Explorer — удобный инструмент для изучения, как работают различные фильтры FFmpeg, которых поддерживается несколько десятков. Это различные спецэффекты, переходы и прочие способы изменения аудио- и видеоматериала.
![](https://habrastorage.org/webt/hq/cg/ot/hqcgotgdf9xkramsk7u_eyncxwm.png)
Алгоритм простой:
- Добавляем фильтры из списка слева:
Список фильтров в отдельном текстовом файле для справки. Официальная документация по фильтрам.
- Щёлкаем по фильтрам в редакторе узлов, чтобы изменить параметры.
- Нажимаем Render Preview. Результат отображается в браузере.
Конечно, в интерфейс можно загрузить свой файл и редактировать его. Жестокое видео по умолчанию опубликовано чисто ради хайпа.
Чтобы редактировать схему внизу, следует отжать кнопку Lock Layout — тогда элементы начинают перемещаться по полю, а связи между ними можно изменять вручную. Там можно менять порядок применения фильтров и проч.
![](https://habrastorage.org/webt/dv/3w/pq/dv3wpqv6_23rtogvrnohal-r-rg.png)
Автор предупреждает, что это пока эксперимент, приложение работает нестабильно, часто падает (тогда его нужно перегрузить), а запуск на мобильных устройствах не гарантирован. О багах просьба сообщать в репозитории на Github.
▍ FFMPEG UI
FFMPEG UI — это вообще не веб-приложение, а нативная программа, которая выпускается в версиях под macOS, Windows и Linux. Разработчик ориентировался на максимальную простоту использования и понятный интерфейс.
Просто открываем файл, указываем настройки видео для конвертации:
![](https://habrastorage.org/webt/o3/mq/5c/o3mq5comzq5cjwqkti3td439rnk.png)
Также настройки звука:
![](https://habrastorage.org/webt/hl/ka/5c/hlka5crqw6hh-eopkrp4-r-9y5u.png)
И ждём обработки результата:
![](https://habrastorage.org/webt/5e/bw/wu/5ebwwubyv5hvkpxgbnadawmn_eu.png)
В общем, это не столько редактор, сколько простой конвертер на базе FFmpeg, если нужно переконвертировать файл в другой формат. Что ж, такие инструменты тоже нужны.
Хотя с технической точки зрения здесь нет ничего интересного. Бинарник FFmpeg просто упакован в Electron, исходный код закрыт.
По функциональности эта графическая оболочка значительно уступает Staxrip и другим видеоредакторам на базе FFmpeg, перечисленным ниже. Что тут говорить, даже старый добрый Handbrake кажется поудобнее.
▍ ffmpeg-online
Веб-приложение ffmpeg-online основано не на оригинальном FFmpeg, а на приложении ffmpeg.wasm, форке WebAssembly/JavaScript оригинального проекта. Смысл в том, что функции FFmpeg должны нативно поддерживаться в браузере. Это уже совершенно новый уровень.
![](https://habrastorage.org/webt/7x/pr/e5/7xpre50r5y6o5aniti4s8cbx0v8.png)
С точки зрения практического использования эта «графическая оболочка» не слишком отличается от обычной консоли. Например, если в консольном FFmpeg мы хотим вырезать и сохранить кусочек видео, то пишем что-то вроде такого:
ffmpeg -i test.mp4 -ss 00:00:00 -t 00:00:05 -vcodec copy -acodec copy output.mp4
В веб-приложении это выглядит примерно так же:
![](https://habrastorage.org/webt/4t/ye/1l/4tye1lj9_vp4onc87aln5smhx6a.jpeg)
То есть это приложение не облегчает работу с FFmpeg, здесь другая задача. Это эксперимент по нативной поддержке форка на WebAssembly и JavaScript.
Репозиторий проекта на Github.
Это уже как минимум вторая попытка порта на Wasm, ранее это сделали для проекта Wasmer (с поддержкой всех кодеков и многопоточности, видео):
▍ VapourSynth и др.
VapourSynth не является именно «графической» оболочкой. Это видеоредактор на Python, который задействует FFmpeg и предоставляет более удобный интерфейс для редактирования видео, чем нативная консоль. Его можно назвать «Python-оболочкой для FFmpeg». Есть обширный каталог плагинов для VapourSynth, который значительно расширяет функциональность «базового» FFmpeg.
![](https://habrastorage.org/webt/qo/yn/0b/qoyn0bopxz5gjklxjwva-yvmt7c.png)
Существуют и нишевые видеоредакторы на базе FFmpeg, такие как LosslessCut для быстрых операций аудио- и видеоредактирования, такие как склеивание фрагментов, разделение на части или вырезание кусков. Ключевая особенность — отсутствие перекодирования. Поэтому операции происходят практически мгновенно и без потери качества, по контрасту с длительным перекодированием в традиционных видеоредакторах.
![](https://habrastorage.org/webt/sq/-r/y5/sq-ry5plpxabgkztrkj01cw99hm.jpeg)
LosslessCut
Стоит упоминания мощный видеоредактор Staxrip — вот уж где точно полноценный интерфейс для FFmpeg.
![](https://habrastorage.org/webt/a4/ft/1h/a4ft1hkepsiaqksiiqhpi_ueidk.png)
FFmpeg работает под капотом опенсорсных видеоредакторов Shotcut, KDEnlive и других. Все они являются в каком-то смысле «графическими оболочками» для базового движка.
![](https://habrastorage.org/webt/gy/f2/ef/gyf2efwnrvprvgs6m5osroscgae.png)
Shotcut
▍ FFmpeg 6.1
Тем временем сам FFmpeg продолжает расти и развиваться. Недавно вышла версия 6.1 Heaviside.
Некоторые нововведения:
- Возможность активации Vulkan API для аппаратного декодирования видео H264, HEVC и AV1.
- Добавлен видеокодер AV1 на основе VAAPI.
- Поддержка кодеков HEVC, VP9 и AV1 в потоках rtmp и файлах flv.
- Добавлен парсер, кодировщик и декодировщик медиаконтейнеров в формате EVC (Essential Video Coding), развиваемом рабочей группой MPEG в качестве стандарта MPEG-5.
- Реализована возможность использования параметров P_SKIP для ускорения видеокодирования библиотекой libx264.
- Добавлены новые видеофильтры, в том числе деинтерлейсинг BWDIF (Bob Weaver Deinterlacing Filter), nlmeans_vulkan (устранение шума на алгоритме Non-local means), xfade_vulkan (эффект затухания), apsnr (измеряет уровень сигнал-шум для звука).
А это основные оптимизации:
- Реализация FFT, MDCT, DCT и DST для кодеков и фильтров полностью заменена на более быструю libavutil/tx. Это также привело к уменьшению размера скомпилированного бинарного файла, что особенно заметно в маленьких сборках.
- Очень сильно сократилось общее количество выделений памяти на каждый кадр при декодировании видео, что уменьшило накладные расходы.
- Объединены оптимизации RISC-V для многих частей DSP-кода. В основном, остались только большие декодеры.
- Проведена работа по улучшению корректности временных меток и длительности кадров в каждом пакете, что повышает точность видео с переменной частотой кадров.
Релиз назревал как минимум полгода, но из-за постоянной активности в репозитории его пришлось отложить, и только в ноябре 2023 года удалось найти момент для его выпуска, прежде чем вливать в кодовую базу некоторые крупные патчи, запланированные для 7.0.
Можно добавить, что благодаря усилиям Антона Кирнова разработчики сумели очистить захламлённую кодовую базу FFmpeg до такой степени, что транскодинг заработал в многопоточном режиме, как и должен был работать по своей архитектуре. Когда многопоточность отладят и активируют, она заметно увеличит производительность FFmpeg на многоядерных системах, если в транскодировании не доминирует один компонент, а сами компоненты не являются многопоточными, говорит Антон.
Очистка кода заняла около двух лет и потребовала более 700 подготовительных коммитов. Выход версии 7.0 запланирован на февраль 2024-го.
Очевидно, что FFmpeg — самый популярный в мире опенсорсный проект для обработки аудио/видео. Он обеспечивает мультимедийную функциональность приложений как минимум на двух планетах.
Очистка кода была задачей высшего приоритета, поскольку внедрять новые функции становилось уже затруднительно. После проведённой оптимизации стал быстрее работать и сам FFmpeg, и все проекты на его основе. В том числе графические оболочки.
Скидки, итоги розыгрышей и новости о спутнике RUVDS — в нашем Telegram-канале 🚀
![](https://habrastorage.org/webt/4g/dr/oa/4gdroaajo7o0zzvwwx5__rlzhwi.png)