2013-12-09 95 views
2

我使用这个库Android-MJPEG-Video-Capture-FFMPEG并获得与使用camera..I框架正在使用以下命令FFMPEG此FFMPEG:多个图像帧+ 1音频= 1视频

String[] ffmpegCommand = { 
        "/data/data/com.mobvcasting.mjpegffmpeg/ffmpeg", "-r", 
        "" + p.getPreviewFrameRate(), "-b", "1000000", 
        "-vcodec", "mjpeg", "-i", 
        TEMPIMAGEPATH + "frame_%05d.jpg", "-i", 
        VIDEOPATH + "video.mov" }; 

其工作的罚款。 。而获得帧我也记录我想添加音频输出video..I的audio.now试图用这个命令,但它不工作..

String[] ffmpegCommand = { 
        "/data/data/com.mobvcasting.mjpegffmpeg/ffmpeg", "-r", 
        "" + p.getPreviewFrameRate(), "-b", "1000000", 
        "-vcodec", "mjpeg", "-acodec", "copy", "-i", 
        TEMPIMAGEPATH + "frame_%05d.jpg", "-i", 
        VIDEOPATH + "audio.mp4", VIDEOPATH + "video.mov" }; 

在谷歌搜索,但没有工作的解决方案找到..

问题::

what is the correct command for combining audio and frames into video?? 
+0

我想你应该输出文件名前添加选项地图,如: -map [0:v] -map [1:a] – ptQa

+0

“不工作”不如实际控制台输出有用。 – LordNeckbeard

+0

@LordNeckbeard我已经试过这样 \t \t \t \t \t \t “/data/data/com.mobvcasting.mjpegffmpeg/ffmpeg”, “-i”, \t \t \t \t \t \t将videoPath + “audio.3gp” “-i”, \t \t \t \t \t \t TEMPIMAGEPATH +“frame_%05d。JPG”/* \t \t \t \t \t \t \t \t \t \t \t \t \t \t * “-acodec”, “复制”, \t \t \t \t \t \t \t \t \t \t \t \t \t \t * “-vcodec” ,“mpeg4” \t \t \t \t \t \t \t \t \t \t \t \t \t \t */ \t \t \t \t \t \t “-R” “” + p.getPreviewFrameRate(), \t \t \t \t \t \t “-b”, “1000000” ,“-shortest”,VIDEOPATH +“video.mkv”它给我的视频,但音频不会来..我卡在这里帮我请.. –

回答

6

我发现后应用很多花样的解决方案。

public void myFunction(ShellCallback sc, String imgPath, String audioPath, String outPath) throws IOException, InterruptedException 
    { 

     Log.e("MyFunction","audioPath"+audioPath); 
     Log.e("MyFunction","imagePath"+imgPath); 
     ArrayList<String> cmd = new ArrayList<String>(); 

     cmd = new ArrayList<String>(); 

     cmd.add(ffmpegBin); 
     cmd.add("-y"); 
     cmd.add("-loop"); 
     cmd.add("1"); 
     cmd.add("-r"); 
     cmd.add("1"); 
     cmd.add("-i"); 
     cmd.add(new File(imgPath).getCanonicalPath()); 
     cmd.add("-i"); 
     cmd.add(new File(audioPath).getCanonicalPath()); 
     cmd.add("-acodec"); 
     cmd.add("aac"); 
     cmd.add("-vcodec"); 
     cmd.add("mpeg4"); 
     cmd.add("-s"); 
     cmd.add("480x320"); 
     cmd.add("-strict"); 
     cmd.add("experimental"); 
     cmd.add("-b:a"); 
     cmd.add("32k"); 
     cmd.add("-shortest"); 
     cmd.add("-f"); 
     cmd.add("mp4"); 
     cmd.add("-r"); 
     cmd.add("2"); 
     File fileOut = new File(outPath); 
     cmd.add(fileOut.getCanonicalPath()); 

     execFFMPEG(cmd, sc); 
    } 

我希望这可以帮助others.Thanks!

+0

音频是上面的代码? –

+0

yes.audio路径,图像路径,outpath。 – jagdish

+0

好的..我会尝试它..并告诉你..谢谢你的支持.. –

1

从jagadish的答案,我试过这样的命令,这对我有用。

-y -i /storage/emulated/0/images.jpg -i /storage/emulated/0/rec.wav -acodec AAC -vcodec MPEG4 -s 480 * 320 -f MP4 -r 2 /存储/模拟/ 0/result.mp4"

0

与下面的命令试试应该与多个图像工作 图书馆 - https://github.com/WritingMinds/ffmpeg-android-java

这里测试$ 04d.png是指一系列图像像test0001.png,test0002.png等。请确保您有相同名称的图像约定为你的形象的名字

ffmpeg -r 1/5 -i /storage/emulated/0/Pictures/Screenshots/test%04d.png -c:v libx264 -vf fps=20 -pix_fmt yuv420p /storage/emulated/0/Movies/out.mp4 

随着音乐文件

ffmpeg -r 1/5 -i /storage/emulated/0/Pictures/Screenshots/test%04d.png -i /storage/emulated/0/Pictures/Screenshots/music.mp3 -c:v libx264 -vf fps=20 -pix_fmt yuv420p /storage/emulated/0/Movies/out.mp4 

好运