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



我正在使用这个库Android MJPEG视频捕获FFMPEG,并使用相机获取帧。。我正在为这个使用下面的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);
    }

我希望这能帮助其他人。谢谢

根据jagadish的回答,我尝试了这样的命令,这对我有效。

-y-i/storage/semulated/0/images.jpg-i/storage/semulated/0/rec.wav-acodec aac-vcodec mpeg4-s 480*320-f mp4-r 2/storage/semulate/0/result.mp4"

尝试使用以下命令,它应该可以处理多个图像图书馆-https://github.com/WritingMinds/ffmpeg-android-java

这里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};

你可以试试这个命令。

最新更新