【问题标题】:Video Creation with Images and Audio in Android [closed]在 Android 中使用图像和音频创建视频 [关闭]
【发布时间】:2014-07-09 14:56:30
【问题描述】:

我想在 Android 中创建一个包含一些图像和音频文件的视频。 我搜索并找到了有用的库是 opencv、javacv 和 ffmpeg。 我使用了该库并按照链接上给出的过程进行操作- https://github.com/bytedeco/javacv

我想知道流程

  1. 是否需要本机开发工具包。即使我们有是否有必要 .so 文件,因为我使用上面提到的资源完成了任务 只需将 .so 文件放在 libs 目录的 armeabi 文件夹中即可。
  2. 我创建了视频,但要求是视频应添加声音
  3. 声音必须由用户在运行时录制,图像必须来自位图 它们也将在运行时创建。

【问题讨论】:

  • 是的,您需要从命令行使用 NDKbuild 构建项目,这将在 libs 文件夹中生成 .so 文件
  • 不需要 ndk,你可以在没有 ndk 构建的情况下使用,参见@V.P. 提到的 javacv。下面。我解决了我的问题。对于音频录制,最好录制音频并保存后,将保存的文件网址提供给音频路径..在这里查看我的答案stackoverflow.com/questions/20071981/…

标签: android c++ c


【解决方案1】:

1)。请从驱动器下载此 zip 文件: https://drive.google.com/file/d/0B71R0Zw0m1zQM3RVOWNWM2poVHc/edit?usp=sharing

2) 解压下载的 zip 文件并将所有文件与下面给出的 libs/armeabi 文件夹相同

3) 在您的活动中使用以下代码

请导入以下文件。

 import static com.googlecode.javacv.cpp.opencv_highgui.cvLoadImage;
    import com.googlecode.javacv.cpp.avcodec;
    import com.googlecode.javacv.cpp.opencv_core.IplImage;

这里是实际代码

new AsyncTask<Void, Void, Void>() {
            ProgressDialog dialog;
            protected void onPreExecute() {
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setMessage("Genrating video, Please wait.........");
                dialog.setCancelable(false);
                dialog.show();
            };

            @Override
            protected Void doInBackground(Void... arg0) {

                File folder = Environment
                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
                String path = folder.getAbsolutePath() + "/Camera";
                ArrayList<String> paths = (ArrayList<String>) getListOfFiles(
                        path, "jpg");
                FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(path
                        + "/" + "test.mp4", 400, 400);
                videoPath = path + "/" + "test.mp4";
                try {
                    //recorder.setVideoCodec(5);
                    recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
                    //recorder.setFormat("3gp");
                    recorder.setFormat("mp4");
                    recorder.setFrameRate(frameRate);
                    recorder.setVideoBitrate(30);
                    startTime = System.currentTimeMillis();
                    recorder.start();
                    for (int i = 0; i <paths.size(); i++) {
                        IplImage image = cvLoadImage(path + "/" + paths.get(i));
                        long t = 3000 * (System.currentTimeMillis() - startTime);
                        if (t > recorder.getTimestamp()) {
                            recorder.setTimestamp(t);
                            recorder.record(image);
                        }
                    }
                    System.out.println("Total Time:- " + recorder.getTimestamp());
                    recorder.stop();
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }

            protected void onPostExecute(Void result) {
                dialog.dismiss();
                Intent intent = new Intent(Intent.ACTION_VIEW); 
                intent.setDataAndType(Uri.parse(videoPath), "video/mp4");
                startActivity(intent);
                Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT)
                        .show();
            };
        }.execute();

如果您有任何疑问,请随时询问。

【讨论】:

  • 嗨,你能粘贴完整的代码吗,我想要 cvLoadImage() 方法代码。谢谢
  • @sham.y 请看我编辑的答案。可能是你的帮助:)
  • 您好,您从哪里获得 OpenCV 相关的 jar 文件。如果可能,您能否提供该 URL。在我的 jar 文件中,没有 cvLoadImage()。
  • 请使用这个 :- 这是官方链接code.google.com/p/javacv/downloads/list
  • @sham.y :我之前无法实现,但请使用此链接groups.google.com/forum/#!topic/javacv/TdppyNYxeFU 可能会对您有所帮助...... :)
猜你喜欢
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2012-11-19
  • 1970-01-01
相关资源
最近更新 更多