3

我正在使用我的应用程序转换视频,并使用 FFmpeg 库获得它。我正在使用 FFmpeg 的静态编译版本,并像这样运行我的命令:

        //Conversion video
        try {
            Process p = Runtime.getRuntime().exec("data/data/package/cache/ffmpeg -i "   path   " -g "   String.valueOf(keyFrames)   " -s 720x480 -vcodec libx264 -an -y /sdcard/lowResolution.mp4");
            p.waitFor();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d(TAG, "Video convertido"); 

它工作得很好,但它花了我太多时间,所以我想放一个进度条,所以我需要读取进程的输出事件(我在终端中执行命令时可以看到相同的输出),以便知道需要多长时间或类似的东西。

对不起我的英语,谢谢你的帮助!!

4

1 回答 1

1

您将整个事情放在一个线程中(或者可能是 AsyncTask,取决于您的偏好):

new Thread() {
    public void run() {
        //Conversion video
        try {
            Process p = Runtime.getRuntime().exec("data/data/package/cache/ffmpeg -i "   path   " -g "   String.valueOf(keyFrames)   " -s 720x480 -vcodec libx264 -an -y /sdcard/lowResolution.mp4");
            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((line = in.readLine()) != null) {
                runOnUiThread(new Runnable() {
                    public void run()  {
                        //update ur progress dialog accordingly
                    }
                });
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d(TAG, "Video convertido");
    }
}.start();
于 2013-10-22T07:36:12.687 回答