1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/anjoiner-FFmpegCommand

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Для пользователей FFmpegCommand:

Прежде всего, благодарим всех за поддержку этой библиотеки. Спасибо за то, что используете её, благодаря вам у нас есть мотивация продолжать разработку с открытым исходным кодом. Благодарим за ваши вопросы и предложения, которые делают эту библиотеку более совершенной.

Асинхронная обработка и многопоточное выполнение были предусмотрены до версии 1.2.0, но многие люди сообщали, что асинхронное и многопоточное исполнение не очень полезно, поэтому после тщательного рассмотрения в версии 1.2.0 и последующих версиях будут внесены следующие изменения:

  • Методы runCmdAsync и runCmdSync будут удалены и заменены на метод runCmd для выполнения команды FFmpeg.
  • Многокомандные методы runMoreAsync и runMoreSync будут удалены, метод runCmd внутренне реализует автоматическую синхронизацию и последовательное выполнение.
  • Добавлена подсказка журнала ошибок, используйте ffmpeg-cmd для фильтрации журнала ошибок при возникновении ошибки.

Мы приносим извинения за неудобства, вызванные этим изменением.

【README-中文】

Summary

В нашей разработке часто используется аудио- и видеоконтент, обычно мы выбираем FFmpeg, но его кросс-компиляция является для нас очень хлопотным делом. Поэтому здесь для удобства будущего использования я написал FFmpegCommand, который состоит из основной библиотеки FFmpeg и интегрирует основные программы обработки аудио и видео для Android, такие как lame, libx264, fdk-aac и libopencore-amr. Примечание: текущая библиотека доступна только для Android.

Если вы не можете получить доступ ко всей информации, перейдите по ссылке 【国内镜像】.

Cross Compile

The main function

License FFmpeg X264 | Специальная функция | Поддержка | Описание | |-----------------------|----------|------------------------------------------------------------------------------| | Команды ffmpeg | :white_check_mark: | Поддерживаются все команды FFmpeg | | Обратный вызов прогресса | :white_check_mark: | Поддерживается обратный вызов команд ffmpeg | | Отмена команд | :white_check_mark: | Поддерживается отмена выполняемых команд | | Модель отладки | :white_check_mark: | Поддерживается модель отладки для разработки | | Получение информации о медиа | :white_check_mark: | Поддерживается получение информации о медиа | | Рисование текста (drawtext) | :white_check_mark: | Поддерживается рисование текста на видео (водяные знаки — с версии 1.3.2) | | Добавление субтитров (subtitles) | :white_check_mark: | Поддерживается добавление субтитров к видео (поддержка форматов srt, ass — с версии 1.3.2)| | Кодек MediaCodec Android GPU | :white_check_mark: | Поддерживается MediaCodec для Android GPU (с версии 1.3.0) | | Архитектура Android | :white_check_mark: | Поддерживаются armeabi-v7a и arm64-v8a | | Один SO | :white_check_mark: | Несколько файлов SO объединяются в один ffmpeg-or.so |

Общие функции:

  • Поддерживаются все команды FFmpeg.
  • Поддерживается преобразование видеоформатов: mp4->flv.
  • Поддерживаемые аудиокодеки: mp3->pcm, pcm->mp3, pcm->aac.
  • Поддерживаемое перекодировка аудио: mp3->aac, mp3->amr.
  • Поддерживаемый видеокодек: mp4->yuv, yuv->h264.
  • Поддерживаемая перекодировка видео: mp4->flv, mp4->avi.
  • Поддерживается обрезка и склейка аудио и видео.
  • Видео в изображение: mp4->png, mp4->gif.
  • Управление размером звука и микширование (например, чтение звука плюс фоновая музыка).
  • Некоторые фильтры, затухание звука, эффекты затухания, яркость и контрастность видео, добавление водяных знаков.
  • Генерация беззвучного аудио.
Запуск FFmpeg Получение информации о медиа
Рисунок 1: демонстрация командной строки Рисунок 2: выполнение командной строки

Введение

Найдите файл build.gradle в корневом каталоге проекта и добавьте следующее:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

Затем добавьте импорт в build.gradle в каталоге app или другом модуле.

Выберите только одно из следующих двух представлений и замените следующее в соответствии с последней версией ${latestVersion}, текущая последняя версия :

// Все кодеки — больший размер
implementation 'com.github.AnJoiner:FFmpegCommand:1.3.2'
// Некоторые часто используемые кодеки — меньший размер, примерно на 6 М меньше, чем приведённое выше представление
implementation 'com.github.AnJoiner:FFmpegCommand:1.3.2-lite'

Измените build.gradle под модулем, текущая библиотека поддерживает только armeabi-v7a и arm64-v8a, конечно, вы можете использовать только один (обычно используется armeabi-v7a для обратной совместимости). Вы можете обратиться к 【Android ABI】. armeabi-v7a,'arm64-v8a'

moduleName "app" } }


