像whatsapp一样修剪视频
Posted
技术标签:
【中文标题】像whatsapp一样修剪视频【英文标题】:Trim video Like whatsapp 【发布时间】:2014-04-07 00:00:18 【问题描述】:我在 whatsapp messenger 中看到了独特的功能。其中在发送视频应用程序之前允许用户选择帧,并且用户只能将那些选定的帧作为视频发送。
所以,我的问题是我们如何将视频划分为帧并再次从划分的帧中生成视频? whatsapp 消息是怎么做的?
【问题讨论】:
你有什么解决办法或例子吗? 嘿,开发者,你有这个问题的解决方案吗?我有同样的任务,请帮助我。 嘿,你有没有什么图书馆或其他东西来实现这个目标? @dev ..你有什么解决办法吗??? @BMM 看看这个github.com/a914-gowtham/android-video-trimmer 我已经在 android 10 上支持 【参考方案1】:您可以使用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
在剪切视频之前,您必须通过在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
【讨论】:
很高兴知道 ffmpeg 具有适用于 Android 的高级库。但是 - (1)你能举个例子如何用它裁剪视频吗? (2) 它的许可证是 GPL,这意味着您必须为每次安装应用程序付费。 @Nativ 无需为每次安装应用程序付费。请查看我的答案中的更新 这是修剪,但用户要求裁剪 @BhuvneshVarma,关于如何通过 ffmpeg 传递所选视频的四个角坐标并进行裁剪有什么建议吗? @Smogen FFMpeg 现在也可以使用..该错误仅出现在 x86 设备中。您可以使用this 来修复它..【参考方案2】:我认为,正如其他人所建议的那样使用 ffmpeg,它有一个非常严格的许可证,这要求你的应用程序也必须是开源的并拥有它的许可证,我记得。
如果您愿意,可以使用我制作的 VideoTrimmer 库,它基于其他许可库。
【讨论】:
【参考方案3】:https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html
how to use ffmpeg on android
阅读有关“ffmpeg.c”中静态变量的问题...
我敢打赌,你有同样的问题,需要做一些事情(3 个替代选择)来重置或 GC 那些变量:
获取加载 lib 的 java 类加载器并对其进行 GC
在 c 层执行 OP 在上述链接中所做的操作
编写第二个共享库,在每个调用周期中在第一个库上使用“dlsym”和“dlclose”
github,请参阅“自述文件”here
【讨论】:
您好 navin,感谢您的回复。你给出的解决方案是针对andorid的? 是的。您必须将库包含到您的应用程序中,然后才能裁剪视频 您能给我提供示例或代码,我该如何实现?【参考方案4】:使用Android-video-trimmer android library。它使用 FFmpeg 和 exoplpayer。它使视频修剪更容易
【讨论】:
我已尝试使用您的库,但失败并显示“无法修剪”吐司 使用最新的github.com/a914-gowtham/Android-video-trimmer 现在支持android 10以上是关于像whatsapp一样修剪视频的主要内容,如果未能解决你的问题,请参考以下文章
如何像在 whatsapp 中一样在 CollapsingToolbarLayout 中实现字幕