FFMPEG: несколько кадров изображения + 1 аудио = 1 видео

2 kalyan pvs [2013-12-09 08:23:00]

Я использую эту библиотеку 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" };

поиск в google, но не найдено никаких рабочих решений.

ВОПРОС: :

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

android ffmpeg video audio


3 ответа


6 jagdish [2014-01-23 12:46:00]

Я нашел решение после применения множества трюков.

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

Я надеюсь, что это может помочь другим. Спасибо!


1 Phani varma [2016-05-24 10:48:00]

Из 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"


0 Nagendra Badiganti [2017-10-22 14:08:00]

Попробуйте выполнить команду ниже, чтобы она работала с несколькими изображениями Библиотека - 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

Удачи.