**If there is no special codec requirement, it is strongly recommended to use `lite` tag**

## Use

### FFmpegCommand Method
|Method |Function |
|:---|----|
|FFmpegCommand->setDebug(debug: Boolean)|Режим отладки, печатный журнал|
|FFmpegCommand->runCmd(cmd: Array<String?>)|Выполнение команды ffmpeg без обратного вызова|
|FFmpegCommand->runCmd(cmd: Array<String?> callBack: IFFmpegCallBack?)|Выполнение команды ffmpeg и обратный вызов начала, завершения, отмены, прогресса, ошибки|
|FFmpegCommand->getMediaInfo(path: String?, @MediaAttribute type: Int)|Получение информации о медиа: ширина и высота видео, битрейт...|
|FFmpegCommand->getSupportFormat(@FormatAttribute formatType: Int)|Получить форматы инкапсуляции и декапсуляции, поддерживаемые текущей библиотекой|
|FFmpegCommand->getSupportCodec(@CodecAttribute codecType: Int)| Получить кодек, поддерживаемый текущей библиотекой |
|FFmpgCommand->cancel()|Завершение выполнения команды ffmpeg|

### runCmd
Используйте runCmd для синхронного вызова FFmpeg. Необходимо добавить внешние потоки, иначе приложение перестанет отвечать на запросы.

Прямой вызов метода FFmpegCommand.runCmd (cmd: Array <String?> CallBack: IFFmpegCallBack?), первый параметр предоставляется классом инструмента FFmpegUtils или вы можете добавить его самостоятельно.

**Не поддерживает асинхронное выполнение команд FFmpeg, в конце концов, C — это процессно-ориентированный язык, и возникнут проблемы с использованием ресурсов.**

```kotlin
GlobalScope.launch {
    FFmpegCommand.runCmd(FFmpegUtils.transformAudio(audioPath, targetPath), callback("транскодирование завершено", targetPath))
}

Второй параметр — метод обратного вызова.

open class CommonCallBack : IFFmpegCallBack {
    // Start callback
    override fun onStart() {}
    // Progress callback
    override fun onProgress(progress: Int, pts: Long) {}
    // Cancel callback
    override fun onCancel() {}
    // Complete callback
    override fun onComplete() {}
    // Error callback
    override fun onError(errorCode: Int, errorMsg: String?) {}
}

Следует отметить, что в методе onProgress можно увидеть, что обратный вызов возвращает 2 значения:

  • progress: прогресс, рассчитанный по первому входному файлу (то есть входному файлу после первого -i), и он может быть неправильным при наличии нескольких входных файлов.
  • pts: прошедшее время, прогресс отображается неправильно при использовании текущего значения для расчёта, метод расчёта следующий.
var duration :Int? = FFmpegCommand.getMediaInfo(mAudioPath,MediaAttribute.DURATION)
var progress = pts/duration!!

Пользовательская команда FFmpeg

Это просто демонстрация обрезки звука, многие функции, подобные описанным выше, см. сами FFmpegUtils. Если требования не выполняются, вы можете добавить свою собственную команду FFmpeg, ниже приведён пример настройки преобразования с помощью MediaCodec:

// shell command: ffmpeg -y -c:v h264_mediacodec -i inputPath -c:v h264_mediacodec outputPath
val command = CommandParams()
    .append("-c:v") // decode
    .append("h264_mediacodec")
    .append("-i")
    .append(inputPath)
    .append("-b") // bitrate
    .append("1500k")
    .append("-c:v") // encode
    .append("h264_mediacodec")
    .append(outputPath)
    .get()

MainScope().launch(Dispatchers.IO) {
    FFmpegCommand.runCmd(command, callback("Преобразование формата успешно", targetPath))
}

требует внимания:

  • При использовании кодирования MediaCodec необходимо одновременно настроить декодирование MediaCodec, как показано в примере выше, иначе это приведёт к сбою! ! !
  • Кодек H264 — h264_mediacodec, а кодек H265 — hevc_mediacodec. Можно использовать одновременное декодирование H264 и кодирование H265.
  • Жёсткое кодирование обычно требует установки битрейта видео, иначе изображение будет размытым и неясным.
  • Лучше всего использовать CommandParams для построения параметров нашей команды. Это гарантирует, что параметры не будут затронуты пробелами в пути.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

FFmpegCommand — это библиотека команд FFmpeg для Android, которая позволяет обрабатывать аудио- и видеофайлы. Она обеспечивает быструю обработку аудио и видео и включает в себя следующие функции: * обрезка аудио и видео; * перекодировка аудио и видео; * декодирование аудио и видео в исходные данные; * кодирование аудио и видео; * преобразован... Развернуть Свернуть
Apache-2.0
Отмена

Обновления (4)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/anjoiner-FFmpegCommand.git
git@api.gitlife.ru:oschina-mirror/anjoiner-FFmpegCommand.git
oschina-mirror
anjoiner-FFmpegCommand
anjoiner-FFmpegCommand
master