android - 在android中使用FFmpegFrameGrabber,FrameRecorder JavaCv创建的视频中没有捕获声音

标签 android opencv ffmpeg video-processing javacv

我正在尝试在 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(以防有帮助)

最佳答案

一旦我met由于 JavaCV 中缺少文档而导致的问题,例如:

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

所以你得到音频或视频帧,然后你总是尝试将其作为图像处理。您应该先检查它是音频帧还是视频帧,不要尝试为音频调用 cvCvtColor()。

关于android - 在android中使用FFmpegFrameGrabber,FrameRecorder JavaCv创建的视频中没有捕获声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755554/

相关文章:

android - 如何使用 RxJava2 和 Retrofit2 处理 No Content 响应

php - ffmpeg:按需进行 1 帧操作

ffmpeg - 如何在软件中解码像素格式 AV_PIX_FMT_CUDA 的 AVFrame?

firefox - Mozilla Firefox 36 在播放我的 h264 MP4 文件时出现问题

javascript - 带有 Firebase 云消息传递的 Android WebView

android - 我可以实时从 Firebase 数据库读取数据并在 Android 应用程序中不断更新吗?

C++ OpenCV 图像通过套接字发送

python - 如果没有图像处理Python库(Pillow和cv2)无法读取,如何解码这个二进制图像文件?

c++ - 非静态成员引用

android - 在 Android Studio 中使用 ActivityInstrumentationTestCase2 横向测试 Android 应用程序