FFMPEG для Android не работает должным образом при наложении изображения - PullRequest
1 голос
/ 12 марта 2020

Всякий раз, когда я запускаю эту команду FFMPEG на Android для наложения изображения на видео с использованием библиотеки FFMpeg Android :

 "-i",
                realPathVideo,
                "-i",
                realPathImage
                ,
                "-filter_complex",
                "overlay=0:0",
                "-codec:a",
                "copy",
                dest.getAbsolutePath()

, она фактически никогда не работает, так как она всегда заканчивается "onFinish" и никогда "onSuccess". Я не знаю почему, но почему-то эта команда не работает должным образом, хотя она никогда не показывает мне сообщение об ошибке. Чтобы убедиться, что параметры верны, я покажу вам, как их получить:

realpathvideo: /storage/emulated/0video.mp4 realpathimage: /storage/emulated/0/VideoOverlay.jpg Выходной каталог: /storage/emulated/0/appname/temporaryVideoFileWithOverlay.mp4

Вывод realPathVideo из файла, созданного путем перемещения результата действия камеры во внешнее хранилище с помощью метода:

public static void copyFile(File src, File dst) throws IOException
{
    FileChannel inChannel = new FileInputStream(src).getChannel();
    FileChannel outChannel = new FileOutputStream(dst).getChannel();
    try
    {
        inChannel.transferTo(0, inChannel.size(), outChannel);
    }
    finally
    {
        if (inChannel != null)
            inChannel.close();
        if (outChannel != null)
            outChannel.close();
    }
}

, где sr c - это результат видео, сохраненный во внутреннем хранилище, и dst файл внешнего хранилища.

Файл наложения растрового изображения сохраняется следующим образом:

realpathImage получен из файла растрового изображения, сохраненного с помощью:

    private Uri saveOverlay(Bitmap bitmap) {
    File file;
    // Get the external storage directory path
    String path = Environment.getExternalStorageDirectory().toString();
    // Create a file to save the image
    file = new File(path, "VideoOverlay" + ".jpg");

    try {

        OutputStream stream = null;

        stream = new FileOutputStream(file);

        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);

        stream.flush();


        stream.close();

    } catch (IOException e) // Catch the exception
    {
        e.printStackTrace();
    }

    // Parse the saved image path to uri
    Uri savedImageURI = Uri.parse(file.getAbsolutePath());
    return savedImageURI;
}
...