修剪视频像whatsapp

dev*_*dev 7 video java-native-interface android video-editing

我在whatsapp messenger中看到了独特的功能.在发送视频应用程序之前,允许用户选择帧,用户只能将那些选定的帧作为视频发送.

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

And*_*per 9

您可以使用ffmpeg-android剪切/裁剪视频.使用它添加

compile 'com.github.hiteshsondhi88.libffmpeg:FFmpegAndroid:0.2.5'
Run Code Online (Sandbox Code Playgroud)

依赖.

对于剪切视频,请运行此命令

 execFFmpegCommand("-i " + path.getAbsolutePath() + " -ss " + startMs / 1000 + " -to " + endMs / 1000 + " -strict -2 -async 1 " + dest.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)

在剪切视频之前,你必须通过调用下面的方法来加载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) {

        }
    }
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

下面链接包含我在博客上写的ffmpeg视频编辑器教程,其中包含如何使用FFmpeg库剪切视频 -

https://androidlearnersite.wordpress.com/2017/03/17/ffmpeg-video-editor/

以下链接包含该教程的完整源代码 -

https://github.com/bhuvnesh123/FFmpeg-Video-Editor-Android

下面是在该turorial中创建的应用程序的playstore链接 -

https://play.google.com/store/apps/details?id=videoeditor.bhuvnesh.com.ffmpegvideoeditor


Nav*_*een 0

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

how to use ffmpeg on android

阅读“ffmpeg.c”中静态变量的问题...

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

  1. 获取加载 lib 的 java 类加载器并对其进行 GC

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

  3. 编写第二个共享库,在每个调用周期期间在第一个库上使用“dlsym”和“dlclose”

github ,请参阅此处的“自述文件”