使用 ffmpeg 和 xfade 过滤器合并多个视频文件 [英] Merging multiple video files with ffmpeg and xfade filter

查看:56
本文介绍了使用 ffmpeg 和 xfade 过滤器合并多个视频文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将多个视频文件(包含音频)合并为一个视频.我注意到最近发布并使用了 xfade,但我遇到了音频同步问题.

I need to merge multiple video files (with included audio) into a single video. I've noticed xfade has been recently released and used it but I am running into an audio sync issue.

所有视频的视频和音频都采用相同的格式/分辨率/声望和比特率/等.

All videos are in the same format / resolution / fame and bitrate / etc both for video and audio.

这是我使用 0.5 个淡入淡出过渡合并 5 个不同持续时间的视频的方法:

Here is what I am using to merge 5 videos of various durations with 0.5 crossfade transitions:

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

上面的代码生成一个带音频的视频.第一段和第二段与音频对齐,但从第二个过渡开始,声音未对齐.

The code above generates a video with audio. The first and second segment is aligned with audio but starting with the second transition the sound is misaligned.

推荐答案

您的偏移量不正确.试试:

Your offsets are incorrect. Try:

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 值:

How to get xfade offset values:

<头>
输入输入时长+上一个xfade offset-xfade duration偏移量 =
v0.mp44+0-13
v1.mp48+3-110
v2.mp412+10-121
v3.mp45+21-125

这些是与原始问题中显示的持续时间不同的简化示例持续时间.

  • See xfade and acrossfade filter documentation for more info.
  • See FFmpeg Wiki: xfade for a gallery of transition effects and more examples.
  • You can get input durations with ffprobe.

这篇关于使用 ffmpeg 和 xfade 过滤器合并多个视频文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