I want to trim the local video based on start and end time in android programmatically ,I tried below attached few links but haven't worked for me.Please let me know any working libraries or sample code to overcome this?
Refereed links:
Thanks in advance!
Use FFMPEG library to solve your problem. Thanks for writingminds to make ffmpeg simple for android
1. implementation 'com.writingminds:FFmpegAndroid:0.3.2'
initialize ffmpeg
private void setUpFFmpeg() {
ffmpeg = FFmpeg.getInstance(context);
try {
ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
@Override
public void onStart() {
Log.d("Event ", "onStart");
}
@Override
public void onFailure() {
Log.d("Event ", "onFailure");
}
@Override
public void onSuccess() {
Log.d("Event ", "onSuccess");
}
@Override
public void onFinish() {
Log.d("Event ", "onFinish");
}
});
} catch (FFmpegNotSupportedException e) {
// Handle if FFmpeg is not supported by device
}
}
use FFMPEG command like @Mahesh Keshvala posted above. Good work @Mahesh
then execFFmpegBinary(complexCommand);
will be like this
private void execFFmpegBinary(String[] command){
try {
ffmpeg.execute(commands, new ExecuteBinaryResponseHandler() {
@Override
public void onStart() {
Log.d("Event ", "onStart");
}
@Override
public void onProgress(String message) {
Log.e("Event ", "onProgress - " + message);
}
@Override
public void onFailure(String message) {
Log.e("Event ", "onFailure - " + message);
}
@Override
public void onSuccess(String message) {
Log.e("Event ", "onSuccess - " + message);
}
@Override
public void onFinish() {
Log.e("Event ", "onFinish");
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
// Handle if FFmpeg is already running
}
}
try command for cut video
String[] complexCommand = {"-ss", "" + startMs / 1000, "-y", "-i", inputFileAbsolutePath, "-t", "" + (endMs - startMs) / 1000, "-s", "320x240", "-r", "15", "-vcodec", "mpeg4", "-b:v", "2097152", "-b:a", "48000", "-ac", "2", "-ar", "22050", outputFileAbsolutePath};
to know more about ffmpeg android refer this link
Here is the solution using FFMPEG library use below function to trim or cut the video, may this will work for you:
private void executeCutVideoCommand(int startMs, int endMs) {
File moviesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES
);
String filePrefix = "cut_video";
String fileExtn = ".mp4";
String yourRealPath = getPath(VideoEffectActivity.this, selectedVideoUri);
File dest = new File(moviesDir, filePrefix + fileExtn);
int fileNo = 0;
while (dest.exists()) {
fileNo++;
dest = new File(moviesDir, filePrefix + fileNo + fileExtn);
}
Log.d(TAG, "startTrim: src: " + yourRealPath);
Log.d(TAG, "startTrim: dest: " + dest.getAbsolutePath());
Log.d(TAG, "startTrim: startMs: " + startMs);
Log.d(TAG, "startTrim: endMs: " + endMs);
filePath = dest.getAbsolutePath();
//String[] complexCommand = {"-i", yourRealPath, "-ss", "" + startMs / 1000, "-t", "" + endMs / 1000, dest.getAbsolutePath()};
String[] complexCommand = {"-ss", "" + startMs / 1000, "-y", "-i", yourRealPath, "-t", "" + (endMs - startMs) / 1000, "-vcodec", "mpeg4", "-b:v", "2097152", "-b:a", "48000", "-ac", "2", "-ar", "22050", filePath};
execFFmpegBinary(complexCommand);
}
private void execFFmpegBinary(final String[] command) {
try {
ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
@Override
public void onFailure(String s) {
Log.d(TAG, "FAILED with output : " + s);
}
@Override
public void onSuccess(String s) {
Log.d(TAG, "SUCCESS with output : " + s);
//You have to create a class of Preview Activity
//If you don't have please remove below Intent code
Intent intent = new Intent(VideoEffectActivity.this, PreviewActivity.class);
intent.putExtra(FILEPATH, filePath);
startActivity(intent);
}
@Override
public void onProgress(String s) {
progressDialog.setMessage("progress : " + s);
Log.d(TAG, "progress : " + s);
}
@Override
public void onStart() {
Log.d(TAG, "Started command : ffmpeg " + command);
progressDialog.setMessage("Processing...");
progressDialog.show();
}
@Override
public void onFinish() {
Log.d(TAG, "Finished command : ffmpeg " + command);
progressDialog.dismiss();
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
// do nothing for now
}
}
Put this dependency into gradle file:
compile 'com.writingminds:FFmpegAndroid:0.3.2'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With