Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 并排放置FFMPEG视频,按帧数对齐_Video_Ffmpeg - Fatal编程技术网

Video 并排放置FFMPEG视频,按帧数对齐

Video 并排放置FFMPEG视频,按帧数对齐,video,ffmpeg,Video,Ffmpeg,所以,我有两个视频,我想并排放置。假设两个视频具有相同的FPS,我想按照我知道的每个视频的帧数将它们对齐。使用以下命令找到帧编号 ffmpeg -i "input.mp4" "output/%08d.jpg" 假设我知道视频A的帧号是126,而视频B的帧号是179。我想将视频与这两个帧并排对齐,这样生成的视频将同时显示视频A帧126和视频B帧179。生成的视频也不应删除任何一个视频中的任何片段,因此,如果其中一个视频尚未开始或未完成,生成的视频将继续播放活动视频,而不是仅播放两个视频的时间。我

所以,我有两个视频,我想并排放置。假设两个视频具有相同的FPS,我想按照我知道的每个视频的帧数将它们对齐。使用以下命令找到帧编号

ffmpeg -i "input.mp4" "output/%08d.jpg"
假设我知道视频A的帧号是126,而视频B的帧号是179。我想将视频与这两个帧并排对齐,这样生成的视频将同时显示视频A帧126和视频B帧179。生成的视频也不应删除任何一个视频中的任何片段,因此,如果其中一个视频尚未开始或未完成,生成的视频将继续播放活动视频,而不是仅播放两个视频的时间。我还想调整两个音轨以及

对于这个问题,我更喜欢使用单一命令解决方案,只需输入要对齐的视频和帧号,而不必手动执行几个步骤。

使用

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
。我的命令将视频和音频延迟应用于第二个输入,因此可以按该顺序馈送它们,或者在hstack和amix中将
[1]
[0]
中的
adelay
[1]
切换

由于音频帧速率不同,您必须以毫秒为单位提供时间值
dt
。25 fps视频的53帧视频延迟对应于
53/25=2.12(s)=2120(ms)


由于
hstack
的工作方式。延迟视频的第一帧将显示为冻结,直到开始播放。第一个完成的视频的最后一帧也是如此。hstack过滤器还要求两个视频的高度维度相同。

两个视频都是恒定帧速率吗?@Mulvya是的,它们都具有相同的帧速率。好的,如果先启动视频A,那么帧差将为负值,我该怎么办?我在第一段中介绍了这一点。好的,我得到这个错误:[解析的adelay_2@0x77b8c0]必须至少指定一个大于0的延迟。[Parsed_adelay_2@0x77b8c0]未能在Parsed_adelay_2上配置输入板配置复杂筛选器时出错。参数也无效,命令中是否应该有反斜杠?我在Bash.adelay上运行它。adelay部分应该是这样的:
[1]adelay=2120 | 2120[ba]。我在Windows上工作,所以不知道bash需要什么转义(如果有的话)。好的,我注意到一个错误。如果我像你说的那样切换0和1的延迟,它会在视频并排放置时切换两侧。我想要视频A在左边,视频B在右边。