video - 使用 ffmpeg 和 xfade 过滤器合并多个视频文件

标签 video ffmpeg concatenation cross-fade

我需要将多个视频文件(包含音频)合并到一个视频中。我注意到 xfade 最近发布并使用了它,但我遇到了音频同步问题。
所有视频的视频和音频格式/分辨率/成名和比特率/等都相同。
这是我用来合并 5 个不同持续时间的视频和 0.5 个交叉淡入淡出过渡的方法:

ffmpeg \
-i v0.mp4 \
-i v1.mp4 \
-i v2.mp4 \
-i v3.mp4 \
-i v4.mp4 \
-filter_complex \
"[0][1]xfade=transition=fade:duration=0.5:offset=3.5[V01]; \
 [V01][2]xfade=transition=fade:duration=0.5:offset=32.75[V02]; \
 [V02][3]xfade=transition=fade:duration=0.5:offset=67.75[V03]; \
 [V03][4]xfade=transition=fade:duration=0.5:offset=98.75[video]; \
 [0:a][1:a]acrossfade=d=0.5:c1=tri:c2=tri[A01]; \
 [A01][2:a]acrossfade=d=0.5:c1=tri:c2=tri[A02]; \
 [A02][3:a]acrossfade=d=0.5:c1=tri:c2=tri[A03]; \
 [A03][4:a]acrossfade=d=0.5:c1=tri:c2=tri[audio]" \
-vsync 0 -map "[video]" -map "[audio]" out.mp4
上面的代码生成一个带音频的视频。第一段和第二段与音频对齐,但从第二个过渡开始,声音未对齐。

最佳答案

您的偏移量不正确。尝试:

ffmpeg -i v0.mp4 -i v1.mp4 -i v2.mp4 -i v3.mp4 -i v4.mp4 -filter_complex \
"[0][1:v]xfade=transition=fade:duration=1:offset=3[vfade1]; \
 [vfade1][2:v]xfade=transition=fade:duration=1:offset=10[vfade2]; \
 [vfade2][3:v]xfade=transition=fade:duration=1:offset=21[vfade3]; \
 [vfade3][4:v]xfade=transition=fade:duration=1:offset=25,format=yuv420p; \
 [0:a][1:a]acrossfade=d=1[afade1]; \
 [afade1][2:a]acrossfade=d=1[afade2]; \
 [afade2][3:a]acrossfade=d=1[afade3]; \
 [afade3][4:a]acrossfade=d=1" \
-movflags +faststart out.mp4
如何获取 xfade offset 值:


输入
输入持续时间
+
以前的 xfade offset-
xfade durationoffset =

v0.mp44
+
0
-
1
3
v1.mp48
+
3
-
1
10
v2.mp412
+
10
-
1
21
v3.mp45
+
21
-
1
25


这些是简化的示例持续时间,与原始问题中显示的持续时间不同。
  • 有关详细信息,请参阅 xfadeacrossfade 过滤器文档。
  • 有关过渡效果库和更多示例,请参见 FFmpeg Wiki: xfade
  • 你可以 get input durations with ffprobe
  • 关于video - 使用 ffmpeg 和 xfade 过滤器合并多个视频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63553906/

    相关文章:

    c - 添加 avfilter 后编译 FFMPEG/libav 代码时出错

    matlab - movie2avi - 如何修复帧大小?

    android - 如何加速 ffmpeg-x264 编码器操作

    android - 考虑到内存限制,android 如何处理播放视频?

    css - 如何在两个 Bootstrap 列设置中缩小或适合移动设备上的视频?

    php - 在目录中查找一个mp4文件,并在php中转换为mp3后将其发送到不同的目录?

    javascript - Javascript 数组中的动态串联

    audio - 使用Praat脚本,我如何通过静默方式分割wav文件,然后将语音剪辑连接成较小的wav文件?

    c - 将 unsigned char* 附加到 unsigned char*

    iphone - iPhone 应用程序中的 YouTube 视频完成通知