我在whatsapp messenger中看到了独特的功能。其中在发送视频应用程序之前允许用户选择帧,并且用户只能将那些选定的帧作为视频发送。
所以,我的问题是我们如何将视频划分为帧并再次从划分的帧中生成视频?whatsapp 消息是如何完成的?
我在whatsapp messenger中看到了独特的功能。其中在发送视频应用程序之前允许用户选择帧,并且用户只能将那些选定的帧作为视频发送。
所以,我的问题是我们如何将视频划分为帧并再次从划分的帧中生成视频?whatsapp 消息是如何完成的?
您可以使用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
是您要保存剪切/裁剪视频的路径
如果您的文件名或文件夹名包含空格,请使用字符串格式化程序来处理空格。
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
}
}
在剪切视频之前,您必须通过调用下面的方法来加载 FFMPEGonCreate()
或onCreateView(
)。最好在 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 以允许用户使用anthem/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
我认为,正如其他人所建议的那样使用 ffmpeg,它有一个非常严格的许可证,要求你的应用程序也是开源的并拥有它的许可证,我记得。
如果您愿意,可以使用我制作的VideoTrimmer库,它基于其他许可库。
https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html
阅读有关“ffmpeg.c”中静态变量的问题...
我敢打赌你有同样的问题,需要做一些事情(3个替代选择)来重置或GC这些变量:
获取加载 lib 的 java 类加载器并对其进行 GC
在 c 层中执行 OP 在上述链接中所做的操作
在每个调用周期中,在第一个库上编写一个使用“dlsym”和“dlclose”的第二个共享库
github,请参阅此处的“自述文件”
使用Android-video- trimmer android library.it 使用 FFmpeg 和 exoplpayer.it 使视频修剪更容易