使用FFmpeg将时间覆盖视频叠加在纯色背景上

8

我有一堆首页截图,它们以homescreen000001.pnghomescreen000002.png等命名,并且我正在尝试使用ffmpeg创建这些图像的时间-lapse视频。

当我运行以下命令时,通常可以工作:

ffmpeg -f image2 \
       -i ~/Desktop/homescreen%06d.png \
       -r 0.5 \
       -s 1440x900 \ 
       -b:v 1M \
       -vcodec libx264 \ 
       -pix_fmt yuv420p \
       ~/Desktop/timelapse.mp4

然而,事实证明有一些图像具有透明背景,因此这些图像的背景显示为黑色。

我想要一个白色背景,所以我一直在尝试使用ffmpeg进行如下设置:

ffmpeg -f image2 \
       -loop 1 \
       -i ~/Desktop/whitebg.png \
       -i ~/Desktop/homescreen%06d.png \
       -filter_complex overlay \ 
       -r 0.5 \
       -s 1440x900 \ 
       -b:v 1M \
       -vcodec libx264 \ 
       -pix_fmt yuv420p \
       ~/Desktop/timelapse.mp4

这里的whitebg.png是一个白色背景的2px x 2px png图片,就是这样。

这个ffmpeg命令会生成一个非常小(文件大小)的视频,只有一个白色背景。

有人能解释一下如何使用ffmpeg将这些图像叠加成为一个时间-lapse视频,放在一个白色背景上吗?

2个回答

21

1
您可以使用ImageMagick将透明像素替换为白色像素,操作如下:
convert in.png -alpha off out.png

或者对于整个目录(输出文件在名为output的子目录中)进行操作,如下所示:
mkdir output
for i in *.png; do
   convert "$i" -alpha off output/"$i"
done

请先备份!

虽然许多Linux发行版已经安装了ImageMagick,但这里提供了更多信息。


虽然我喜欢这个一般的想法,但是这个命令不再产生白色背景了。请改用以下命令: convert "$i" -background white -alpha remove -alpha off output/"$i" 可以在这里找到更多信息。 - Nicolas Reibnitz

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