我正在尝试使用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
不幸的是,这似乎正在产生一些奇怪的结果:
在我的个人计算机(FFmpeg 4.2.1
)上,它可以正确地将电影与静态图像连接在一起;但是,静态图像的持续时间不受限制。 (输入ctrl-C
后,该电影仍然可以观看,但时长很长,例如35分钟,具体取决于我何时中断该过程。)
在需要进行最终视频处理(FFmpeg 2.8.15-0ubuntu0.16.04.1
)的远程计算机上,该命令不会终止,而是出现以下形式的级联错误:
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.
我找不到足够的文档来阐明这些错误的含义,所以我不知道出了什么问题。
答案 0 :(得分:2)
正如Gyan所指出的,您只需在音频中添加o.name = 'new name'
:
#2
您可以使用atrim
和anullsrc,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