android - ffmpeg - делает переход между 5 видео

Я хочу создать небольшое приложение для создания слайд-шоу, которое может создавать эффекты, такие как постепенное появление, постепенное исчезновение и кроссфейд между несколькими видео, используя ffmpeg4android.

После нескольких часов исследований я все еще застреваю в кроссфейде. Следуя этому предложению, я могу создать кроссфейд, но он не работает идеально.

Проблема в том, что я хочу объединить 5 видео с эффектом перекрестного затухания между ними, и продолжительность каждого видео составляет 5 секунд. В результате выходной файл составляет всего 5 секунд вместо 25 секунд, и в конце выходного файла появляется эффект перекрестного затухания.

Вот моя команда:

String commandStr = "ffmpeg " +
                "-y " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-filter_complex " +
                "[0:v]setpts=PTS-STARTPTS[v1];" +
                "[1:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(4/TB)[v2];" +
                "[2:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(8/TB)[v3];" +
                "[3:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(12/TB)[v4];" +
                "[4:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(16/TB)[v5];" +
                "[v1][v2]overlay[v12];[v12][v3]overlay[v123];[v123][v4]overlay[v1234];[v1234][v5]overlay,format=yuv420p[v] " +
                "-map [v] " +
                "/sdcard/videokit/result.mp4";

ОБНОВЛЕНИЕ 1: ДОБАВИТЬ ЛОГ

Пожалуйста, загрузите файл журнала здесь

Пожалуйста, дайте мне знать, если я сделал что-то не так в моей команде. Любая помощь будет оценена.

Заранее спасибо!

1 ответ

Моя команда пропустила одно предложение: "color=black:1280x720:d=21[v0];",

D = 21 - общая продолжительность всего видео минус общее время перехода;
d = video1duration + ... video5duration - fadetime*(totalNumberOfVideo - 1),
В моем случае продолжительность каждого видео составляет 5 секунд, и есть 5 видео, время затухания составляет 1 секунду.
d = 5 + 5 + 5 + 5 + 5 - 1*(5-1) = 21

String commandStr = "ffmpeg " +
                "-y " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-i /sdcard/videokit/big_buck.mp4 " +
                "-filter_complex " +
                "color=black:1280x720:d=21[v0];" +
                "[0:v]setpts=PTS-STARTPTS[v1];" +
                "[1:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(4/TB)[v2];" +
                "[2:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(8/TB)[v3];" +
                "[3:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(12/TB)[v4];" +
                "[4:v]format=yuva420p,fade=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+(16/TB)[v5];" +
                "[v0][v1]overlay[v01];[v01][v2]overlay[v012];[v012][v3]overlay[v0123];[v0123][v4]overlay[v01234];[v01234][v5]overlay,format=yuv420p[v] " +
                "-map [v] " +
                "/sdcard/videokit/result.mp4";

Надеюсь, что это может помочь!

Другие вопросы по тегам