1 使用ffmpeg将两个视频拼接成一左一右或者一上一下的视频

将两个视频拼接成一左一右的视频

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2" output.mp4

将两个视频拼接成一上一下的视频

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]vstack=inputs=2" output.mp4

其中:

  • -i:表示输入视频;
  • -filter_complex "[0:v][1:v]hstack=inputs=2" 定义了一个复杂的过滤器链,其中 [0:v] 表示第一个输入的视频流,[1:v] 表示第二个输入的视频流,而 hstack=inputs=2 则表示水平排列这两个视频流,vstack=inputs=2则表示垂直排列视频;
  • output.mp4 是输出文件名;

如果有一个相同内容的视频,但是这个视频有两个不同帧率的视频,比如说30fps或者60fps,这种情况直接使用上述的命令会出现问题,我们首先需要将其中一个视频的帧率调整到与另外一个视频相同,然后两个视频保持相同的分辨率,具体的命令如下

将两个不同帧率的视频拼接成一左一右的视频

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v]scale=3840:2160,fps=fps=100[left];[1:v]scale=3840:2160,fps=fps=100[right];[left][right]hstack=inputs=2" output_video.mp4

将两个不同帧率的视频拼接成一上一下的视频

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v]scale=3840:2160,fps=fps=100[top];[1:v]scale=3840:2160,fps=fps=100[bottom];[top][bottom]vstack=inputs=2" output_video.mp4

其中:

  • -i:表示输入视频;

  • scale=3840:2160表示设置输入视频的分辨率为3840x2160

  • fps=fps=30 表示设置输入视频的帧率为30fps

  • 其他的与上述保持一致