Wie kann ich die Grenze ffmpeg memory Nutzung
Bin ich mit ffmpeg zu konvertieren, ein 1080p-video in MP4 mit diesem Befehl in PHP.
$command = FFMPEG.' -i ' . $src . ' -sameq -strict -2 -vcodec libx264 -ar 22050 -y ' . $dest.'.mp4 2>&1';
exec($command,$output,$status);
Das problem ist, dass der Prozess verwendet eine Menge von Speicher - ~1600MB, was nicht erlaubt ist von meinem server, damit ffmpeg wird beendet. Kann ich das begrenzen der Speicherauslastung von ffmpeg auf etwa 600-700MB?
Jede Hilfe wird sehr geschätzt...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es geht nicht um PHP. Es geht darum, wie begrenzen FFMPEG Speichernutzung.
Kurze Antwort Nein!
Schau mal hier: http://hwdmediashare.co.uk/forum/27-development-customisation/54700-limit-ffmpeg-memory-usage
Wäre es den video-codec, der ist hauptsächlich verantwortlich für den hohen Speicherverbrauch.
So ist es dem encoder, dessen Speicher verwenden muss angegangen werden, nicht FFmpeg direkt. Ich bin mir nicht sicher, wie Sie zu beheben
x264
's Speicher verwenden, aber ich habe versucht, die neueren x265 und in meinem Fall ist es nur mit 1,6 GB, während libx264 wurde nicht durch Fragen, mehr als das 2-GB-Speicher-limit (pro Prozess auf 32-bit-Systeme).So, was für mich gearbeitet war:
(Weglassen von Parametern, zur Versorgung der audio.)
Aber der Allgemeine Ansatz ist, zu versuchen, andere Encoder. Ich werde versuchen, mpeg4 und vp9, wenn x265 hat nicht funktioniert, vielleicht andere. Wenn nichts davon funktioniert, dann weitere Optionen sind Blick auf die Encoder-Einstellungen (obwohl nichts offensichtlich und direkt relevant für memory-Nutzung zeigt nach oben):
Update: tatsächlich, es stellte sich heraus, dass YouTube nicht akzeptieren HEVC (aka H. 265) noch (und es ist nur lassen Sie mich wissen, nach dem upload, fertig). So, wie ich es oben vorgeschlagen, habe ich mich für VP9, mache einen Testlauf mit den ersten 50 Bildern dieser Zeit. Ich benutzte Einstellungen ähnlich eine Anleitung ich gefunden (der Konstante Qualität Einstellungen, aber ich hätte mehr von Ihnen vorgeschlagenen Parameter):
(Beachten Sie, dass
pass1.webm
wird nahezu leer sein.)Beachten Sie auch, dass zwei Pässe werden bevorzugt, Wann immer möglich. Es ist besser, auf allen Fronten, einschließlich schnellere Codierung insgesamt.
Mit diesen Einstellungen, eine 73-Sekunden-clip in 4K-Auflösung dauerte etwa 16 Stunden zu codieren, das ist, mit einem Kern, wie ich vergessen haben, geben
-threads
. Während sich langsam, FFmpeg Speicher verwenden, ging nur bis zu etwa 0,6 GB. Die resultierende Datei 300 MB, und ich sehe keinen Verlust der Qualität im Vergleich zu den unkomprimierten frames (also-crf 20
vielleicht ein bisschen zu niedrig).Die Wahrheit ist video-encoding eine CPU-und Speicher-intensive Aufgabe. Wenn Sie wollen, es zu tun, müssen Sie den erforderlichen Speicherplatz zu.
Da Sie konvertieren möchten 1080p .mov in ein .mp4 der gleichen Qualität ich gehe davon aus, dass Sie einfach nur wollen, ändern Sie das format der Datei und nicht neu codieren.
ffmpeg -i input.mov -acodec copy-vcodec copy out.mp4
tun es im Handumdrehen und ohne Speicher-Overhead
Wenn Sie möchten, dass Ihre audio-codec nur geändert, nicht die acodec Teil.
Wenn das video-codec funktioniert nicht für Sie [also kopieren ist keine option] versuchen Sie, mpeg4-Codierung für vcodec. Billiger zum codieren da, aber ich kann Ihnen versichern, es wird passen Ihre Speicheranforderungen immer.