将图像组合成音频文件并以编程方式在android中制作视频文件
Posted
技术标签:
【中文标题】将图像组合成音频文件并以编程方式在android中制作视频文件【英文标题】:Combine an image into audio file and make a video file in android programmatically 【发布时间】:2013-12-03 00:45:11 【问题描述】:我通过 ffmpeg 库的教程将图像组合成音频文件。
这看起来非常复杂,并且环境值为 null。
我研究了很多,但没有找到任何解决方案。
android 中有没有什么方法可以合并图像和音频文件来制作视频?
【问题讨论】:
【参考方案1】:我没有编译 FFMPEG,只是我使用了javacv for android 并解决了我的问题,将音频和图像合并为视频文件。 脚步: 首先按照here提供的步骤,然后将以下代码放入您的活动中,并确保更改输入文件和输出文件的路径。
new AsyncTask<Void, Void, Void>()
ProgressDialog dialog;
FFmpegFrameRecorder recorder;
protected void onPreExecute()
dialog = new ProgressDialog(RecordActivity.this);
dialog.setMessage("Genrating video, Please wait.........");
dialog.setCancelable(false);
dialog.show();
;
@Override
protected Void doInBackground(Void... arg0)
File folder = Environment.getExternalStorageDirectory();
String path = folder.getAbsolutePath() + "/DCIM/Camera";
// ArrayList<String> paths = (ArrayList<String>) getListOfFiles(path, "jpg");
long millis = System.currentTimeMillis();
videoPath = path + "/" + "test_sham_"+millis+".3gp";
try
//audio grabber
FrameGrabber grabber2 = new FFmpegFrameGrabber(folder.getAbsolutePath()+"/Samsung/Music/Over_the_horizon.mp3");
//video grabber
FrameGrabber grabber1 = new FFmpegFrameGrabber(path+"/20140527_133034.jpg");
grabber1.start();
grabber2.start();
recorder = new FFmpegFrameRecorder(path
+ "/" + "test_sham_"+millis+".3gp", grabber1.getImageWidth(), grabber1.getImageHeight(),2);
//recorder.setVideoCodec(5);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
// recorder.setVideoCodec(avcodec.AV_CODEC_ID_MP4ALS);
recorder.setFormat("3gp");
// recorder.setFormat("mp4");
recorder.setFrameRate(frameRate);
recorder.setSampleRate(grabber2.getSampleRate());
recorder.setVideoBitrate(30);
startTime = System.currentTimeMillis();
recorder.start();
Frame frame1, frame2 = null;
while ((frame1 = grabber1.grabFrame()) != null ||
(frame2 = grabber2.grabFrame()) != null)
recorder.record(frame1);
recorder.record(frame2);
recorder.stop();
grabber1.stop();
grabber2.stop();
System.out.println("Total Time:- " + recorder.getTimestamp());
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/3gp");
startActivity(intent);
Toast.makeText(RecordActivity.this, "Done:::"+videoPath, Toast.LENGTH_SHORT)
.show();
;
.execute();
供参考:ref1、ref2
【讨论】:
我尝试了您的解决方案,但在这里我收到“org.bytedeco.javacv.FrameRecorder$Exception: avio_open error() error -13”异常。你能帮我解决这个异常吗? 上述问题解决了,现在我使用this-"recorder.setFormat("rtsp");",而不是设置格式为"mp4"。但现在我面临一个新问题。在while循环中,我得到了这个-“致命信号8(SIGFPE)在0x000035be(代码=-6),线程13772(AsyncTask#1)”。如果您对此有解决方案,请帮助我。 您好,我认为您使用的 jar 文件可能有问题,您使用的是什么版本的 jar 文件。请使用上述 jar 文件,以上参考肯定会有所帮助。 目前我使用的是“JavaCV 0.8 二进制包”,希望这是最新的包!!我仍然陷入这个问题。 这个例子有一些问题。但它是实现我所需要的一个很好的指南。其中一个问题是录制需要很长时间才能完成。【参考方案2】:ffmpeg
不附带安卓手机。需要你自己为android编译并部署在设备上。
FFmpeg on Android
【讨论】:
play.google.com/store/apps/… 在 Google Play 上不再可用,请更新您的答案以上是关于将图像组合成音频文件并以编程方式在android中制作视频文件的主要内容,如果未能解决你的问题,请参考以下文章