@newbee322

Как установить FFmpeg в android studio?

Я новичок в программировании, пишу приложение в котором должны конвертироваться wav и ogg в mp3 файлы, а так же была возможность склеивать mp3 файлы в один файл, знал что есть хороший инструмент для таких вещей - FFmpeg,
но не знал что будет так сложно с его установкой.

Я полазил по разным источникам ("stack overflow", гитхаб , официальный сайт ffmpeg )
нашел информацию что нужно добавлять зависимость в build.gradle(:app)
"""
dependencies {

implementation 'com.writingminds:FFmpegAndroid:0.3.2'
"""
так же добавлял такие строки в этот файл
"""
repositories {
flatDir {
dirs 'assets'
}
}
инициализировал этот класс в своей активности
val ffmpeg = FFmpeg.getInstance()
что добавило импорт автоматически
import com.github.hiteshsondhi88.ffmpeg

после чего я начал пытаться использовать эту библиотеку и наткнулся на то, что нужно какой-то бинарный файл установить в проект, пошел гуглить про него подробнее, нашел эти бинарные файлы на том же гитхабе вот тут
создал в проекте папку - app/src/main/assets в которую закинул папки с названиями архитектур, которые содержат эти бинарные файлы, в коде сделал проверку на используемую устройством архитектуру чтобы подгружать тот бинарный файл который нужен(x86 или armeabi-v7a), задавал этому файлу права на всякий случай

val processBuilder = ProcessBuilder("chmod 755 ${file.absolutePath}") // "/data/user/0/com.example.мой_проект/files/ffmpeg"
val process = processBuilder.start()

после чего в Device File Explorer было видно что права изменились, но при выполнении кода, обработчик ошибок самого FFmpeg кидал в логи сообщение о том, что файл, на который он указывает(/data/user/0/com.example.мой_проект/files/ffmpeg), не может быть запущен из-за "error=13 permission denied".

Если кто-то сталкивался с установкой FFmpeg и успешно это делал - буду очень признателен если опишите где я ошибся и как делать правильно.

P.S. думаю много таких новичков как я не могут справиться с подобными проблемами, так что надеюсь существует ответ на мой вопрос, который поможет многим, пока я такого не нашел
либо он есть, но моя квалификация не позволяет его понять))
  • Вопрос задан
  • 509 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Adambl4
Используй https://github.com/arthenica/ffmpeg-kit
Достаточно одной строчки чтобы подключить
implementation 'com.arthenica:ffmpeg-kit-full:5.1'
Ответ написан
@newbee322 Автор вопроса
пример кода для объединения 2х mp3 файлов который у меня работает
val inputMp31 = File(fileAdapter.selectedFilesList[0].file!!.absolutePath)
    val inputMp32 = File(fileAdapter.selectedFilesList[1].file!!.absolutePath)
    val outputMp3 = File("/data/user/0/путь/к/файлу/merged.mp3")
    mergeMP3Files(outputMp3, inputMp31, inputMp32)

    fun mergeMP3Files(outputFile: File, vararg inputFiles: File) {
        // Создаем список аргументов для запуска FFmpeg
        val arguments = mutableListOf<String>()

        // Добавляем аргументы для конкатенации файлов
        for (i in inputFiles.indices) {
            arguments.add("-i")
            arguments.add(inputFiles[i].absolutePath)
        }

        // Добавляем аргументы для формата выходного файла и пути к нему
        arguments.add("-filter_complex")
        arguments.add("concat=n=${inputFiles.size}:v=0:a=1[out]")
        arguments.add("-map")
        arguments.add("[out]")
        arguments.add(outputFile.absolutePath)
        try {
            val returnCode = FFmpegKit.execute(arguments.joinToString(" "))
            Log.d("FFmpeg merge", returnCode.toString())

        }catch (e: Exception) {
            Log.e("FFmpeg merge", "failure $e")
        }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы