我有一大堆名为homescreen000001.png
,homescreen000002.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将图像叠加为白色背景上的延时视频吗?
答案 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发行版上。