Wie kann ich die Speicherauslastung von ffmpeg begrenzen?

8

Ich benutze ffmpeg, um ein 1080p Video zu MP4 zu konvertieren, indem ich diesen Befehl in PHP benutze.

%Vor%

Das Problem ist, dass der Prozess eine Menge Speicher ~ 1600MB verwendet, was von meinem Server nicht erlaubt ist, so dass ffmpeg beendet wird. Kann ich den Speicherverbrauch von ffmpeg auf ca. 600-700MB begrenzen?

Jede Hilfe wird sehr geschätzt ...

    
Khan 12.09.2012, 14:38
quelle

3 Antworten

3

Es geht nicht um PHP. Es geht darum, die FFMPEG-Speicherbelegung zu begrenzen.

Kurze Antwort nein!

Schauen Sie hier: Ссылка

    
mikespook 12.09.2012, 14:50
quelle
1

Es wäre der Videocodec, der hauptsächlich für den hohen Speicherverbrauch verantwortlich ist.

Also ist es der Encoder, dessen Speicherverbrauch adressiert werden muss, nicht FFmpeg direkt. Ich bin mir nicht sicher, wie man x264 Speicherverbrauch beheben kann, aber ich habe versucht, das neuere x26 5 und in meinem Fall nur 1,6 GB, während libx264 fehlgeschlagen ist, indem Sie mehr als die 2 GB Speicherlimit (pro Prozess, bei 32-Bit-Systemen).

Also, was für mich funktionierte, war:

%Vor%

(Parameter auslassen, um den Ton zu bearbeiten.)

Aber der allgemeine Ansatz besteht darin, andere Encoder auszuprobieren. Ich wollte mpeg4 und vp9 ausprobieren, wenn x265 nicht funktionierte, vielleicht auch andere. Wenn das alles nicht funktioniert, können Sie auch die Einstellungen des Encoders betrachten (obwohl nichts Offensichtliches und direkt relevant für die Speicherbelegung ist):

%Vor%

Update: Es stellte sich heraus, dass YouTube HEVC (aka H.265) noch nicht akzeptiert (und es mir erst nach dem Upload mitgeteilt hat). Also, wie ich oben vorgeschlagen habe, ging ich für VP9, ​​diesmal ein Pilotlauf mit den ersten 50 Frames. Ich habe ähnliche Einstellungen verwendet wie eine Anleitung , die ich gefunden habe (die Einstellungen Konstante Qualität obwohl ich mehr von ihren vorgeschlagenen Parametern hätte verwenden sollen:

%Vor%

(Beachten Sie, dass pass1.webm fast leer ist.)

Beachten Sie auch, dass nach Möglichkeit zwei Durchgänge bevorzugt werden. Es ist an allen Fronten besser, einschließlich schneller Codierung insgesamt.

Mit diesen Einstellungen dauerte die Kodierung eines 73-Sekunden-Clips in 4K-Auflösung etwa 16 Stunden - das heißt, ich verwende einen Kern, da ich vergessen habe, -threads anzugeben. Obwohl der Speicherverbrauch von FFmpeg langsam war, stieg er nur auf etwa 0,6 GB. Die resultierende Datei hatte eine Größe von 300 MB, und ich kann keinen Qualitätsverlust im Vergleich zu unkomprimierten Bildern sehen (also war -crf 20 möglicherweise etwas zu niedrig).

    
Evgeni Sergeev 28.07.2016 03:37
quelle
0

Die Wahrheit ist Videocodierung eines CPU- und speicherintensiven Jobs. Wenn Sie es tun möchten, müssen Sie den erforderlichen Speicher dafür bereitstellen.

Da Sie eine 1080p .mov in eine .mp4 von gleicher Qualität konvertieren wollen, nehme ich an, dass Sie nur das Format der Datei ändern und nicht neu codieren wollen.

ffmpeg -i input.mov-acodec kopieren -vcodec copy out.mp4

macht es im Handumdrehen und ohne den Speicheraufwand

Wenn Sie möchten, dass Ihr Audio-Codec nur geändert wird, geben Sie nicht den acodec-Teil ein.

Wenn der Video-Codec für Sie nicht funktioniert [Kopieren ist also keine Option], versuchen Sie, mpeg4-Encoding für vcodec durchzuführen. Billiger zu kodieren, aber ich kann nicht versichern, dass es immer in Ihre Speicheranforderungen passt.

    
av501 12.09.2012 18:52
quelle

Tags und Links