所以,我想并排放置 2 个视频。我想通过我知道的每个视频的帧号来对齐它们,假设两个视频具有相同的 FPS。使用以下命令找到帧号。
ffmpeg -i "input.mp4" "output/%08d.jpg"
所以,假设我知道视频 A 想要对齐的帧号是 126,而视频 B 的帧号是 179。我想将视频并排对齐,使这两个帧对齐,这样生成的视频将与视频 B 帧 179 同时显示视频 A 帧 126。生成的视频也不应删除任一视频中的任何片段,因此如果其中一个视频尚未开始或未完成,生成的视频会继续播放事件视频,而不是仅播放两个视频应该播放的时间。我还想对齐两个音轨。
对于这个问题,我更喜欢单命令解决方案,我只需要输入要对齐的视频和帧编号,而不必手动执行多个步骤。
最佳答案
使用
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 中将
和 [1]
与 [0]
切换adelay
以及 [0]
以及 hstack 和 amix 中的 [1]
。
由于音频帧速率不同,您必须提供时间值dt
(以毫秒为单位)。 25 fps 的视频的 53 帧视频延迟对应于音频延迟 53/25 = 2.12 (s) = 2120 (ms)
由于 hstack
的工作原理。延迟视频的第一帧将显示为卡住状态,直到开始播放为止。对于首先完成的视频的最后一帧也是如此。 hstack过滤器还要求两个视频的高度尺寸相同。
关于video - 并排放置 FFMPEG 视频,按帧编号对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598871/