大家好,我在使用 xfade concat 时遇到了一些问题。
我有 4 个视频:
第一有20秒。
第二个有6秒。
第三有5秒。
第四名9秒。
全部的:40秒。
ffmpeg -y -c:v h264_cuvid -i 0.mp4 -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex " [0][1]xfade=transition=fade:duration=1:offset=20,format=yuv420p[1v];[1v][2]xfade=transition=fade:duration=1:offset=26,format=yuv420p[2v];[2v][3]xfade=transition=fade:duration=1:offset=31,format=yuv420p[v] " -c:v h264_nvenc -b:v 10M -r 25 -map "[v]" finalVideo.mp4
通过这个命令我设法获得了 40 秒的视频,但它在中间被阻挡了,所以它不起作用。
ffmpeg -y -c:v h264_cuvid -i 0.mp4 -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex " [0][1]xfade=transition=fade:duration=1:offset=19,format=yuv420p[1v];[1v][2]xfade=transition=fade:duration=1:offset=24,format=yuv420p[2v];[2v][3]xfade=transition=fade:duration=1:offset=29,format=yuv420p[v] " -c:v h264_nvenc -b:v 10M -r 25 -map "[v]" finalVideo.mp4
使用第二条命令,我设法让它工作,但现在它有 38 秒。那么秒数去哪儿了?我使用了这个工具,https://romander.github.io/ffmpeg-script-generator/
https://i.stack.imgur.com/LA2se.png
但还是不太好。
我想要 40 秒的过渡时间。
这是另一次尝试@llogan
答案1
xfade 过渡耗时
转变淡入淡出占用时间,因此输出持续时间不会等于输入持续时间的总和。
简单举例:每个输入时长 3 秒,视频重叠处的淡入淡出过渡时长 1 秒。结果是 5 秒的输出。
12345
===
===
在每个视频结尾添加定格画面
您可以使用平板过滤器添加更多时间到视频中以牺牲淡入淡出。但由于定格效果,结果可能看起来很奇怪。
ffmpeg -i input0.mp4 -i input1.mp4 -filter_complex "[0:v]tpad=stop_mode=clone:stop_duration=1[v0];[v0][1:v]xfade=transition=fade:duration=1:offset=10" output.mp4
使用淡入淡出 + 连接滤镜
如果你想避免输出持续时间较短,那么另一种方法是使用黑色淡入淡出(或你想要的任何颜色)褪色过滤并连接连接筛选:
ffmpeg -i 20sec.mp4 -i 6sec.mp4 -i 5sec.mp4 -i 9sec.mp4 -filter_complex "[0]fade=t=out:st=19.5:d=0.5[fade1];[1]fade=t=in:st=0:d=0.5,fade=t=out:st=5.5:d=0.5[fade2];[2]fade=t=in:st=0:d=0.5,fade=t=out:st=4.5:d=0.5[fade3];[3]fade=t=in:st=0:d=0.5[fade4];[fade1][fade2][fade3][fade4]concat=n=4:v=1:a=0" output.mp4