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";
Надеюсь, что это может помочь!