FFmpeg масштабирует и накладывает несколько изображений / gif на изображение в проблеме с Android?

Я пытаюсь разместить несколько изображений/gif на изображении. Я пытался поместить один gif на изображение или видео, и он отлично работал, но не мог работать с несколькими изображениями с одновременным масштабированием. Пробовал код ниже, но получил ошибку:

        String[] command=new String[13];
        command[0]="-i";
        command[1]=input;
        command[2]="-i";
        command[3]=thumbnail2;
        command[4]="-i";
        command[5]=thumbnail;
        command[6]="filter_complex";
        command[7]="[0:v]scale=0:0[base]";
        command[8]="[1:v]scale=30:-1[img1]";
        command[9]="[2:v]scale=3000:-1[img2]";
        command[10]="[base][img1]overlay=70:70[tmp1]";
        command[11]="[tmp1][img2]overlay=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2[out]";

        command[12]="/storage/emulated/0/Pictures/logo-2000.gif";
        fFmpeg.execute(command,
                new ExecuteBinaryResponseHandler() {

                    @Override
                    public void onStart() {
                        //for logcat
                        Log.w(TAG,"Cut started");
                    }

                    @Override
                    public void onProgress(String message) {
                       Log.w(TAG,message.toString());
                    }

                    @Override
                    public void onFailure(String message) {

                        Log.w(TAG,message.toString());
                        Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_SHORT).show();

                    }

                    @Override
                    public void onSuccess(String message) {

                        Log.w(TAG,message.toString());
                        Toast.makeText(getApplicationContext(),"sucessfully saved",Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onFinish() {

                        Log.w(TAG,"Cutting video finished");
                    }
                });

Ошибка, которую я получаю:

[NULL @ 0xb6591800] Не удалось найти подходящий формат вывода для 'filter_complex' filter_complex: неверный аргумент

Поскольку я новичок в ffmpeg, пожалуйста, помогите мне решить проблему, я просто хочу масштабировать и накладывать несколько изображений одновременно.


person Shweta Patil    schedule 03.12.2019    source источник


Ответы (1)


Тебе нужно:

  1. Используйте -filter_complex вместо filter_complex
  2. передать цепочку фильтров как один аргумент в -filter_complex

Итак, вместо:

...
command[6]="filter_complex";
command[7]="[0:v]scale=0:0[base]";
command[8]="[1:v]scale=30:-1[img1]";
...

Do:

...
command[6]="-filter_complex";
command[7]="[0:v]scale=0:0[base];[1:v]scale=30:-1[img1];...";
...

Как видите, все фильтры нужно указать в одном пункте.

person slhck    schedule 04.12.2019
comment
Tysm, попробовал код. Он работает отлично. Что, если мне нужно указать угол для каждого входа? - person Shweta Patil; 04.12.2019
comment
Я не уверен, что вы имеете в виду, указав угол. Вы хотите повернуть ввод? Используйте фильтр чередования: ffmpeg.org/ffmpeg-filters.html#rotate. - person slhck; 04.12.2019