【问题标题】:FFMPEG:Multiple Image frames + 1 Audio =1 VideoFFMPEG:多个图像帧 + 1 个音频 =1 个视频
【发布时间】:2013-12-26 03:42:55
【问题描述】:

我正在使用这个库Android-MJPEG-Video-Capture-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??

【问题讨论】:

  • 我认为您应该在输出文件名之前添加选项映射,例如:-map [0:v] -map [1:a]
  • “不工作”永远不如实际的控制台输出有用。
  • @LordNeckbeard 我试过这样 "/data/data/com.mobvcasting.mjpegffmpeg/ffmpeg", "-i", VIDEOPATH + "audio.3gp", "-i", TEMPIMAGEPATH + "frame_%05d.jpg", /* * "-acodec", "copy", * "-vcodec", "mpeg4" */ "-r", "" + p.getPreviewFrameRate(), "-b", “1000000”、“-shortest”、VIDEOPATH + “video.mkv” 它给了我视频但音频不来..我被困在这里请帮帮我..
  • @ptQa 我尝试过使用地图,但它说地图无法识别
  • 当“地图无法识别”时,您到底要执行什么操作?

标签: android audio video ffmpeg


【解决方案1】:

我在应用了很多技巧后找到了解决方案。

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);
    }

我希望这对其他人有帮助。谢谢!

【讨论】:

  • @kalyanpvs,你的问题怎么了?
  • @ArslanAhmad,您需要下载 ffmpeg 库并导入 eclipse。然后添加到所需项目。把上面的函数放到ffmpeg项目中。
  • 是的,我已经导入了这个库。但我认为 ffmpegBin 类似于变量。
  • String ffmpegBin = new File(Path,"ffmpeg").getAbsolutePath(); Runtime.getRuntime().exec("chmod 700 " +ffmpegBin);字符串[] ffmpegCommand=新字符串[]{ ffmpegBin, "-h" };我认为 ffmpeg 应该这样声明
  • @Kalyan,Jagdish,Arslam Ahmad,我也有“多个图像帧 + 1 音频 =1 视频”的完全相同的要求。我也得到了没有音频的视频。调用函数时我应该将哪个值传递给“ShellCallback sc”?谁能帮我解决它?提前致谢!!!
【解决方案2】:

从 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"

【讨论】:

    【解决方案3】:

    尝试使用以下命令,它应该可以处理多个图像 图书馆 - 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
    

    祝你好运

    【讨论】:

      【解决方案4】:
         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};
      

      你可以试试这个命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 2018-02-19
        • 1970-01-01
        • 2019-07-08
        • 2020-11-16
        • 2019-01-28
        • 2023-03-29
        相关资源
        最近更新 更多