将视频剪辑与静态图像连接会导致缓冲区错误

时间:2020-02-14 20:00:58

标签: image video ffmpeg

我正在尝试使用MOVIE.mp4将视频(IMAGE.jpg)的15秒剪辑与图像(FFmpeg)的5秒(无音频)连接起来。

虽然我无法确定是什么,但我的过滤器似乎有问题。我整理的命令如下:

ffmpeg \
-loop 1 -t 5 -I IMAGE.jpg \
-t 15 -I MOVIE.mp4 \
-filter_complex "[0:v]scale=480:640[1_v];anullsrc[1_a];[1:v][1:a][1_v][1_a]concat=n=2:v=1:a=1[out]" \
-map "[out]" \
-strict experimental tst_full.mp4

不幸的是,这似乎正在产生一些奇怪的结果:

  1. 在我的个人计算机(FFmpeg 4.2.1)上,它可以正确地将电影与静态图像连接在一起;但是,静态图像的持续时间不受限制。 (输入ctrl-C后,该电影仍然可以观看,但时长很长,例如35分钟,具体取决于我何时中断该过程。)

  2. 在需要进行最终视频处理(FFmpeg 2.8.15-0ubuntu0.16.04.1)的远程计算机上,该命令不会终止,而是出现以下形式的级联错误:

    < / li>
Past duration 0.611458 too large
...
[output stream 0:0 @ 0x21135a0] 100 buffers queued in output stream 0:0, something may be wrong.
...
[output stream 0:0 @ 0x21135a0] 100000 buffers queued in output stream 0:0, something may be wrong.

我找不到足够的文档来阐明这些错误的含义,所以我不知道出了什么问题。

1 个答案:

答案 0 :(得分:2)

正如Gyan所指出的,您只需在音频中添加o.name = 'new name'

#2

您可以使用atrimanullsrc,atrim=0:5[silent-audio]代替scale来自动使图像的大小和纵横比与视频相同。

scale2ref

或者,您可以将setsar用作第三输入:

ffmpeg \
-loop 1 -t 5 -i IMAGE.jpg \
-t 15 -i MOVIE.mp4 \
-filter_complex "[0:v][1:v]scale2ref[img][v];[img]setsar=1[img]; \
anullsrc,atrim=0:5[silent-audio];[v][1:a][img] 
[silent-audio]concat=n=2:v=1:a=1[out]" \
-map "[out]" \
-strict experimental tst_full.mp4