【问题标题】:No sound is captured in video created using FFmpegFrameGrabber, FrameRecorder JavaCv in android在 android 中使用 FFmpegFrameGrabber、FrameRecorder JavaCv 创建的视频中没有捕捉到声音
【发布时间】:2015-01-01 13:08:53
【问题描述】:

我正在尝试使用 Android 中的 JavaCV 将灰度效果应用于视频文件。一切正常,但输出文件中没有音频。下面是代码。请帮忙

   File file = new File(Environment.getExternalStorageDirectory() + File.separator + "test3.mp4"); 

     FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file.getAbsolutePath()); 

     FrameRecorder recorder = null; 

     Log.d("bharat", " Audio channels = " + frameGrabber.getAudioChannels()); // THIS IS RETurnING 0 and not 2

     recorder = new FFmpegFrameRecorder("/mnt/sdcard/streaml_t.mp4", 270, 480, frameGrabber.getAudioChannels()); 

     recorder.setVideoCodec(AV_CODEC_ID_H264); 

     recorder.setFormat("mp4"); 

     recorder.setFrameRate(frameGrabber.getFrameRate()); 

     recorder.setSampleFormat(frameGrabber.getSampleFormat()); 

     recorder.setSampleRate(frameGrabber.getSampleRate()); 

     try { 
     recorder.start();
     frameGrabber.start(); 
     int count = 0;      
     while (true) { 

     try { 

     Frame grabFrame = frameGrabber.grabFrame(); 
     Log.d("bharat:", "frame " + count++); 

     if (grabFrame == null) { 
     System.out.println("!!! Failed cvQueryFrame"); 
     break; 

     } 

     IplImage frame_copy = cvCreateImage(cvSize(grabFrame.image.width(), grabFrame.image.height()), IPL_DEPTH_8U, 1); 

     cvCvtColor(grabFrame.image, frame_copy, CV_RGB2GRAY); 
     grabFrame.image = frame_copy; 
     recorder.setTimestamp(frameGrabber.getTimestamp());
     recorder.record(grabFrame); 
     } catch (Exception e) { 
        e.printStackTrace();
     } 

     } 

     Log.d("bharat:", "frame done"); 

     recorder.stop(); 
     recorder.release(); 

     } catch (Exception e) { 

     e.printStackTrace(); 

     } 

     }

P。 S:我发现 frameGrabber.getAudioChannels() 返回 0 而不是 2(以防万一)

【问题讨论】:

    标签: android opencv ffmpeg video-processing javacv


    【解决方案1】:

    有一次我met 出现了由于 JavaCV 中缺少文档而导致的问题,例如:

    /**  Grab next videoframe */
    public IplImage grab() 
    /** Grab next video or audio frame */
    public Frame grabFrame()
    

    因此,您获得了音频或视频帧,然后您总是尝试将其处理为图像。您应该检查它之前是音频还是视频帧,并且不要尝试调用 cvCvtColor() 获取音频。

    【讨论】:

    • 感谢@Vit Shiryaev,但我得到了答案。我实际上使用的是 javaCV 0.7,但它不起作用。然后我更新到 javaCV 0.9 并且它现在可以工作了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多