ffmpeg -i /storage/emulated/0/DCIM/Camera/aacb.mp4 -i /storage/emulated/0/DCIM/Camera/ty.mp4 -filter_complex [0:v][1:v]xfade=transition=circlecrop:duration=1000ms:offset=13766ms,format=yuv420p;[0:a][1:a]acrossfade=d=1 -movflags faststart -threads 5 -preset ultrafast -strict -2 -vcodec libx265 -y /storage/emulated/0/DCIM/Camera/aac0.mp4
使用android ffmepg xfade进行视频拼接时添加转场滤镜,在接入过程中出现两个视频拼接滤镜,第二个视频没有声音的情况,经过查询[0:a][1:a]acrossfade=d=1这段命令非常关键,以上命令是完整的解决了第二个视频无声音的情况。
还有个重要的问题是对于duration和offset的理解,这两个时间总和小于等于第一个视频的时间xfade的滤镜特效才能有效呈现出来,如果offset超过了第一个视频的时间长度,那么xfade的滤镜特效就会被忽略,总之v1:duration=xfade:duration+xfade:offset。
特别提醒:使用xfade滤镜的所有视频的帧率、dar、sar、时间基一致,音频的采样率和时间基一致。
可以使用scale和setdar、-r来设置视频的输出宽高、显示宽高、帧率。
参考代码:
ffmpeg -i /storage/emulated/0/DCIM/Camera/aacb.mp4 -i /storage/emulated/0/DCIM/Camera/ccc.mp4 -filter_complex [1:v]scale=-1:1080,pad=1920:1080:(1920-iw)/2:0:black[v1];[0:v][v1]xfade=transition=circlecrop:duration=1000ms:offset=13766ms,format=yuv420p;[0:a][1:a]acrossfade=d=1 -movflags faststart -threads 5 -preset ultrafast -strict -2 -vcodec libx265 -y /storage/emulated/0/DCIM/Camera/aac0.mp4