如何避免ffmpeg的filter_complex覆盖文件的帧率?

3

我对ffmpeg还比较新,如果这是一个简单的问题,请原谅。

我正在尝试使用下面的脚本将四个60帧每秒的视频进行平铺。它可以工作,但输出的帧率是25。当我尝试使用-r来强制将其调整回60时,它看起来像是将25帧上采样到60,渲染时计算了重复帧。

我该如何保留原始文件?

ffmpeg -i vln1.mp4 -i vln2.mp4 -i vla.mp4 -i cello.mp4 -filter_complex \
  "nullsrc=size=2800x2400 [base]; \
   [0:v] setpts=PTS-STARTPTS, scale=2800x600 [A]; \
   [1:v] setpts=PTS-STARTPTS, scale=2800x600 [B]; \
   [2:v] setpts=PTS-STARTPTS, scale=2800x600 [C]; \
   [3:v] setpts=PTS-STARTPTS, scale=2800x600 [D]; \
   [base] [A] overlay=shortest=0 [tmp1]; \
   [tmp1][B] overlay=shortest=0:y=600 [tmp2]; \
   [tmp2][C] overlay=shortest=0:y=1200 [tmp3]; \
   [tmp3][D] overlay=shortest=0:y=1800" \
  -c:v libx264 quartetscore.mp4
1个回答

1
设置nullsrc滤镜的帧率(默认为25 fps):
ffmpeg -i vln1.mp4 -i vln2.mp4 -i vla.mp4 -i cello.mp4 -filter_complex \
  "nullsrc=size=2800x2400:rate=60 [base]; \
   [0:v] setpts=PTS-STARTPTS, scale=2800x600 [A]; \
   [1:v] setpts=PTS-STARTPTS, scale=2800x600 [B]; \
   [2:v] setpts=PTS-STARTPTS, scale=2800x600 [C]; \
   [3:v] setpts=PTS-STARTPTS, scale=2800x600 [D]; \
   [base] [A] overlay=shortest=0 [tmp1]; \
   [tmp1][B] overlay=shortest=0:y=600 [tmp2]; \
   [tmp2][C] overlay=shortest=0:y=1200 [tmp3]; \
   [tmp3][D] overlay=shortest=0:y=1800" \ 
  -c:v libx264 quartetscore.mp4

或者,如果你想要堆叠图层,只需使用hstack滤镜,而不是nullsrc和多个叠加层。
ffmpeg -i vln1.mp4 -i vln2.mp4 -i vla.mp4 -i cello.mp4 -filter_complex \ 
  "[0:v] setpts=PTS-STARTPTS, scale=2800x600 [A]; \
   [1:v] setpts=PTS-STARTPTS, scale=2800x600 [B]; \
   [2:v] setpts=PTS-STARTPTS, scale=2800x600 [C]; \
   [3:v] setpts=PTS-STARTPTS, scale=2800x600 [D]; \
   [A][B][C][D]hstack=inputs=4" \
  -c:v libx264 quartetscore.mp4

查看使用ffmpeg垂直或水平堆叠(镶嵌)多个视频的方法?以获取更多示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接