Como dimensionar vídeo e depois sobrepor uma imagem usando o ffmpeg?

1

Estou usando um script de website criado por alguém que infelizmente não fornece nenhuma ajuda sobre esse assunto.

Aqui está o código:

$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;

É suposto fazer o que eu preciso, o que é descrito no título deste post, mas isso não acontece. Ele escala o vídeo, mas não aplica uma marca d'água png. Qualquer ajuda será apreciada.

    
por amperial 03.12.2017 / 21:38

1 resposta

0

Use filter_complex porque o filtro overlay usa mais de uma entrada. Sua linha de comando genérica seria semelhante:

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>

Mais específico para o seu caso:

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);
    
por 03.12.2017 / 22:33