Пожалуйста, опишите ошибку

Нашли баг? Помогите нам его исправить, заполнив эту форму

Установка и знакомство с FFmpeg и его враппером для Java

Марк Левковский
Android-разработчик

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

От себя скажу, что это мощный кроссплатформенный инструмент для работы с аудио и видеофайлами, который выручил меня, казалось бы, от невыполнимых задач, которые стояли у меня в проекте. Я расскажу о своем опыте работы с ним на примере проекта, который был написан на Java.

Что представляет собой FFmpeg? На официальном сайте (ffmpeg.org) можно скачать его в виде исполняемых файлов для трех платформ – Linux, Windows и OSX.

Работа с этим файлом осуществляется через терминал (командную строку), независимо от целевой платформы. Любая команда начинается с “ffmpeg”. Чтобы удостоверится, что все работает, можно проверить его, написав данную команду из той директории, где находится файл ffmpeg.exe (для Windows). Так мы увидим его версию и все медиа библиотеки, которые он содержит.

Так как я собирался использовать его в своем приложении (и к тому же я не любитель терминалов, считаю их архаизмом), то начал поиски более приятного и человеческого взаимоотношения с FFmpeg. И наткнулся на приятную оболочку для Java – github.com/bramp/ffmpeg-cli-wrapper.

Скачиваем библиотеку и подключаем в проект удобным вам способом. Я подключил через jar файл. Так же, замечу, что сам враппер требует сторонние библиотеки, без которых он не будет работать.

Вот конечный список библиотек, которые должны быть в вашем проекте.

Кидаем ffmpeg.exe в корневую папку нашего проекта, подключаем через враппер и проверяем что все работает, выведя в консоль версию ffmpeg.

Если все так, как на скриншоте, то установка FFMPEG и его подключение через враппер прошли правильно, и мы можем с ним работать дальше.

Рассмотрим основные возможности ffmpeg.

Основная функция ffmpeg – это конвертация файлов из одного медиа формата в другой (видео в аудио/видео или аудио в аудио/видео).

Для теста создадим директорию “C:/test” и положим туда mp4 файл.

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

Запускаем и проверяем. У нас должен получиться mp3 файл с соответствующей аудио дорожкой которая была в изначальном mp4 видео файле.

Еще одной интересной особенностью является возможность указания в качестве входного файла изображения или нескольких изображений. К примеру, для добавления водяного знака на видео. Для этого мы добавляем изображение как еще один входной файл и указываем параметр -filter_complex с параметром “overlay=5:5”. Это значит что наше изображение будет поверх видео в с отступом 5 пикселей от верхнего левого угла.

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

Рассмотрим прошлую конвертацию


C:\Users\Mark\IdeaProjects\FFMPEG\src\ffmpeg -y -v error -i C:/test/input.mp4 -i C:/test/image.png -filter_complex overlay=5:5 C:/test/output.mp4

C:\Users\Mark\IdeaProjects\FFMPEG\src\ffmpeg – путь к ffmpeg.

-y указывает на то, что файл на выходе будет перезаписывать существующий.

-v error указывает, что будут выводиться в лог все ошибки, которые могут появиться.

-i C:/test/input.mp4 первый входной файл

-i C:/test/image.png второй входной файл

-filter_complex overlay=5:5 фильтр для второго входного файла

C:/test/output.mp4 и в конце всегда указывается путь файла на выходе.

Это лишь малый список существующих команд, и враппер не все их использует. Полный перечень можно посмотреть в документации к ffmpeg на официальном сайте. Если вам требуется какая-то команда, которая не поддерживается враппером, то имеется возможность добавить её вручную через функцию в билдере враппера – .addExtraArgs()

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

Я не стал расписывать все возможности ffmpeg и враппера, так как это заняло бы не один десяток страниц, а указал на основные их функции. Для детальной информации обращайтесь к FFMPEG documentation и FFMPEG wrapper.

Читать и комментировать