2016-06-22 12 views
1

ich folgenden Code verwenden Bild aus Video zu extrahieren.bekommt Bild von Video ohne Höhen Angabe

shell_exec('echo "Y" | ffmpeg -itsoffset -4 -i "'.base_path().'/assets/videos/'.$file_name.'.mp4" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 1170x300 "'.base_path().'/assets/videos/thumbnail/'.$file_name.'.jpg"'); 

Hier habe ich statische Höhe gegeben und wegen dieses Bild ist Stretching So will ich nicht Höhe angeben, so ist es eine Möglichkeit, es Höhe durch Aufrechterhaltung der Qualität des Bildes automatisch anzupassen.

Ich habe auch folgende Code versucht, aber hat nicht funktioniert

shell_exec('echo "Y" | ffmpeg -itsoffset -4 -i "'.base_path().'/assets/videos/'.$file_name.'.mp4" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 1170x-1 "'.base_path().'/assets/videos/thumbnail/'.$file_name.'.jpg"'); 

Kann mir jemand sagen Lösung für dieses?

Antwort

1

Zuerst, wenn echo "Y" | eine vorhandene Miniaturansicht ohne Aufforderung überschreiben soll, gibt es eine -y Flagge zu ffmpeg, die dies tut.

Nun, vorausgesetzt, Sie wollen das Bild nicht größer als 1.170 Pixel in entweder Dimension sein, können Sie Ihren -s Parameter mit einem Aufruf an die scale Videofilter und entsprechende Argumente ersetzen.

shell_exec(
    'ffmpeg -y -itsoffset -4 -i "'.base_path().'/assets/videos/'.$file_name.'.mp4"' 
    . ' -vcodec mjpeg -vframes 1 -an -f rawvideo' 
    . ' -filter:v "scale=iw*min(min(1170/iw\,1170/ih)\,1):ih*min(min(1170/iw\,1170/ih)\,1)"' 
    . ' "'.base_path().'/assets/videos/thumbnail/'.$file_name.'.jpg"'); 

Dadurch werden Videos, die in beiden Richtungen kleiner als 1.170 Pixel sind, nicht vergrößert. Wenn Sie diese Miniaturansichten vergrößern möchten, ersetzen Sie scale=iw*min(min(1170/iw\,1170/ih)\,1):ih*min(min(1170/iw\,1170/ih)\,1) durch scale=iw*min(1170/iw\,1170/ih):ih*min(1170/iw\,1170/ih).

Wenn das Bild sollte immer eine Breite von 1.170 Pixel haben, auch wenn dies es höher als 1,170 Pixel hoch macht, stattdessen scale=1170:ih*1170/iw verwenden.

Und schließlich, um die Breite zu 1.170 Pixeln zu reduzieren, nur wenn es breiter, scale=min(iw\,1170):min(ih\,ih*1170/iw)

+0

Vielen Dank. es hat für mich funktioniert. – Jass

+0

Ich bekomme schwarzen Teil oben/unten auf dem Bild, also können Sie mir vorschlagen, was die Lösung sein kann? – Jass

+0

Sorry, ich weiß es nicht. Ich habe dieses Problem mit meinen Videos nicht. Vielleicht eine weitere Frage stellen und sehen, ob jemand es erlebt hat? –

Verwandte Themen