2017-03-04 201 views
0

allign所以,我有2个视频,我想并排放置一边。我想按照我认识的每个视频的帧编号来对齐它们,假设两个视频具有相同的FPS。帧号是使用以下命令找到的。将FFMPEG视频并排,通过帧数

ffmpeg -i "input.mp4" "output/%08d.jpg" 

所以,让我们说,我知道帧数我要对齐视频A是126,而对于视频B中的帧数是179.我想这两个帧排队对齐并排视频侧使得所得到的视频将与视频B帧179同时显示视频A帧126.所得视频也不应该从任一视频中移除任何片段,因此如果其中一个视频尚未开始或没有完成,所得到的视频继续播放活动视频,而不是只有两个视频都应该播放的时间。我也想同时对齐两个音轨。

对于这个问题,我希望能有一个单指令解决方案,我只需要输入我要对齐,而不是手工完成几个步骤的视频,帧数。

+0

两个视频都是恒定帧率吗? – Mulvya

+0

@Mulvya是的,他们都有相同的帧率。 –

回答

1

使用

ffmpeg -i a.mp4 -i b.mp4 
-filter_complex 
    "[1]setpts=PTS-STARTPTS+d/FRAME_RATE/TB[b]; 
    [0][b]hstack[v]; 
    [1]adelay=dt|dt[ba]; 
    [0][ba]amix[a]" 
-map "[v]" -map "[a]" out.mp4 

d必须通过在帧对齐的差来替换,并且被施加到后面将开始播放视频。在你的Q中,A的#126将与B的#179对齐,所以A被延迟53帧,所以d=53。我的命令将视频和音频延迟应用于第二个输入,因此要么按照该顺序馈送它们,要么将[1][0]setptsadelay[0]中以[1]切换为hstack和amix。

由于音频帧速率是不同的,你将不得不在提供毫秒的时间值dt。对于25fps的视频,53帧视频延迟对应于53/25 = 2.12 (s) = 2120 (ms)的音频延迟

由于hstack的工作原理。延迟视频的第一帧将显示为冻结状态,直到它开始播放为止。首先完成的视频的最后一帧也一样。 hstack过滤器还要求两个视频的高度尺寸相同。

+0

好的,如果视频A首先启动,我会怎么做,所以帧的差异是负面的? –

+0

我在第一段说明了这一点。 – Mulvya

+0

好的,我得到这个错误: [Parsed_adelay_2 @ 0x77b8c0]的至少一个延迟>必须指定0。 [Parsed_adelay_2 @ 0x77b8c0]无法配置于Parsed_adelay_2 错误配置复杂的滤波器输入垫。 无效参数 此外,是否有应该是在命令中的反斜线?我在Bash上运行它。 –