Низкая точность обрезки FFmpeg

Итак, я пытаюсь разрезать видео продолжительностью 1 минуту 29 секунд на клипы по 30 секунд каждый. Ожидаемый результат: 30сек, 30сек, 29сек. Результат 35сек,29сек,23сек.

Это мой код -

 ArrayList<String> commandList = new ArrayList<>();
            commandList.add("-ss");
            commandList.add("00:00:00");
            commandList.add("-i");
            commandList.add(videoPath);
            commandList.add("-c");
            commandList.add("copy");
            commandList.add("-f");
            commandList.add("segment");
            commandList.add("-segment_time");
            commandList.add("00:00:30");
            commandList.add(TEST.getAbsolutePath());
            String[] command  = commandList.toArray(new String[commandList.size()]);
            execFFmpegBinary(command);

Любая идея, что я делаю неправильно? Я где-то читал, что если в определенной позиции ключевой кадр не существует, он ищет позицию ближайшего ключевого кадра.

Любое решение или руководство поможет мне. Заранее спасибо.


person Rektirino    schedule 02.02.2019    source источник


Ответы (1)


FFmpeg будет запускать сегменты на ключевых кадрах. При использовании -codec copy перекодирования нет, поэтому необходимо использовать существующие ключевые кадры. На 30-й секунде нет ключевого кадра, поэтому он обрывается на следующем.

person szatmary    schedule 02.02.2019
comment
Спасибо. В любом случае, чтобы исправить это? - person Rektirino; 03.02.2019
comment
Я удалил -c copy, но на обрезку видео уходит много времени. - person Rektirino; 03.02.2019
comment
Да, транскодирование медленное. - person szatmary; 03.02.2019
comment
Есть ли альтернатива для этого? Я пытался использовать -preset ultrafast, но бесполезно. - person Rektirino; 03.02.2019
comment
Будет ли эффективно, если я запущу эту команду — -t 30 (в цикле) вместо использования сегментов? - person Rektirino; 03.02.2019
comment
Например, сначала я буду запускать цикл от 0 до 30 секунд, затем от 31 до 60 и так далее до конца видео. - person Rektirino; 03.02.2019