Reputation: 301
Try this command for merge two audio files, but its not working in Android 10.0(Q) while targeting sdk 29. But, this command is completely working on targeting sdk 24 to 28.
I am using this library of FFMPEG implementation 'nl.bravobit:android-ffmpeg:1.1.7'
"-y", "-i", path1, "-i", path2, "-filter_complex", "[0:0][1:0] amix=inputs=2:duration=longest", "-c:a", "libmp3lame", savedPath
my Error log:
2019-09-28 13:48:32.037 16041-16166/com.merger.cut E/FFmpeg: Exception while trying to run: [/data/user/0/com..merger.cut/files/ffmpeg, -y, -i, /storage/emulated/0/Music/song1.mp3, -i, /storage/emulated/0/Music/song2.mp3, -filter_complex, [0:0][1:0] amix=inputs=2:duration=longest, -c:a, libmp3lame, /storage/emulated/0/merger/Merge_1569658695254.mp3]
java.io.IOException: Cannot run program "/data/user/0/com.merger.cut/files/ffmpeg": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
at nl.bravobit.ffmpeg.ShellCommand.run(ShellCommand.java:15)
at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:43)
at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:12)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
at java.lang.ProcessImpl.start(ProcessImpl.java:141)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
at nl.bravobit.ffmpeg.ShellCommand.run(ShellCommand.java:15)
at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:43)
at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:12)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
2019-09-28 13:48:32.146 16041-16041/com.merger.cut E/FFMPEG :: on finish
Give me solution for above problem.
Upvotes: 11
Views: 10910
Reputation: 96
this is the current working repo for FFMPEG:
implementation 'com.arthenica:ffmpeg-kit-min:6.0.LTS'
Upvotes: 1
Reputation: 973
Try using this library minSDK 24 Works in latest SDK version com.arthenica:ffmpeg-kit-min:6.0-1
Upvotes: 0
Reputation: 261
Please use this library
implementation 'com.arthenica:mobile-ffmpeg-full-gpl:4.2.2.LTS'
It works great. If there is any doubt please let me know. Thanks
This is how i have used it
private class CompressVideo extends AsyncTask<String, String, Integer> {
String oldPath;
File newFile;
int videoLength;
CompressVideo(String oldPath, File newFile, int VideoLength) {
this.newFile = newFile;
this.oldPath = oldPath;
this.videoLength = VideoLength;
rvProgressBar.setVisibility(View.VISIBLE);
tvProgressPercentage.setVisibility(View.VISIBLE);
Config.enableStatisticsCallback(statistics -> {
runOnUiThread(() -> tvProgressPercentage.setText((statistics.getTime() * 100) / videoLength + "%"));
});
}
@Override
protected void onPreExecute() {
setClickable(rlMainLayout, false);
super.onPreExecute();
}
@Override
protected Integer doInBackground(String... strings) {
String cmd = "-y -i " + oldPath + " -c:a copy -r 30 -vcodec libx264 -crf 28 -preset ultrafast " + newFile.getPath();
int rc = FFmpeg.execute(cmd);
return rc;
}
@Override
protected void onPostExecute(Integer rc) {
setClickable(rlMainLayout, true);
if (rc == RETURN_CODE_SUCCESS) {
videoCount++;
path.add(newFile.getPath());
mediaType.add(Constants.TAG_VIDEO);
al.add(Uri.fromFile(newFile));
vehicleNewImageAdapter.notifyDataSetChanged();
rvProgressBar.setVisibility(View.GONE);
tvProgressPercentage.setVisibility(View.GONE);
} else if (rc == RETURN_CODE_CANCEL) {
rvProgressBar.setVisibility(View.GONE);
tvProgressPercentage.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), getString(R.string.oops_something_went_wrong), Toast.LENGTH_SHORT).show();
} else {
rvProgressBar.setVisibility(View.GONE);
tvProgressPercentage.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), getString(R.string.oops_something_went_wrong), Toast.LENGTH_SHORT).show();
}
super.onPostExecute(rc);
}
}
Upvotes: 0
Reputation: 841
Use this instead link
implementation 'com.arthenica:ffmpeg-kit-video:5.1.LTS'
Upvotes: 0
Reputation: 1378
Now If You Guys Looking For FFMPEG for ANDROID Q Here is link use below FFMPEG Build. Include this to your app/build.gradle
Min SDK 24
dependencies {
implementation 'com.arthenica:mobile-ffmpeg-full:4.3'
}
Min SDK 16
dependencies {
implementation 'com.arthenica:mobile-ffmpeg-full:4.2.2.LTS'
}
tested in OnePlus 7T
Android Q
Upvotes: 10
Reputation: 1316
For this library is only support maximum sdk 28 see the below link:
https://github.com/bravobit/FFmpeg-Android/blob/master/android-ffmpeg/build.gradle
So,In this library not run in SDK 29 because the targetSdkVersion 28
and compileSdkVersion 28
. If you want to change this thing, it'll work for you. I hope it will help you..!
Upvotes: 0