使用ffmpeg覆盖固体背景颜色的间隔拍摄视频

时间:2014-07-27 22:18:35

标签: ffmpeg

我有一大堆名为homescreen000001.pnghomescreen000002.png等主页的屏幕截图,我试图使用这些图片制作时间推移视频FFMPEG。

当我运行以下内容时,我已经完成了它的工作:

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将图像叠加为白色背景上的延时视频吗?

2 个答案:

答案 0 :(得分:12)

使用一系列包含最近版本为ffmpeg的透明度的图像为我工作,但是你没有提供完整的控制台输出,这些输出可能提供了有用的信息,可能已经显示了它的原因没有按预期工作。

您可以使用color source filter作为背景:

ffmpeg -f lavfi -i color=c=white:s=1440x900 -i homescreen%06d.png -filter_complex \
"[0:v][1:v]overlay=shortest=1,format=yuv420p[out]" \
-map "[out]" output.mp4
  • 您必须手动提供颜色源过滤器的输入大小,但您可以使用ffprobe编写脚本来获取图像帧大小,如FFprobe Tips所示。

  • 请注意,使用-r 0.5帧将被删除以适应此输出帧速率,因为默认情况下,输入为-r 25。这可能是也可能不是。

  • 通常不推荐使用比特率和一次通过。请改为使用-crf,如FFmpeg and H.264 Encoding Guide

  • 所示
  • Stack Overflow仅用于编程问题。应在超级用户处询问ffmpeg cli使用问题。

答案 1 :(得分:0)

您可以使用ImageMagick将透明像素替换为白色透明像素,如下所示:

convert in.png -alpha off out.png

或整个目录(在名为output的子目录中包含输出文件),如下所示:

mkdir output
for i in *.png; do
   convert "$i" -alpha off output/"$i"
done

请先备份!

ImageMagick是here,虽然它已经安装在许多Linux发行版上。