Android FFMPEG:多图像帧+;1个音频=1个视频

Android FFMPEG:多图像帧+;1个音频=1个视频,android,audio,video,ffmpeg,Android,Audio,Video,Ffmpeg,我正在使用这个库来获取和使用相机获取帧。我正在使用下面的FFMPEG命令来实现这一点 String[] ffmpegCommand = { "/data/data/com.mobvcasting.mjpegffmpeg/ffmpeg", "-r", "" + p.getPreviewFrameRate(), "-b", "1000000", "-vcodec", "mjpeg"

我正在使用这个库来获取和使用相机获取帧。我正在使用下面的FFMPEG命令来实现这一点

String[] ffmpegCommand = {
                    "/data/data/com.mobvcasting.mjpegffmpeg/ffmpeg", "-r",
                    "" + p.getPreviewFrameRate(), "-b", "1000000",
                    "-vcodec", "mjpeg", "-i",
                    TEMPIMAGEPATH + "frame_%05d.jpg", "-i",
                    VIDEOPATH + "video.mov" };
工作正常..在获取帧的同时,我也在录制音频。现在我想将音频添加到输出视频..我已尝试使用此命令,但不起作用

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??

我在运用了很多技巧后找到了解决办法

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);
    }
public void myFunction(shell回调sc、字符串imgPath、字符串音频路径、字符串输出路径)抛出IOException、InterruptedException
{
Log.e(“MyFunction”、“audioPath”+audioPath);
Log.e(“MyFunction”、“imagePath”+imgPath);
ArrayList cmd=新的ArrayList();
cmd=newarraylist();
命令添加(ffmpegBin);
命令添加(“-y”);
cmd.add(“-loop”);
命令添加(“1”);
命令添加(“-r”);
命令添加(“1”);
cmd.添加(“-i”);
cmd.add(新文件(imgPath.getCanonicalPath());
cmd.添加(“-i”);
cmd.add(新文件(audioPath.getCanonicalPath());
命令添加(“-acodec”);
命令添加(“aac”);
命令添加(“-vcodec”);
命令添加(“mpeg4”);
cmd.添加(“-s”);
命令添加(“480x320”);
cmd.添加(“-strict”);
cmd.添加(“实验”);
命令添加(“-b:a”);
命令添加(“32k”);
cmd.添加(“-shortest”);
cmd.添加(“-f”);
命令添加(“mp4”);
命令添加(“-r”);
命令添加(“2”);
File fileOut=新文件(输出路径);
cmd.add(fileOut.getCanonicalPath());
execFFMPEG(cmd,sc);
}

我希望这可以帮助其他人。谢谢

从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/storage/emulated/0/result.mp4“


尝试使用下面的命令,它应该可以处理多个图像 图书馆-

此处test$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
祝你好运

   inputCode = new String[]{FileUtils.getFFmpeg(getApplicationContext()),
                "-y", "-r", "15", "-i", ImageListDirectory + "",
                "-i", Environment.getExternalStorageDirectory() + "/" + "MusuicFile.mp3", "-shortest",
                "-c:v", "libx264", "-pix_fmt", "yuv420p", "-c:a", "aac", Outputpath};

您可以尝试此命令。

我认为您应该在输出文件名之前添加选项map,例如:-map[0:v]-map[1:a]“不工作”永远不会像实际控制台输出那样有用。@LordNeckbeard我曾经这样尝试过“/data/data/com.mobvcasting.mjpegffmpeg/ffmpeg”、“-I”、VIDEOPATH+“audio.3gp”、“-I”、TEMPIMAGEPATH+”frame_uu%05d.jpg“,/**”-acodec“,”copy“,*”-vcodec“,”mpeg4“*/”-r“,”+p.getPreviewFrameRate(),”-b“,”1000000“,”最短“,”VIDEOPATH+”video.mkv“它给了我视频,但没有音频..我被困在这里请帮帮我..@ptQa我试过map,但它说map不被识别。当“map不被识别”时,你到底想执行什么?你找到解决方案了吗?@kalyanpvs,你的问题发生了什么事?@ArslanAhmad,您需要下载ffmpeg库并导入eclipse。然后添加到desire项目。将上述函数放在ffmpeg项目中。是的,我已经导入了这个库。但我认为ffmpegBin类似于变量。字符串ffmpegBin=新文件(路径,“ffmpeg”).getAbsolutePath();Runtime.getRuntime().exec(“chmod 700”+ffmpegBin);字符串[]ffmpegCommand=新字符串[]{ffmpegBin,“-h”};我认为ffmpeg应该这样声明