2016-06-23 4 views
0

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

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

Проблема в том, что я хочу объединить 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"; 

UPDATE 1: ADD LOG

Please download the log file here

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

Спасибо заранее!

+0

Я думаю, что знаю проблему. Я отредактировал первую команду в ответе, с которым вы связались. Попробуй это. – Mulvya

+0

@Mulvya: Я изменил команду, но результат все тот же. ffmpeg4android не может распознать «\» и «» », поэтому я удаляю их из вашей команды. Повреждают ли они какие-либо проблемы? – LuongTruong

+0

Запустите команду с сообщением' -report' и обменивайтесь созданным файлом журнала. – Mulvya

ответ

0

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

D = 21 - общая продолжительность всего видео минус общее время перекрестного перерыва:
d = video1duration + ... video5duration - fadetime*(totalNumberOfVideo - 1).
В моем случае продолжительность каждого видео составляет 5 секунд, а 5 видеороликов, fadetime - 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[v];[v][v5]overlay,format=yuv420p[v] " + 
       "-map [v] " + 
       "/sdcard/videokit/result.mp4"; 

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

+0

Так как это работает для вас, хорошо, но не обязательно. – Mulvya

+0

@Mulvya: После проверки, я понимаю, что результат видео воспроизводится без звука. Можете ли вы дать мне какое-нибудь предложение, пожалуйста? Я хочу сохранить аудио-видео. – LuongTruong

+0

Используйте вторую команду в этом [ответе] (http://stackoverflow.com/a/37812010/5726027). – Mulvya