Команда Android ffmpeg не выполняется

Я использую эту библиотеку FFMPEG,

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

videoView.setVideoURI(Uri.parse(getExternalFilesDir(null)?.absolutePath + "videoToBeEdit"))

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

val ff = FFmpeg.getInstance(this@EditVideoActivity)
if (ff.isSupported){

  val inFile = File(getExternalFilesDir(null)?.absolutePath ,"videoToBeEdit")
  val outFile = File(getExternalFilesDir(null)?.absolutePath , "result")

  val command = arrayOf("ffmpeg","-i", inFile.absolutePath , "-filter:v", "crop=100:100:0:0", outFile.absolutePath)

  ff.execute(command, object : ExecuteBinaryResponseHandler() {
    override fun onSuccess(message: String?) {
      super.onSuccess(message)
      videoView.setVideoURI(Uri.parse(getExternalFilesDir(null)?.absolutePath + "videoToBeEdit"))
    }

    override fun onProgress(message: String?) {
      super.onProgress(message)
    }

    override fun onFailure(message: String?) {
      super.onFailure(message)
      Log.e("error", "failed")
    }

    override fun onStart() {
      super.onStart()
      Log.e("start", "started the process")
    }

    override fun onFinish() {
      super.onFinish()
      Log.e("finish", "done")
    }
  })
}

но мой код выше идет от начала до ошибки, а затем заканчивается, он не показывает никаких сообщений об ошибках, и из-за этого очень трудно понять, что на самом деле не так :( Я пытался написать свою команду по-разному, следуя этим руководствам tutorial1 tutorial2 link помогите пожалуйста, заранее спасибо...


person MoTahir    schedule 21.06.2020    source источник
comment
Выполняется ли ffmpeg? Добавьте параметр -report в команду ffmpeg. Найдите файл журнала. Если файла журнала нет, значит, ffmpeg не выполнялся, и проблема в другом.   -  person llogan    schedule 22.06.2020
comment
Я исправил проблему, проверьте мой ответ   -  person MoTahir    schedule 22.06.2020


Ответы (1)


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

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

val inFile = File(getExternalFilesDir(null)?.absolutePath ,"videoToBeEdit.mp4")
val outFile = getExternalFilesDir(null)?.absolutePath , "result.mp4"

val command = arrayOf("ffmpeg","-i", inFile.absolutePath , "-filter:v", "crop=100:100:0:0", outfile)

Или вы можете создать файл, а затем указать FFmp3g перезаписать его, добавив

-y

к команде так

val inFile = File(getExternalFilesDir(null)?.absolutePath ,"videoToBeEdit.mp4")
val outFile = File(getExternalFilesDir(null)?.absolutePath , "result.mp4")

val command = arrayOf("ffmpeg","-i", inFile.absolutePath ,"-y","-filter:v", "crop=100:100:0:0", outFile.absolutePath)
person MoTahir    schedule 22.06.2020