Считается, что работа в консоли эффективнее 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, которых поддерживается несколько десятков. Это различные спецэффекты, переходы и прочие способы изменения аудио- и видеоматериала.
Алгоритм простой:
- Добавляем фильтры из списка слева:
Список фильтров в отдельном текстовом файле для справки. Официальная документация по фильтрам.
- Щёлкаем по фильтрам в редакторе узлов, чтобы изменить параметры.
- Нажимаем Render Preview. Результат отображается в браузере.
Конечно, в интерфейс можно загрузить свой файл и редактировать его. Жестокое видео по умолчанию опубликовано чисто ради хайпа.
Чтобы редактировать схему внизу, следует отжать кнопку Lock Layout — тогда элементы начинают перемещаться по полю, а связи между ними можно изменять вручную. Там можно менять порядок применения фильтров и проч.
Автор предупреждает, что это пока эксперимент, приложение работает нестабильно, часто падает (тогда его нужно перегрузить), а запуск на мобильных устройствах не гарантирован. О багах просьба сообщать в репозитории на Github.
▍ FFMPEG UI
FFMPEG UI — это вообще не веб-приложение, а нативная программа, которая выпускается в версиях под macOS, Windows и Linux. Разработчик ориентировался на максимальную простоту использования и понятный интерфейс.
Просто открываем файл, указываем настройки видео для конвертации:
Также настройки звука:
И ждём обработки результата:
В общем, это не столько редактор, сколько простой конвертер на базе FFmpeg, если нужно переконвертировать файл в другой формат. Что ж, такие инструменты тоже нужны.
Хотя с технической точки зрения здесь нет ничего интересного. Бинарник FFmpeg просто упакован в Electron, исходный код закрыт.
По функциональности эта графическая оболочка значительно уступает Staxrip и другим видеоредакторам на базе FFmpeg, перечисленным ниже. Что тут говорить, даже старый добрый Handbrake кажется поудобнее.
▍ ffmpeg-online
Веб-приложение ffmpeg-online основано не на оригинальном FFmpeg, а на приложении ffmpeg.wasm, форке WebAssembly/JavaScript оригинального проекта. Смысл в том, что функции FFmpeg должны нативно поддерживаться в браузере. Это уже совершенно новый уровень.
С точки зрения практического использования эта «графическая оболочка» не слишком отличается от обычной консоли. Например, если в консольном FFmpeg мы хотим вырезать и сохранить кусочек видео, то пишем что-то вроде такого:
ffmpeg -i test.mp4 -ss 00:00:00 -t 00:00:05 -vcodec copy -acodec copy output.mp4
В веб-приложении это выглядит примерно так же:
То есть это приложение не облегчает работу с FFmpeg, здесь другая задача. Это эксперимент по нативной поддержке форка на WebAssembly и JavaScript.
Репозиторий проекта на Github.
Это уже как минимум вторая попытка порта на Wasm, ранее это сделали для проекта Wasmer (с поддержкой всех кодеков и многопоточности, видео):
▍ VapourSynth и др.
VapourSynth не является именно «графической» оболочкой. Это видеоредактор на Python, который задействует FFmpeg и предоставляет более удобный интерфейс для редактирования видео, чем нативная консоль. Его можно назвать «Python-оболочкой для FFmpeg». Есть обширный каталог плагинов для VapourSynth, который значительно расширяет функциональность «базового» FFmpeg.
Существуют и нишевые видеоредакторы на базе FFmpeg, такие как LosslessCut для быстрых операций аудио- и видеоредактирования, такие как склеивание фрагментов, разделение на части или вырезание кусков. Ключевая особенность — отсутствие перекодирования. Поэтому операции происходят практически мгновенно и без потери качества, по контрасту с длительным перекодированием в традиционных видеоредакторах.
LosslessCut
Стоит упоминания мощный видеоредактор Staxrip — вот уж где точно полноценный интерфейс для FFmpeg.
Staxrip
FFmpeg работает под капотом опенсорсных видеоредакторов Shotcut, KDEnlive и других. Все они являются в каком-то смысле «графическими оболочками» для базового движка.
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-канале ????
Комментарии (63)
iig
11.12.2023 09:19Одна команда в консоли заменяет десять минут редактирования в Premiere Pro!
Одна команда в консоли заменяет нажатие кнопки Run (или как там она называется) в этом самом Premiere Pro. Остальные 10 минут пойдут на подбор волшебных цифр в параметрах фильтров ;)
на CPU, память и GPU не ложится лишнее бремя графической оболочки, так что любые процессы быстрее выполняются в консоли.
Если комп с трудом тянет графическую оболочку - боюсь что с редактированием видео будут большие проблемы ;)
radioxoma
11.12.2023 09:19Зато можно сочинить команду которая будет конкатенировать видео и фигачить таймлапсы прямо с памяти подключенного видеорегистратора.
voldemar_d
11.12.2023 09:19Одно дело, когда нужно что-то с видео сделать один раз. А если надо несколько десятков раз единообразно обработать кучу разных роликов, то скрипт в консоли нужно будет делать 10 минут только для первого ролика. Adobe Premiere Pro умеет 100 роликов нажатием одной кнопки обработать по одному сценарию?
Примерно как тут, например: наложить один и тот же логотип, одинаково обрезать кадр, изменить разрешение и сжать в какой-то выходной формат.
iig
11.12.2023 09:19В обратную сторону это выглядит так:
Одно дело, когда нужно несколько десятков раз единообразно обработать кучу разных роликов. А если надо что-то с видео сделать один раз?
;)
VADemon
11.12.2023 09:19У ffmpeg нечеловеческий синтаксис и нечеловеческая документация. Поэтому мне очень нравится идея очеловечивания в виде первой задумки для более простой подборки параметров (ffmpeg explorer).
voldemar_d
11.12.2023 09:19Можно загуглить что-нибудь вроде "как с помощью ffmpeg обрезать mp4 без пересжатия". Выдаст готовые примеры использования.
TooBigBigs
11.12.2023 09:19Кто-нибудь знает, можно ли с помощью FFmpeg удобно автоматизировать перекодирование видео на базе WatchFolder , примерно как это сделано в Adobe Media Encoder?
Суть такая: создаем N папок с говорящими названиями, например "h265,1080p,7mbps" , для каждой папки настраиваем пресет кодирования. Программа следит за наличием файлов внутри каждой папки, при появлении файла (или можно и по человеческому клику мышкой) автоматически кодирует видео с тем пресетом, который привязан к папке. Выходные файлы кладёт в поддиректорию /out , к примеру.
Daddy_Cool
11.12.2023 09:19Ого! Спасибо автору за статью!
Пробовали мы этот ffmpeg, пытался настроить граббинг видео. То одно работает, то другое, а чтоб вместе... Вопли страждущих по всему инету... В результате плюнул, нашел другую программу и всё сделал.
Теперь можно будет попробовать оболочки.TerekhinSergey
11.12.2023 09:19Что, если не секрет, вы нашли в качестве альтернативы? Без сарказма, просто на ум приходит крайне малое количество альтернатив вроде vlc и gstreamer
Daddy_Cool
11.12.2023 09:19Вот это.
https://ocam-screen-recorder.ru/
Ну там надо было чтоб плеер не понял, что его грабят, для этого пришлось сделать пару па с бубном.AHOHNMYC
11.12.2023 09:19Вы не поверите, но у ней внутре
неонкатоже FFmpeg. Ну и майнеры впридачу.license_english.rtf
[Supplementary Provisions]
oCam is running as a sponsored program.
Sponsored program BRTSvc, ANTSvc is a cryptocurrency miner and is a sponsor program that utilizes system resources only when the PC is idle to minimize user inconvenience.
If the user is not comfortable with the sponsor program, delete BRTSvc, ANTSvc from Add / Remove Programs in the Windows Control Panel.Daddy_Cool
11.12.2023 09:19Что внутри FFmpeg - вполне логично. А что майнер... Ну... успехов им что-нибудь намайнить на 2600К с видеокартой-затычкой. Но конечно да - о майнере в лицензионном соглашении... изящно.)))
DMC
11.12.2023 09:19Можно еще и FFmpeg Batch AV Converter добавить в копилку. Очень приятная софтина.
aik
11.12.2023 09:19Считается, что работа в консоли эффективнее GUI по нескольким причинам.
Считается, что выбор интерфейса зависит от задач. Если мне надо перекодировать сотни файлов с одинаковыми параметрами, то я не буду жать кнопочки мышкой.
Но если мне надо отредактировать видеофайл и при этом видеть, что я делаю, я не буду гонять в консоли команду и потом смотреть на результаты "мало... мало.. много...". Я в видеоредакторе предпочту подрезать, добавить переходы и т.п. а потом нажать кнопку рендера.
Одна команда в консоли заменяет десять минут редактирования в Premiere Pro!
Только вы эту команду будете придумывать методом проб и ошибок, не видя результата. Принцип "лучше день потерять, а потом за пять минут долететь" работает только тогда, когда вам регулярно летать надо. Если это одноразово, то лучше дойти пешком за часик, а не подбирать весь день параметры для командной строки.
Что, впрочем, и доказывают инструменты из вашей статьи.
FFmpeg Explorer мне чем-то напомнил AviSynth, где тоже цепочку фильтров составлять надо было.
unclegluk
11.12.2023 09:19Плюс в GUI есть много хоткеев которые работают быстрее набора команд в консоли. И часто их можно настроить на свои действия. Сегодя в Индизайне буклет дорабатывал, мышкой пользовался примерно 10-15 % времени.
voldemar_d
11.12.2023 09:19AVISynth - очень мощный инструмент. Но у него есть свои ограничения и недостатки по сравнению с ffmpeg.
aik
11.12.2023 09:19Просто по интерфейсу и тому, что поток фильтров выставляется.
Так-то это совсем разные программы, хотя и могут делать какие-то идентичные вещи.
voldemar_d
11.12.2023 09:19FFMPEG - самостоятельный инструмент. AVISynth - источник, который еще в другой программе открывать нужно (например, VirtualDub).
Roffild
11.12.2023 09:19OBS (Open Broadcaster Software) для захвата + Blender в режиме Video editing.
Оба используют части FFmpeg.
SubVision
11.12.2023 09:19Лучшее гуи для ffmpeg это ChatGPT. Скармливаешь ему информацию о исходных файлах, спросив у него же как ее получить. Говоришь что хочешь сделать и всё.
aik
11.12.2023 09:19Насколько я успел понять, выбить из чатгпт то, что именно тебе нужно - это отдельное искусство, с кучей уточнений и ограничений. Ну, если ваш вопрос чуть сложнее, чем "мне надо отрезать три секунды от файла".
Roffild
11.12.2023 09:19MeGUI - обертка для FFmpeg, AviSynth, MKVToolNix.
MeGUI рекомендовали для конвертации дорожек и устранения рассинхрона аудио. У меня ничего с ним не вышло...
voldemar_d
11.12.2023 09:19Проблема описана в духе "у меня не работает, и всё". Какое аудио, где рассинхрон, с чем? Откуда рассинхрон взялся? Причины могут быть разными, и решение проблемы тоже может быть разным.
sergeysmall
11.12.2023 09:19Можно ещё упомянуть Shutter Encoder - незаменимая вещь при подготовке материала к видеомонтажу, когда видео предоставляют в экзотических кодеках.
inoyakaigor
11.12.2023 09:19Считается, что работа в консоли эффективнее GUI
Кем?
voldemar_d
11.12.2023 09:19Кем угодно, но зависит от задачи. Например, если надо одинаковым образом сотню видеофайлов обработать, это куда быстрее сделать скриптом, чем по одному каждый открывать в GUI, настраивать для каждого обработку и рендерить выходной файл.
Neusser
11.12.2023 09:19Зачем открывать по одному, когда можно всю сотню закинуть в очередь и настроить в гуи параметры.
voldemar_d
11.12.2023 09:19Я просто не в курсе, позволяет ли Adobe Premiere делать batch processing - например, указать папку с исходными файлами, выбрать цепочку обработки, затем указать выходную папку и нажать кнопку "Обработать всё"?
sergeysmall
11.12.2023 09:19Adobe Premiere в принципе не предназначен для таких вещей. Это программа для монтажа. Для кодирования служит Adobe Media Encoder. Но он позволяет только настроить watch folder, при попадании файла в которую запускается перекодировка в настроенный формат.
voldemar_d
11.12.2023 09:19Человек выше пишет: " всю сотню закинуть в очередь и настроить в гуи параметры". Речь про Media Encoder?
Angry_Vedmed
11.12.2023 09:19Мной.
Если задачка разовая, то, разумеется, эффективнее в ГУЙ потыкать. А вот если потоооок...
Было год назад: жена попросила коллекцию из почти трёх сотен ютубов к одному "знаменателю" привести, чтобы на стареньком плеере посмотреть (не спрашивайте ;) )
После второго-третьего тыканья мышом в ГУЙ я сказал "нахрен!" и сговнякал баш, который по очереди перебирает ролики и те, что требуют переконвертации (размер, аудио кодек, иногда - видео кодек), переворачивал ffmpeg-ом в нужное состояние.
Запустил за ужином, утром проверил - всё ОК
Javian
11.12.2023 09:19Virtualdub FFMpeg Input Plugin можно считать тоже GUI :)
voldemar_d
11.12.2023 09:19Такой подход позволяет видео без перекодирования обрабатывать? Например, обрезать кусок MP4-файла без пересжатия видео?
angos1206
11.12.2023 09:19Разработчики программ выкатывают сильный инструмент, но чтобы освоить его могущество надо проштудировать 1000 страниц. Дружественный интерфейс заканчивается интуицией фронтендера. Эту прослойку надо делать с помощью ИИ.
voldemar_d
11.12.2023 09:19Просто И пользователя уже не годится? Может, просто слово "лень" мешает? :-)
Любой GUI делается так, чтобы с его помощью определенный набор задач было удобно решать. Даже если внутри нет никакого FFMPEG.
yri066
11.12.2023 09:19Считается, что работа в консоли эффективнее GUI по нескольким причинам. Во-первых, там быстрее набирать команды, чем двигать курсором.
Набрать команду для кого нибудь может быть и быстрее чем сдвинуть курсор, но я отношусь к тому типу пользователей, для которых нужно потратить уйму времени на поиск это команды в Google, чем сдвинуть курсор.
imm
11.12.2023 09:19Консольно точно быстрее, если надо сконвертировать пачку файлов.
Во всех других случаях GUI выигрывает удобством и наглядностью.voldemar_d
11.12.2023 09:19Не всегда. Например, если для настройки всех параметров в GUI надо открыть/отредактировать/закрыть пару десятков окон, чтобы задать все параметры, а в скрипте - написать несколько строчек.
iig
11.12.2023 09:19Это если вы эти 10 строчек наизусть помните. Выкапывать каждый параметр из мана на 1000 страниц так себе быстрое решение.
voldemar_d
11.12.2023 09:19Не помню. Но если в поиске гугла набрать "как в FFMPEG отрезать mp4 без перекодирования" (например) - выдаст готовый рецепт. Не так всё это и сложно.
INSTE
Есть еще handbrake, который под капотом тоже ffmpeg по сути использует
sabirovrinat85
читая заголовок, сразу подумал, что конечно будет список, в котором победит handbrake, но статья с одной стороны приятно удивила вещами, о которых не знал, но внезапно ничего не написала про самый известный GUI на ffmpeg :)
CaptGg
Потому, что HandBrake не является GUI для FFmpeg, о чем его разработчики прямо заявляют. Он использует те же компоненты, что FFmpeg, но не его самого.
Это самобытный продукт с крайне скудным по сравнению с FFmpeg функционалом. HandBrake не умеет копировать потоки без перекодировки, добавлять сторонние дорожки, работать с нечётным разрешением, даже открыть такой файл не может. Поддерживает очень мало выходных форматов.
Neusser
Аудиопоток копировать умеет. А если вам нужно копировать видеопоток, то зачем тогда вообще handbrake?
CaptGg
Чтобы не терять в качестве видео без причины, когда нужно перекодировать только звук, например из mp3 в aac. Или сменить контейнер, например с MP4 на MPEG-TS. В работе с видео для web это очень частые задачи, а HandBrake в них бесполезен.
Neusser
Так handbrake это инструмент для конвертирования видео. И как раз для описаных задач он да, бесполезен, потому что создан не для них.
CaptGg
Нет, HandBrake - это инструмент для сжатия видео. Он не умеет не сжимать. А смена контейнера или кодирование звуковой дорожки - это тоже конвертация, на которую он уже не способен. В отличие от любого настоящего конвертера использующего FFmpeg.
voldemar_d
Не сжимать, если это можно, хорошо даже не только потому, что при этом не теряется качество. Просто скопировать несколько (десятков) гигабайт какого-нибудь H.265 в разрешении 4К будет на порядки быстрее, чем их перекодировать, даже без визуальной потери качества.
Neusser
Pоtayto, potahto. Я вам именно это и написал.
Neusser
Почему он должен победить? Он даже не может нормально конвертировать вертикальное видео. Или обрежет, или растянет в ширину.
INSTE
Скажу от себя так: тот, кто снимает вертикальные видео, должен страдать :) Я бы даже не стал это как баг в трекере заводить, сразу бы разворачивал :)
karabas_b
Тот, кто снимает вертикальные видео, и тот, кто их обрабатывает, вовсе не обязательно один и тот же человек.
husee
А как же шортсы, рилсы, видео в тик ток? Сейчас это самое популярное направление, какое только есть. Если редактор не умеет работать с вертикальными видео, то это прям большое упущение
Neusser
Очень рад услышать ваше мнение о вертикальных видео. Теперь можете засунуть его обратно в свой вертикальный слот.
INSTE
Спасибо, однако тем, кому не нужно выкладывать вертикальные тиктоки, handbrake отлично подходит - т.е. все нормально.