Android ffmpeg 命令未执行
Android ffmpeg Command not executing
我正在使用 this FFMPEG 库,
首先我在 videoView 中播放视频以确保视频路径正确
videoView.setVideoURI(Uri.parse(getExternalFilesDir(null)?.absolutePath + "videoToBeEdit"))
然后我调用下面编写的代码来裁剪视频,然后再次将其放入 videoView 以查看结果
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
请帮忙,提前谢谢你...
好吧经过一番挖掘后发现我应该为 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)
我正在使用 this FFMPEG 库,
首先我在 videoView 中播放视频以确保视频路径正确
videoView.setVideoURI(Uri.parse(getExternalFilesDir(null)?.absolutePath + "videoToBeEdit"))
然后我调用下面编写的代码来裁剪视频,然后再次将其放入 videoView 以查看结果
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 请帮忙,提前谢谢你...
好吧经过一番挖掘后发现我应该为 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)