如何将音频文件与新的视频文件合并?在Android中可以吗?



我在Android中使用javacv成功地从图像序列中获取视频.现在我遇到了问题,如何将音频合并到新创建的 video.is Android或javacv集成中?

Here is my code,

            String path ="/mnt/sdcard/Video_images"; 

    File folder = new File(path);

    File[]    listOfFiles = folder.listFiles();  
        if(listOfFiles.length>0)
        {

      iplimage = new opencv_core.IplImage[listOfFiles.length];

       for (int j = 0; j < listOfFiles.length; j++) {
         String files="";       
       if (listOfFiles[j].isFile()) 
       {
       files = listOfFiles[j].getName();
       System.out.println(" j " +j   + listOfFiles[j]);
         }   

        String[] tokens = files.split("\.(?=[^\.]+$)");
       String name=tokens[0]; 
    Toast.makeText(getBaseContext(), "size"+listOfFiles.length, Toast.LENGTH_SHORT).show();    


      iplimage[j]=cvLoadImage("/mnt/sdcard/Video_images/"+name+".jpg");

       }
    } 
//         

                                 FFmpegFrameRecorder recorder = new    
                    FFmpegFrameRecorder("/mnt/sdcard/Video_images      
                   /output"+System.currentTimeMillis()+".mp4",200,150);                                                                                      
         try {
             recorder.setVideoCodec(a); //CODEC_ID_MPEG4 //CODEC_ID_MPEG1VIDEO
             recorder.setFrameRate(24);                     
             recorder.setPixelFormat(PIX_FMT_YUV420P); //PIX_FMT_YUV420P

             recorder.start();

            for (int i=0;i<iplimage.length;i++)
               {
                 recorder.record(iplimage[i]);

                }
             recorder.stop();
            }
         catch (Exception e){
             e.printStackTrace();
           }

在此代码中,如何合并我的音频文件?

Android中没有用于合并视频文件的内容。如果您需要在设备上执行此操作,则需要找到一些可以为您处理此问题的 Java JAR。

使用最新版本的javacv应该是可能的,可以从这里下载。

如果您想在创建 mp4 时将音频与视频合并,您的代码会想要什么:

    FFmpegFrameGrabber grabber1 = new FFmpegFrameGrabber("song.mp3");   
    grabber1.start(); 
    FFmpegFrameRecorder recorder = new    
    FFmpegFrameRecorder("/mnt/sdcard/Video_images/output"+System.currentTimeMillis()+".mp4",200,150, grabber1.getAudioChannels());   
    try {
        recorder.setVideoCodec(a); //CODEC_ID_MPEG4 //CODEC_ID_MPEG1VIDEO
        recorder.setFrameRate(24);                     
        recorder.setPixelFormat(PIX_FMT_YUV420P); //PIX_FMT_YUV420P            
        recorder.start();
        com.googlecode.javacv.Frame frame1 = new com.googlecode.javacv.Frame();
        for (int i=0;i<iplimage.length;i++)
        {
            frame1 = grabber1.grabFrame();
            recorder.record(frame1);
            recorder.record(iplimage[i]);
        }
        recorder.stop();
        grabber1.stop();

这可能不是100%正确的,但应该是一个很好的起点。当然,在尝试录制之前,您需要确保您的 frame1 不为空。

最新更新