2012-12-11 70 views
4

我成功地从android.now中使用javacv从图像序列中获取视频我有问题是如何将音频合并到新创建的video.is它可能在android或javacv集成?如何合并音频文件与新的视频文件?它可能在android?

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

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

+0

你做了合并吗? –

回答

0

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

+0

hi commonsware.did你有任何样本或链接有关吗? – rams

+0

@rams:不,对不起。 – CommonsWare

+0

@CommonsWare自2012年以来有关此主题的任何更新?我知道有'MediaMuxer',但只有API> 18,它不会做编解码器转换... – ChristopheCVB

0

应该可以使用最新版本的javacv,它可以从here下载。

这里,如果你想在你创建你的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在你尝试记录之前不是空的。

+0

第一行显示targetInovationError。如何解决此问题? –

相关问题