【问题标题】:Use ffmpeg to Convert Video to Gif android studio使用 ffmpeg 将视频转换为 Gif android studio
【发布时间】:2014-12-16 11:34:31
【问题描述】:

我目前正在制作一个简单的 Android 应用,可以将 SD 卡中的视频转换为 gif。

我了解到 ffmpeg 是处理转换的最有效方法。但我不知道如何将 ffmeg 添加到我的 android studio 项目中。

【问题讨论】:

    标签: java android-ndk ffmpeg android-studio animated-gif


    【解决方案1】:

    在你应用的 build.gradle 中添加

    compile 'com.writingminds:FFmpegAndroid:0.3.2'
    

    然后添加一个用于选择视频路径的按钮,并在按钮的 onClick 方法中创建一个意图,帮助用户从手机中选择视频

     Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("video/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select Video"), PICK_CONTACT_REQUEST);
    

    现在使用以下方法检索上述结果

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Check which request we're responding to
        if (requestCode == PICK_CONTACT_REQUEST) {
            // Make sure the request was successful
            if (resultCode == RESULT_OK) {
                Uri selectedImageUri = data.getData();
    
                // OI FILE Manager
                String filemanagerstring = selectedImageUri.getPath();
    
    
                // MEDIA GALLERY
    
                String selectedImagePath =getPath(selectedImageUri);
                if (selectedImagePath != null) {
                    String[] cmd = {"-i"
                            , selectedImagePath
                            , "Image.gif"};
                    conversion(cmd);
    
                }
            }
        }
    }
    

    定义getPath方法获取选中视频的路径

     public String getPath(Uri uri) {
        String[] projection = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
            // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }
    

    然后创建一个将视频转换为gif的方法

     public static void conversion(String[] cmd) {
        FFmpeg ffmpeg = FFmpeg.getInstance(this);
    
        try {
    
    
            // to execute "ffmpeg -version" command you just need to pass "-version"
            ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
    
                @Override
                public void onStart() {
                }
    
                @Override
                public void onProgress(String message) {
                }
    
                @Override
                public void onFailure(String message) {
                }
    
                @Override
                public void onSuccess(String message) {
                }
    
                @Override
                public void onFinish() {
                }
            });
        } catch (FFmpegCommandAlreadyRunningException e) {
            // Handle if FFmpeg is already running
            e.printStackTrace();
        }
    }
    

    可以参考https://github.com/WritingMinds/ffmpeg-android-java

    【讨论】:

    • 哇,太好了。谢谢!我有一个问题; (这可能是一个非常愚蠢的问题 - 对不起,我真的是 android 开发的新手)我如何导入 ffmpeg?我收到一个错误:Error:(38, 5) error: cannot find symbol class FFmpeg 有什么想法吗?
    【解决方案2】:

    对于 JNI、NDK/AS,您可以以 this 开头

    然后检查用户 (ph0b) SO 是否发布了有关 JNI/NDK 的帖子

    那么,android 上的 ffmpeg 是一个非常艰巨的任务,您需要一些时间。

    在 github 上搜索“android-ffmpeg”,寻找最高的社区评级(星星、克隆、)以及良好的构建说明。

    IMO - 'guardianproject' 和 'halfninja' 很好。

    您可以花一些时间在 android 之外(只是在 VM 上构建 ffmpeg 静态库),因此您只熟悉 ffmpeg 上的配置/构建。

    然后,转到完整的 android 工作室,使用 ph0b 集成技术在 gradle 构建中运行 NDK/build,使用他的博客文章中对 gradle 的更改。

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 2021-06-30
      • 2012-12-19
      • 2020-03-17
      • 2018-07-09
      • 2020-10-08
      • 2015-03-14
      • 2020-08-25
      相关资源
      最近更新 更多