Создание видео с изображениями и аудио в Android

7 user3659314_Shubh [2014-05-21 09:04:00]

Я хочу создать видео на Android с некоторыми изображениями и звуковым файлом. Я искал это и нашел полезные библиотеки, для которых opencv, javacv и ffmpeg. Я использовал эти библиотеки и следил за процессом, давая ссылку - https://github.com/bytedeco/javacv

Я хочу знать для процесса

  • Для этой задачи необходим набор Native Development Kit. Это необходимо, даже если у нас есть .so файлы с нами, так как я достиг поставленной задачи с использованием ресурсов, указанных выше просто поместив файлы .so в папку armeabi каталога libs.
  • Я создал видео, но требование состоит в том, чтобы видео было добавлено со звуком
  • Звук должен записываться во время выполнения пользователем, и изображения должны поступать из растровых изображений которые также должны быть созданы во время выполнения.

c++ c android


1 ответ


6 V.P. [2014-05-21 10:19:00]

1). Загрузите этот zip файл с диска: https://drive.google.com/file/d/0B71R0Zw0m1zQM3RVOWNWM2poVHc/edit?usp=sharing

2) разархивируйте загруженный zip и поместите весь файл так же, как указанная папка libs/armeabi, указанная ниже

enter image description here

3) используйте нижеприведенный код в своей активности

пожалуйста, импортируйте файл follwing.

 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();

бесплатно спросите, есть ли у вас какие-либо вопросы.