如何使用 ffmpeg 缩放视频然后叠加图像?

如何使用 ffmpeg 缩放视频然后叠加图像?

我正在使用一个网站脚本,但遗憾的是该脚本由某个人创建,而他并未就此问题提供任何帮助。

以下是一段代码:

$com=$global_settings["ffmpeg_path"]." -i \"".$apath."\" -vcodec libx264 -strict -2  -t ".$duration."  -vf 'movie=".$_SERVER["DOCUMENT_ROOT"].site_root."/content/watermark-video.png [wm];[in][wm] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]' -vf scale=498:-1 ".$flv_path;

它应该能满足我的需求,也就是本文标题中描述的那样,但它却不能。它可以缩放视频,但不应用 png 水印。任何帮助都将不胜感激。

答案1

filter_complex因为overlay过滤器使用多个输入,所以使用。您的通用命令行将如下所示:

ffmpeg -i <input> -filter_complex "movie=<path to png>[image],[0:v]scale=h:w[scaled],[scaled][image]overlay[out]" -vcodec libx264 -strict -2 -t <duration> -map [out] <outfile>

更具体针对您的情况:

if($global_settings["ffmpeg_watermark"])
{
    $com=$global_settings["ffmpeg_path"]." -i \"".$apath."\" -vcodec libx264 -strict -2 -t ".$duration." -filter_complex 'movie=".$_SERVER["DOCUMENT_ROOT"].site_root."/content/water‌​‌​mark-video.png [wm];[0:v]scale=498:-1[scaled];[scaled][wm] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]' -map [out] " .$flv_path;
}
else
{
    $com=$global_settings["ffmpeg_path"]." -i \"".$apath."\" -vcodec libx264 -strict -2 -t ".$duration." ".$flv_path;
}
exec($com);

相关内容