1

Я использую сценарий веб-сайта, который был создан кем-то, кто, к сожалению, не оказывает никакой помощи по этому вопросу.

Вот кусок кода:

$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 ответ1

0

Используйте 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);

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .