- PVSM.RU - https://www.pvsm.ru -
Считается, что работа в консоли эффективнее GUI по нескольким причинам. Во-первых, там быстрее набирать команды, чем двигать курсором. Во-вторых, на CPU, память и GPU не ложится лишнее бремя графической оболочки, так что любые процессы быстрее выполняются в консоли.
Но есть люди, которые всегда предпочтут GUI [2]. Они считают графический интерфейс «наиболее эффективным и удобным способом работы на десктопе». На самом деле они во многом правы, в том числе для специфических задач видеообработки важно сразу видеть результат.
FFmpeg — изначально консольная утилита. Но её популярность крайне высока. Поэтому появляются всё новые варианты графических оболочек для FFmpeg, чтобы доступ к инструменту получили абсолютно все пользователи.
Эта консольная утилита объединяет в одном бинарнике более 300 видео/аудио/графических кодеков, декордеров, муксеров, демуксеров и фильтров для обработки/сжатия/редактирования аудио и видео. В универсальном комбайне FFmpeg есть абсолютно любые мыслимые функции, а документация [3] только к утилите не уступает Photoshop. Например, в популярной бесплатной книжке-руководстве по FFmpeg больше тысячи страниц [4]. А есть же ещё библиотеки, API, разные компоненты.
Мы уже упоминали про безграничные возможности FFmpeg [5] на конкретных примерах. В прошлый раз мы приводили пример из продвинутого мануала [6], чтобы оценить уровень крутости 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 ; [2:a]volume=1.5,aecho=0.8:0.9:100:0.3[speech] ; [0:a][speech]amix=duration=shortest,asplit[audio1][audio2]" -map '' -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 [7] — удобный инструмент для изучения, как работают различные фильтры FFmpeg, которых поддерживается несколько десятков. Это различные спецэффекты, переходы и прочие способы изменения аудио- и видеоматериала.
Алгоритм простой:
Список фильтров [8] в отдельном текстовом файле для справки. Официальная документация [9] по фильтрам.
Конечно, в интерфейс можно загрузить свой файл и редактировать его. Жестокий файл по умолчанию опубликован чисто ради хайпа.
Чтобы редактировать схему внизу, следует отжать кнопку Lock Layout — тогда элементы начинают перемещаться по полю, а связи между ними можно изменять вручную. Там можно менять порядок применения фильтров и проч.
Автор предупреждает, что это пока эксперимент, приложение работает нестабильно, часто падает (тогда его нужно перегрузить), а запуск на мобильных устройствах не гарантирован. О багах просьба сообщать в репозитории на Github [10].
FFMPEG UI [11] — это вообще не веб-приложение, а нативная программа, которая выпускается в версиях под macOS, Windows и Linux. Разработчик ориентировался на максимальную простоту использования и понятный интерфейс.
Просто открываем файл, указываем настройки видео для конвертации:
Также настройки звука:
И ждём обработки результата:
В общем, это не столько редактор, сколько простой конвертер на базе FFmpeg, если нужно перековертировать файл в другой формат. Что ж, такие инструменты тоже нужны.
Хотя с технической точки зрения здесь нет ничего интересного. Бинарник FFmpeg просто упакован в Electron, исходный код закрыт.
По функциональности эта графическая оболочка значительно уступает Staxrip [12] и другим видеоредакторам на базе FFmpeg, перечисленным ниже. Что тут говорить, даже старый добрый Handbrake [13] кажется поудобнее.
Веб-приложение ffmpeg-online [14] основано не на оригинальном FFmpeg, а на приложении ffmpeg.wasm [15], форке 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.
Репозиторий [16] проекта на Github.
Это уже как минимум вторая попытка порта на Wasm, ранее это сделали для проекта Wasmer [17] (с поддержкой всех кодеков и многопоточности, видео [18]):
VapourSynth [19] не является именно «графической» оболочкой. Это видеоредактор на Python, который задействует FFmpeg и предоставляет более удобный интерфейс для редактирования видео, чем нативная консоль. Его можно назвать «Python-оболочкой для FFmpeg». Есть обширный каталог плагинов для VapourSynth [20], который значительно расширяет функциональность «базового» FFmpeg.
Существуют и нишевые видеоредакторы на базе FFmpeg, такие как LosslessCut [21] для быстрых операций аудио- и видеоредактирования, такие как склеивание фрагментов, разделение на части или вырезание кусков. Ключевая особенность — отсутствие перекодирования. Поэтому операции происходят практически мгновенно и без потери качества, по контрасту с длительным перекодированием в традиционных видеоредакторах.
LosslessCut
Стоит упоминания мощный видеоредактор Staxrip [12] — вот уж где точно полноценный интерфейс для FFmpeg.
Staxrip
FFmpeg работает под капотом опенсорсных видеоредакторов Shotcut [22], KDEnlive [23] и других. Все они являются в каком-то смысле «графическими оболочками» для базового движка.
Shotcut
Тем временем сам FFmpeg продолжает расти и развиваться. Недавно вышла версия 6.1 [24] Heaviside.
Некоторые нововведения:
А это основные оптимизации:
Релиз назревал как минимум полгода, но из-за постоянной активности в репозитории его пришлось отложить, и только в ноябре 2023 года удалось найти момент для его выпуска, прежде чем вливать в кодовую базу некоторые крупные патчи, запланированные для 7.0.
Можно добавить, что благодаря усилиям Антона Кирнова [29] разработчики сумели очистить захламлённую кодовую базу FFmpeg до такой степени, что транскодинг заработал в многопоточном режиме [30], как и должен был работать по своей архитектуре. Когда многопоточность отладят и активируют, она заметно увеличит производительность FFmpeg на многоядерных системах, если в транскодировании не доминирует один компонент, а сами компоненты не являются многопоточными, говорит Антон.
Очистка кода заняла около двух лет и потребовала более 700 подготовительных коммитов. Выход версии 7.0 запланирован на февраль 2024-го.
Очистка кода была задачей высшего приоритета, поскольку внедрять новые функции становилось уже затруднительно. После проведённой оптимизации стал быстрее работать и сам FFmpeg, и все проекты на его основе. В том числе графические оболочки.
Автор: Анатолий Ализар
Источник [32]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/388674
Ссылки в тексте:
[1] Image: https://habr.com/ru/companies/ruvds/articles/778262/
[2] предпочтут GUI: https://prahladyeri.github.io/blog/2023/11/desktop-gui-is-most-efficient-way-of-human-pc-interaction.html
[3] документация: https://www.ffmpeg.org/documentation.html
[4] больше тысячи страниц: http://www.astro-electronic.de/FFmpeg_Book.pdf
[5] безграничные возможности FFmpeg: https://habr.com/ru/companies/ruvds/articles/718384/
[6] пример из продвинутого мануала: https://img.ly/blog/ultimate-guide-to-ffmpeg/
[7] FFmpeg Explorer: https://ffmpeg.lav.io/
[8] Список фильтров: https://raw.githubusercontent.com/antiboredom/ffmpeg-explorer/main/filternames.txt
[9] документация: https://ffmpeg.org/ffmpeg-filters.html
[10] репозитории на Github: https://github.com/antiboredom/ffmpeg-explorer
[11] FFMPEG UI: https://ybouane.com/ffmpeg-ui
[12] Staxrip: https://github.com/staxrip/staxrip
[13] Handbrake: https://handbrake.fr/
[14] ffmpeg-online: https://ffmpeg-online.vercel.app/
[15] ffmpeg.wasm: https://ffmpegwasm.netlify.app/
[16] Репозиторий: https://github.com/xiguaxigua/ffmpeg-online
[17] Wasmer: https://wasmer.io/wasmer/ffmpeg
[18] видео: https://twitter.com/wasmerio/status/1687238131395768320
[19] VapourSynth: https://www.vapoursynth.com/
[20] каталог плагинов для VapourSynth: https://vsdb.top/
[21] LosslessCut: https://github.com/mifi/lossless-cut
[22] Shotcut: https://shotcut.org/
[23] KDEnlive: https://kdenlive.org/en/
[24] 6.1: http://www.ffmpeg.org/index.html#pr6.1
[25] EVC: https://en.wikipedia.org/wiki/Essential_Video_Coding
[26] деинтерлейсинг BWDIF: https://ffmpeg.org/ffmpeg-filters.html#bwdif_005fvulkan
[27] nlmeans_vulkan: https://ffmpeg.org/ffmpeg-filters.html#nlmeans_005fvulkan
[28] apsnr: https://ffmpeg.org/ffmpeg-filters.html#apsnr
[29] усилиям Антона Кирнова: https://www.youtube.com/watch?v=Z4DS3jiZhfo&t=1221s
[30] в многопоточном режиме: https://ffmpeg.org/pipermail/ffmpeg-devel/2023-November/316552.html
[31] как минимум на двух планетах: https://www.reddit.com/r/space/comments/lpz3l7/the_mars_2020_perseverance_rover_is_using_ffmpeg/
[32] Источник: https://habr.com/ru/companies/ruvds/articles/778262/?utm_source=habrahabr&utm_medium=rss&utm_campaign=778262
Нажмите здесь для печати.