簡體   English   中英

FFMPEG:多個圖像幀+ 1音頻= 1視頻

[英]FFMPEG:Multiple Image frames + 1 Audio =1 Video

我正在使用這個庫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??

在應用了很多技巧之后,我找到了解決方案。

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 /存儲/仿真/0/images.jpg -i /存儲/仿真/0/rec.wav -acodec aac -vcodec mpeg4 -s 480 * 320 -f mp4 -r 2 /存儲/仿真/ 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};

你可以嘗試這個命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM