我想制作一个小型幻灯片应用程序,它能够通过使用ffmpeg4android在多个视频之间做出一些效果,例如淡入淡出,淡出和在多个视频之间进行交叉。
几个小时的研究后,我仍然被困在Crossfade上。遵循此建议,我能够创建一个Crossfade,但它不能完美地工作。
问题在于,我想将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:添加日志
请在此处下载日志文件
如果我在命令中做错了什么,请告诉我。任何帮助将不胜感激。
预先感谢您!
我的命令错过一个句子: "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";
希望它能有所帮助!