android - 使用 FFMPEG android java 预编译库更改视频播放确实非常缓慢

标签 android ffmpeg video-processing android-library playback

我正在使用 FFMPEG android java 库在 android 中处理视频以改变播放速度。对于 6 秒的视频,使其播放速度慢 0.5 setpts,它需要超过 1 分钟。 这是我的代码

 public class TestFFMpegActivity {
        private static String cmd,
        private static FFmpeg ffmpeg;
        private static Context mContext;


        public static String getInternalDirectoryPath() {
            return Environment.getExternalStorageDirectory().getAbsolutePath();
        }

        public static void initiateFFmpeg(Context context, String path) {
            mContext = context;
            ffmpeg = FFmpeg.getInstance(context);   
            VideoIn = getInternalDirectoryPath() + "/Download/input.mp4";
            VideoOut = getInternalDirectoryPath() + "/Download/output.mp4";
            cmd = "-i "+VideoIn+" -vf setpts=2*PTS -strict -2 "+VideoOut;
            try {
                ffmpeg.loadBinary(new LoadBinaryResponseHandler() {

                    @Override
                    public void onStart() {
                    }

                    @Override
                    public void onFailure() {
                    }

                    @Override
                    public void onSuccess() {
                    }

                    @Override
                    public void onFinish() {
                        processVideo();
                    }
                });
            } catch (FFmpegNotSupportedException e) {
                // Handle if FFmpeg is not supported by device
            }
        } 
        private static void processVideo(){
        try {
            ffmpeg.execute(cmd ,
                    new ExecuteBinaryResponseHandler() {

                        @Override
                        public void onStart() {
                            //for logcat
                            Log.w(null,"processing started");
                        }

                        @Override
                public void onProgress(String message) {
                    //for logcat
                    Log.w(null, "onProgress");
                }

                @Override
                public void onFailure(String message) {
                    Log.w(null, message.toString());
                }

                @Override
                public void onSuccess(String message) {
                    Log.w(null, message.toString());
                }

                @Override
                public void onFinish() {

                }
            });
        } catch (FFmpegCommandAlreadyRunningException e) {
            Toast.makeText(mContext, "Video processing failed due to exception", Toast.LENGTH_LONG).show();

            // Handle if FFmpeg is already running
            e.printStackTrace();
            Log.w(null, e.toString());
        }
    }
}

这是使用上述库的gradle构建路径

  compile 'com.github.hiteshsondhi88.libffmpeg:FFmpegAndroid:0.2.5'

最佳答案

要更改播放命令,请在其中添加参数“-ultrafast”。 现在 cmd 会像

cmd= "-i " + VideoIn+ " -vf setpts=2*PTS -c:v libx264 -c:a aac -strict experimental -vcodec libx264 -preset ultrafast -b:a 128k " + VideoOut;

这个参数对加工有神奇的作用。在相同环境下,视频处理时间从 1 分 6 秒减少到 13 秒。

关于android - 使用 FFMPEG android java 预编译库更改视频播放确实非常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590097/

相关文章:

java - 如何检查从 Google Place Search 获得的结果中是否存在 'rating' 字段?

c - 如何在 Ubuntu 的默认文件夹之外编译 ffmpeg 示例?

c - 带视频的opencv圆检测

ffmpeg - 如何在背景图像上叠加视频?

python - 如何使用 OpenCV VideoWriter 将视频保存到特定目录 -- python

video - 使用 FFmpeg v360 过滤器对 180 个 VR 素材进行变形

android - 如何让我的安卓模拟器使用我电脑的 VPN 接口(interface)?

android - 从 R.color 中以编程方式检索颜色

android - 在选项卡内切换 fragment

ffmpeg 将视频分割成 hls 切片,为什么 hls_time 选项不起作用?