我在 whatsapp messenger 中看到了独特的功能。在发送视频应用程序之前,用户可以选择框架,用户只能将选定的框架作为视频发送。
所以,我的问题是我们如何在帧中分割视频并再次从分割的帧中分割视频? whatsapp messagnes是如何做到的?
答案 0 :(得分:9)
您可以使用ffmpeg-android剪切/裁剪视频。 使用它添加
compile 'com.github.hiteshsondhi88.libffmpeg:FFmpegAndroid:0.2.5'
依赖。
对于剪辑视频,请运行此命令
execFFmpegCommand("-i " + path.getAbsolutePath() + " -ss " + startMs / 1000 + " -to " + endMs / 1000 + " -strict -2 -async 1 " + dest.getAbsolutePath());
,其中
path
是原始视频的路径。
startMs
是您要剪切的视频格式的初始时间(裁剪视频的开始时间)
endMs
是您要剪切的视频时间(裁剪视频的结束时间)
dest
是您要保存剪切/裁剪视频的路径
如果您的文件名或foldername包含空格,请使用String formatter处理空格。
private void execFFmpegCommand(final String command) {
try {
ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
@Override
public void onFailure(String s) {
Log.e("FFMPEG", "FAILED with output : " + s);
}
@Override
public void onSuccess(String s) {
Log.e("FFMPEG", "SUCCESS with output : " + s);
}
@Override
public void onProgress(String s) {
Log.e("FFMPEG", "Started command : ffmpeg " + command);
Log.e("FFMPEG", "progress : " + s);
}
@Override
public void onStart() {
Log.e("FFMPEG", "Started command : ffmpeg " + command);
}
@Override
public void onFinish() {
Log.e("FFMPEG", "Finished command : ffmpeg " + command);
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
// do nothing for now
}
}
在剪切视频之前,您必须通过在onCreate()
或onCreateView(
内调用以下方法来加载FFMPEG。最好在AsyncTask中执行此方法。
private void loadFFMpegBinary() {
try {
if (ffmpeg == null) {
ffmpeg = FFmpeg.getInstance(getActivity());
}
ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
@Override
public void onFailure() {
}
@Override
public void onSuccess() {
Log.e("FFMPEG", "ffmpeg : correct Loaded");
}
});
} catch (FFmpegNotSupportedException e) {
} catch (Exception e) {
}
}
您还可以制作一个RangeSeekbar,允许用户使用anothem/android-range-seek-bar库从原始视频中选择裁剪视频的时间范围。
<强>更新强>
下面链接包含我在博客上写的ffmpeg视频编辑器教程,其中包含如何使用FFmpeg库剪切视频 -
<强> https://androidlearnersite.wordpress.com/2017/03/17/ffmpeg-video-editor/ 强>
下面的链接包含该教程的完整源代码 -
<强> https://github.com/bhuvnesh123/FFmpeg-Video-Editor-Android 强>
以下是在该媒体中创建的应用的Playstore链接 -
<强> https://play.google.com/store/apps/details?id=videoeditor.bhuvnesh.com.ffmpegvideoeditor 强>
答案 1 :(得分:2)
我认为,按照其他人的建议使用ffmpeg,它具有非常严格的许可,正如我记得,您的应用也必须是开源的并具有其许可。
如果愿意,可以使用我创建的VideoTrimmer库,该库基于其他允许的库。
答案 2 :(得分:0)
https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html
在'ffmpeg.c'中了解静态变量的问题......
我敢打赌,你有同样的问题,需要做一些事情(3个备选的选择)来重置或GC那些变量:
获取加载lib和GC的java类加载器
在c层执行OP在上面链接中所做的事情
编写第二个共享库,在每个调用周期中在第一个库中使用'dlsym'和'dlclose'
github,请参阅“自述文件”here
答案 3 :(得分:0)
使用Android-video-trimmer android库。它将FFmpeg与exoplpayer结合使用。它使视频修整更加容易