修剪视频像whatsapp

时间:2014-03-05 05:09:33

标签: android video java-native-interface video-editing

我在 whatsapp messenger 中看到了独特的功能。在发送视频应用程序之前,用户可以选择框架,用户只能将选定的框架作为视频发送。

所以,我的问题是我们如何在帧中分割视频并再次从分割的帧中分割视频? whatsapp messagnes是如何做到的?

4 个答案:

答案 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

how to use ffmpeg on android

在'ffmpeg.c'中了解静态变量的问题......

我敢打赌,你有同样的问题,需要做一些事情(3个备选的选择)来重置或GC那些变量:

  1. 获取加载lib和GC的java类加载器

  2. 在c层执行OP在上面链接中所做的事情

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

  4. github,请参阅“自述文件”here

答案 3 :(得分:0)

使用Android-video-trimmer android库。它将FFmpeg与exoplpayer结合使用。它使视频修整更加容易