所以,我有两个视频,我想放在一起。我想通过我知道的每个视频的帧数来对齐它们,假设两个视频具有相同的FPS。使用以下命令找到帧编号。
ffmpeg -i "input.mp4" "output/%08d.jpg"
因此,假设我知道视频A的帧号是126,而视频B的帧号是179。我希望将视频与这两个帧并排对齐,这样生成的视频将在显示视频A帧126的同时显示视频B帧179。生成的视频也不应该从这两个视频中删除任何片段,所以如果其中一个视频没有开始或没有结束,结果视频将继续播放活动视频,而不是只有两个视频都应该播放的时间。我也想同时对齐两个音轨。
对于这个问题,我更喜欢单命令解决方案,在这种解决方案中,我只需要输入我想要对齐的视频和帧编号,而不是必须手动执行几个步骤。
发布于 2017-03-05 02:19:34
使用
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
。我的命令将视频和音频延迟应用到第二个输入,所以要么按该顺序输入它们,要么在setpts
中使用[0]
切换[1]
,在hstack和amix中切换[0]
和[1]
。
由于音频帧速率不同,您必须提供以毫秒为单位的时间值dt
。对于25fps的视频,53帧视频延迟对应于53/25 = 2.12 (s) = 2120 (ms)
的音频延迟
由于hstack
的工作方式。延迟视频的第一帧将看起来是冻结的,直到它开始播放。首先完成的视频的最后一帧也是如此。hstack过滤器还要求两个视频的高度维度相同。
https://stackoverflow.com/questions/42598871
复制相似问题