ffmpeg concat 过滤器正在丢弃第二个视频的第一秒

ffmpeg concat filter is dropping first second of second video

con.txt

file one.mp4
file two.mp4

命令

ffmpeg -f concat -safe 0 -i con.txt out.mp4

生成的视频不包含 two.mp4 的第一秒。

ffprobe two.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'two.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
  Duration: 00:00:15.20, start: 0.000000, bitrate: 1644 kb/s
  Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 428x640, 1644 kb/s, 10 fps, 10 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]

我在尝试另一种连接方法时遇到一个有趣的错误(顺便说一句,两个视频都没有音频)

ffmpeg -i one.mp4 -i two.mp4 -filter_complex "[0:v] [1:v] concat=n=2:v=1:a=0 [v]" -map "[v]" out.mp4

Input link in0:v0 parameters (size 428x640, SAR 0:1) do not match the corresponding output link in0:v0 parameters (428x640, SAR 1576:1575)

我怎样才能按顺序将这两个视频连接在一起而不丢失任何一个的帧?

concat 过滤器期望要连接的流具有相同的属性(大小、样本纵横比 (SAR)、pix_fmt 等)。错误消息是说 SAR 不匹配。您可以在 concat 过滤器的上游插入 setsar 过滤器来解决这个问题。假设这些视频有方形像素(1576:1575 非常接近 1:1),我们可以这样做:

ffmpeg -i one.mp4 -i two.mp4 \
  -filter_complex "[0:v]setsar=1:1[L0]; \
                   [1:v]setsar=1:1,fps=30[L1]; \
                   [L0][L1]concat=n=2:v=1:a=0 [v] " \
  -map "[v]" out.mp4

如果您遇到其他错误,您需要预先添加更多过滤器来调节您的流以相互匹配。

编辑:向第二个视频 (10 fps) 添加了 fps 过滤器以匹配第一个 (30 fps)