Wie skaliere ich ein Video und lege dann ein Bild mit ffmpeg ein?

955
amperial

Ich verwende ein Website-Skript, das von jemandem erstellt wurde, der leider keine Hilfe zu diesem Thema bietet.

Hier ist der Code:

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

Es soll tun, was ich brauche, was im Titel dieses Beitrags beschrieben wird, tut es aber nicht. Es skaliert Video, wendet jedoch kein PNG-Wasserzeichen an. Jede Hilfe wird geschätzt.

1

1 Antwort auf die Frage

0
Rens

Verwenden Sie diese Option, filter_complexda der overlayFilter mehr als einen Eingang verwendet. Ihre generische Befehlszeile würde folgendermaßen aussehen:

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> 

Spezifischer für Ihren Fall:

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); 
Eigentlich ist dies das richtige Forum für ffmpeg cli Fragen. Und der Grund, warum der Befehl des OPs nicht funktioniert, ist, dass der zweite `vf` den ersten überschreibt. Gyan vor 6 Jahren 0
Könnte mir jemand zeigen, wie ich den richtigen Befehl in den Code implementieren kann, den ich habe: if ($ global_settings ["ffmpeg_watermark"]) {$ com = $ global_settings ["ffmpeg_path"]. "-I \" " apath. "\" -vcodec libx264 -strict -2 -t ". $ duration." -vf 'movie = ". $ _ SERVER [" DOKUMENT_ROOT "]. site_root." / content / water‌ mark-video.png [wm ]; [in] [wm] overlay = (main_w-overlay_w) / 2: (main_h-overlay_h) / 2 [out] '-vf scale = 498: -1 ". $ flv_path; } else {$ com = $ global_settings ["ffmpeg_path"]. "-i \" ". $ apath." \ "-vcodec libx264 -strict -2 -t". $ duration. "". $ flv_path; }} exec ($ com); amperial vor 6 Jahren 0
Aktualisierte Antwort für Ihren Fall. Rens vor 6 Jahren 0
@Rens Danke! Lass es mich versuchen und ich komme mit dem Ergebnis zurück ... amperial vor 6 Jahren 0
@Rens Es funktioniert! Ich danke dir sehr! amperial vor 6 Jahren 0