Sri*_*dem 6 video android video-editing android-library
我想以编程方式根据 android 中的开始和结束时间修剪本地视频,我尝试了下面附加的几个链接,但没有为我工作。请让我知道任何可用的库或示例代码来克服这个问题?
参考链接:
提前致谢!
使用 FFMPEG 库来解决您的问题。感谢您的 writeminds 使 ffmpeg 在 Android 1 上变得简单。implementation 'com.writingminds:FFmpegAndroid:0.3.2'
初始化 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
}
}
Run Code Online (Sandbox Code Playgroud)使用FFMPEG 命令,如上面发布的@Mahesh Keshvala。干得好@Mahesh
然后execFFmpegBinary(complexCommand);就会像这样
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
}
}
Run Code Online (Sandbox Code Playgroud)尝试剪切视频命令
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};
Run Code Online (Sandbox Code Playgroud)
要了解有关 ffmpeg android 的更多信息,请参阅此链接
这是使用 FFMPEG 库的解决方案,使用以下函数来修剪或剪切视频,可能这对您有用:
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
}
}
Run Code Online (Sandbox Code Playgroud)
将此依赖项放入 gradle 文件中:
compile 'com.writingminds:FFmpegAndroid:0.3.2'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5526 次 |
| 最近记录: |