使用FFmpeg在Android中将视频裁剪为方格式

时间:2016-08-15 20:43:23

标签: android video ffmpeg

我目前正在开发一款应用,可将16:9视频裁剪为1:1视频。但是,我没有得到代码工作。如果可能,软件应尽可能快地转换输入的视频。分辨率可在480x480和720x720之间变化。

如果我可以选择裁剪框架的位置,那将是完美的。

我得到的错误:

E/FFmpeg: Exception while trying to run: [Ljava.lang.String;@f0c91b8
java.io.IOException: Error running exec(). Command: [/data/user/0/com.android.grafika/files/ffmpeg, -i /storage/emulated/0/Alphacrypt1.mp4 -vf crop=640:256:0:400 -threads 5 -preset ultrafast -strict -2 /storage/emulated/0/YourCroppedMovie.mp4] Working Directory: null Environment: null
at java.lang.ProcessManager.exec(ProcessManager.java:215)
at java.lang.Runtime.exec(Runtime.java:174)
at java.lang.Runtime.exec(Runtime.java:129)
at com.github.hiteshsondhi88.libffmpeg.ShellCommand.run(ShellCommand.java:10)
at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:38)
at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:10)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.io.IOException: No such file or directory
at java.lang.ProcessManager.exec(Native Method)
at java.lang.ProcessManager.exec(ProcessManager.java:213)
at java.lang.Runtime.exec(Runtime.java:174) 
at java.lang.Runtime.exec(Runtime.java:129) 
at com.github.hiteshsondhi88.libffmpeg.ShellCommand.run(ShellCommand.java:10) 
at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:38) 
at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:10) 
at android.os.AsyncTask$2.call(AsyncTask.java:295) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 

我正在使用的代码:

final String[] cmd = new String[]{"-i /storage/emulated/0/Alphacrypt1.mp4 -vf crop=640:256:0:400 -threads 5 -preset ultrafast -strict -2 /storage/emulated/0/YourCroppedMovie.mp4"};

    try {
        final FFmpeg ffmpeg = FFmpeg.getInstance(this);
        ffmpeg.execute(cmd, new FFmpegExecuteResponseHandler() {
            @Override
            public void onSuccess(String message) {
                Toast.makeText(getApplicationContext(), "Successfully converted!",
                        Toast.LENGTH_LONG).show();
            }

            @Override
            public void onProgress(String message) {

            }

            @Override
            public void onFailure(String message) {
                Toast.makeText(getApplicationContext(), "Fail!"+ message,
                        Toast.LENGTH_LONG).show();
            }

            @Override
            public void onStart() {
                Toast.makeText(getApplicationContext(), "Started!",
                        Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFinish() {
                Toast.makeText(getApplicationContext(), "Stopped!",
                        Toast.LENGTH_LONG).show();
            }
        });
    } catch (FFmpegCommandAlreadyRunningException e) {

    }

感谢您的帮助。

SOLUTION:

  1. 我没有添加"加载二进制"部分,这是运行的必要条件 FFmpeg库(http://writingminds.github.io/ffmpeg-android-java/)。
  2. 该命令需要使用{em> printfmyname
  3. 已告知的.split(" ");进行拆分
  4. 目前我使用-vf crop = 1080:1080:0:0将视频裁剪为正方形。 (没有弄乱比率)

0 个答案:

没有答案