修剪视频,类似于 WhatsApp

11

我在 WhatsApp Messenger 中看到了独特的功能。在发送视频之前,该应用程序允许用户选择帧,并且用户可以仅将所选帧作为视频发送。

那么,我的问题是如何将视频分成帧并再次生成视频?WhatsApp消息是如何做到的?


你有任何解决方案或示例吗? - Mehul Joisar
嘿,开发者,你有这道题的解决方案吗?我也有同样的任务,请帮帮我。 - shweta_jain
嘿,你有没有找到任何库或其他工具来实现这个? - SweetWisher ツ
@dev...你有任何解决方案吗? - BMM
@BMM 看看这个 https://github.com/a914-gowtham/Android-video-trimmer 我已经制作出来支持 Android 10 了。 - gowtham6672
4个回答

10

你可以使用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
    }
}

在剪辑视频之前,您需要调用下面的方法加载FFMPEG,可以在onCreate()onCreateView()中执行此方法。最好将此方法放在AsyncTask中执行。

在剪切视频之前,您需要通过调用下面的方法加载FFMPEG,可以在onCreate()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) {

        }
    }

您还可以使用anothem/android-range-seek-bar库创建一个RangeSeekbar,以允许用户从原始视频中选择裁剪视频的时间范围。

更新

下面的链接包含我在博客上撰写的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
很高兴知道FFmpeg在Android上有高级库。但是 - (1) 你能给个例子如何使用它裁剪视频吗?(2) 它的许可证是GPL,这意味着你需要为每个应用程序安装付费。 - Nativ
@Smogen 我目前还没有使用任何东西,但我认为这个可能是一个不错的选择:https://github.com/titansgroup/k4l-video-trimmer - android developer
1
@Smogen FFMpeg现在也可以使用了。那个错误只会出现在x86设备上。你可以使用这个来解决它。 - Android Developer
@androiddeveloper 我已经查看了源代码,他们所做的就是使用我在ffmpeg上也使用的裁剪滤镜。所以遗憾的是,这并没有真正帮助到我。我确实成功地使用mobile-ffmpeg裁剪了视频,但速度非常慢,因此需要另一种解决方案。 - Benjamin Basmaci
@AndroidDeveloper 我不知道,但是正如我在你的问题中发布的那样,我们拥有相同的IDE版本。也许有一些流氓文件或者某些未被考虑的因素?很难说。我是通过 .ZIP 下载并解压项目而不是克隆它来下载的。也许可以尝试这种方式? - Benjamin Basmaci
显示剩余13条评论

2
我认为像其他人建议的那样使用ffmpeg,它有一个非常严格的许可证,要求您的应用程序也必须是开源的,并具有其许可证。
如果您愿意,您可以使用我制作的基于其他宽松许可库的VideoTrimmer库。

0

https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html

如何在Android上使用FFmpeg

阅读有关“ffmpeg.c”中静态变量问题的内容...

我敢打赌你也遇到了同样的问题,需要做一些事情(3个备选方案)来重置或GC这些变量:

  1. 获取加载库的Java类加载器并进行GC

  2. 在C层中执行上面链接中OP所做的操作

  3. 编写第二个共享库,在每个调用周期中使用'dlsym'和'dlclose'对第一个库进行操作

请查看GitHub上的“README”此处


嗨,Navin,感谢您的回复。您提供的解决方案是针对安卓系统的吗? - dev
是的。您需要将库包含到应用程序中,然后可以裁剪视频。 - Naveen
你能提供一个示例或代码,说明如何实现这个吗? - dev

0

使用Android-video-trimmer Android 库。它使用 ExoPlayer 和 FFmpeg,使得视频剪辑更加容易。


1
我尝试使用你的库,但是出现了“无法修剪”的提示。 - Pallab Banerjee
请使用最新的 https://github.com/a914-gowtham/Android-video-trimmer,它现在支持 Android 10。 - gowtham6672

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接