【发布时间】:2021-02-18 02:39:11
【问题描述】:
我在使用 xfade 和 crossfade 将 12 个视频连接在一起并保留音频时遇到问题。当我忽略音频流并仅应用 xfade 过滤器时,视频编码就好了。否则,过渡会挂起,并且音频会提前开始。
这是我的 filter_complex:
[0:v][1:v]xfade=transition=pixelize:duration=0.5:offset=3.042[V1];
[0:a][1:a]acrossfade=d=0.5[A1];
[V1][2:v]xfade=transition=pixelize:duration=0.5:offset=6.084[V2];
[A1][2:a]acrossfade=d=0.5[A2];
[V2][3:v]xfade=transition=pixelize:duration=0.5:offset=9.108[V3];
[A2][3:a]acrossfade=d=0.5[A3];
[V3][4:v]xfade=transition=pixelize:duration=0.5:offset=23.619[V4];
[A3][4:a]acrossfade=d=0.5[A4];
[V4][5:v]xfade=transition=pixelize:duration=0.5:offset=38.13[V5];
[A4][5:a]acrossfade=d=0.5[A5];
[V5][6:v]xfade=transition=pixelize:duration=0.5:offset=52.641[V6];
[A5][6:a]acrossfade=d=0.5[A6];
[V6][7:v]xfade=transition=pixelize:duration=0.5:offset=67.152[V7];
[A6][7:a]acrossfade=d=0.5[A7];
[V7][8:v]xfade=transition=pixelize:duration=0.5:offset=70.176[V8];
[A7][8:a]acrossfade=d=0.5[A8];
[V8][9:v]xfade=transition=pixelize:duration=0.5:offset=84.687[V9];
[A8][9:a]acrossfade=d=0.5[A9];
[V9][10:v]xfade=transition=pixelize:duration=0.5:offset=99.198[V10];
[A9][10:a]acrossfade=d=0.5[A10];
[V10][11:v]xfade=transition=pixelize:duration=0.5:offset=113.709[video];
[A10][11:a]acrossfade=d=0.5[audio];
转换持续时间为 0.5 秒,输入长度为从 ffprobe 读取的(格式持续时间):
0: 3.542
1: 3.542
2: 3.524
3: 15.011
4: 15.011
5: 15.011
6: 15.011
7: 3.524
8: 15.011
9: 15.011
10: 15.011
11: 15.011
据我了解,xfade 滤镜的偏移量应该是视频时长加上之前的偏移量减去过渡时长,对吧?那么这里出了什么问题呢?
3.542 - 0.5 = 3.042
3.042 + 3.542 - 0.5 = 6.084
6.084 + 3.524 - 0.5 = 9.108
...
【问题讨论】:
-
可能音轨长度不相等?运行
ffprobe -v error -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input1.mp4所以,你必须添加[0:a]atrim=0:3.542[0a]; -
@БаярГончикжапов 感谢您的回答。实际上有两个剪辑的音频流比视频流长。我调整了那个。但问题依然存在。
-
确保 xfade 持续时间 + 偏移量最多等于第一个输入持续时间。有时,它可能会超过一点。在这种情况下。减少偏移量或持续时间。此外,使用 apad 和 atrim 确保所有音频流的持续时间与相应的视频流相同。
-
@Gyan 仅用于第一个输入?
-
在每个 xfade 实例中,是的。
标签: javascript node.js ffmpeg fluent-ffmpeg