【问题标题】:IOException on watermarking video on AndroidAndroid上水印视频的IOException
【发布时间】:2016-09-20 00:22:35
【问题描述】:

我正在尝试使用来自 Github 的 WritingMinds 的 Ffmpeg 库以编程方式在 Android 中为视频添加水印:

https://github.com/WritingMinds/ffmpeg-android-java

我按照他们在文档中所说的做了一切,并将库导入了 Android Studio。

不过,它给了我一个带有“没有这样的文件或目录”的 IOExeption。

代码

public class MainActivity extends Activity {

Button btn;
Context context;

String str;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn = (Button) findViewById(R.id.button);

context = this;

str = "ffmpeg -i /storage/extSdCard/DCIM/Camera/video.avi -i /storage/extSdCard/DCIM/Camera/logo.png -filter_complex 'overlay=10:main_h overlay_h-10' /storage/extSdCard/DCIM/Camera/watermarked.avi";

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

doFfmpeg(str.split(" "));

    }
  });
 }
}

public void doFfmpeg(String[] loc){

FFmpeg ffmpeg = FFmpeg.getInstance(context);

try {
// to execute "ffmpeg -version" command you just need to pass "-version"
ffmpeg.execute(loc, new ExecuteBinaryResponseHandler() {

@Override
public void onStart() {
}

@Override
public void onProgress(String message) {
}

@Override
public void onFailure(String message) {
}

@Override
public void onSuccess(String message) {

Toast.makeText(getApplicationContext(), "Success !", Toast.LENGTH_LONG).show();

}

@Override
public void onFinish() {
  }
 });
} catch (FFmpegCommandAlreadyRunningException e) {
// Handle if FFmpeg is already running
} catch (Exception e){

}

 }
}

日志

691 5092-5311/com.app.watermark.watermark E/FFmpeg: Exception while trying to run: [Ljava.lang.String;@338dbc60
java.io.IOException: Error running exec(). Command: [/data/data/com.app.watermark.watermark/files/ffmpeg, -i, /storage/extSdCard/DCIM/Camera/video.avi, -i, /storage/extSdCard/DCIM/Camera/logo.png, -filter_complex, 'overlay=10:main_h-overlay_h-10', /storage/extSdCard/DCIM/Camera/watermarked.avi] Working Directory: null Environment: null
at java.lang.ProcessManager.exec(ProcessManager.java:211)
at java.lang.Runtime.exec(Runtime.java:173)
at java.lang.Runtime.exec(Runtime.java:128)
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:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
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:209)
at java.lang.Runtime.exec(Runtime.java:173) 
at java.lang.Runtime.exec(Runtime.java:128) 
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:288) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:818) 

我怎样才能做到这一点?

【问题讨论】:

    标签: android ffmpeg android-ffmpeg


    【解决方案1】:

    我用稍微不同的方法解决了这个问题。

    我使用的是 WarZone 上所说的 Ffmpeg4Android:

    http://androidwarzone.blogspot.ro/2011/12/ffmpeg4android.html

    这里告诉你应该如何配置 Ffmpeg4Android:

    https://docs.google.com/document/d/1FWMAT3FbCXlW_91d6Ek_UCD_CtYJWxYaDVY2hE6Onig/edit

    缺点是,如果你想暂时导入他们的项目,你必须手动将它包含在你的项目中,这将导致一个巨大的 apk。

    虽然目前,它运行良好并且可以完成它的工作。

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2017-05-29
      相关资源
      最近更新 更多