10

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

所以,我的问题是我们如何将视频划分为帧并再次从划分的帧中生成视频?whatsapp 消息是如何完成的?

4

4 回答 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
    }
}

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

于 2015-08-02T07:57:39.923 回答
2

我认为,正如其他人所建议的那样使用 ffmpeg,它有一个非常严格的许可证,要求你的应用程序也是开源的并拥有它的许可证,我记得。

如果您愿意,可以使用我制作的VideoTrimmer库,它基于其他许可库。

于 2019-02-11T11:36:40.453 回答
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,请参阅此处的“自述文件”

于 2014-03-05T05:14:08.193 回答
0

使用Android-video- trimmer android library.it 使用 FFmpeg 和 exoplpayer.it 使视频修剪更容易

于 2020-07-20T07:21:40.047 回答