Comment puis-je limiter ffmpeg l'utilisation de la mémoire
J'utilise ffmpeg pour convertir une vidéo en 1080p en MP4 à l'aide de cette commande en PHP.
$command = FFMPEG.' -i ' . $src . ' -sameq -strict -2 -vcodec libx264 -ar 22050 -y ' . $dest.'.mp4 2>&1';
exec($command,$output,$status);
Le problème est que le processus qui utilise beaucoup de mémoire ~1600MB, qui n'est pas autorisé par mon serveur pour ffmpeg obtient résilié. Puis-je limiter l'utilisation de la mémoire de ffmpeg pour environ 600-700 MO?
Toute aide est grandement appréciée...
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas à propos de PHP. C'est sur la façon de limiter FFMPEG l'utilisation de la mémoire.
Réponse courte pas!
Regardez ici: http://hwdmediashare.co.uk/forum/27-development-customisation/54700-limit-ffmpeg-memory-usage
Il serait le codec vidéo qui est principalement responsable du taux élevé d'utilisation de la mémoire.
Donc, c'est l'encodeur, dont l'utilisation de la mémoire doit être adressée, non pas directement FFmpeg. Je ne suis pas sûr de la façon de corriger
x264
's utilisation de la mémoire, mais j'ai essayé la nouvelle x265 et dans mon cas, c'est seulement à l'aide de 1,6 GO, tandis que libx264 n'était pas en demander plus que les 2 GO de mémoire limite (par processus, sur les systèmes 32 bits).Donc, ce qui a fonctionné pour moi a été d'utiliser:
(En omettant les paramètres à prendre soin de l'audio.)
Mais l'approche générale consiste à essayer d'autres codeurs. Je vais essayer mpeg4 et vp9 si x265 n'a pas fonctionné, peut-être d'autres. Si rien de tout cela fonctionne, d'autres options comprennent la recherche sur les encodeurs' paramètres (si rien d'évident et directement pertinentes pour l'utilisation de la mémoire s'affiche):
Mise à jour: en fait, il s'est avéré que YouTube n'accepte pas HEVC (aka H. 265), mais (et il ne vous laissez-moi savoir une fois le téléchargement terminé). Donc, comme je l'ai suggéré ci-dessus, je suis allé pour VP9, faire un essai pilote avec les 50 premières images de cette époque. J'ai utilisé des paramètres similaires à un guide que j'ai trouvé (le Constante de la qualité paramètres, mais je devrais l'avoir utilisé plusieurs de leurs paramètres suggérés):
(Notez que
pass1.webm
sera presque vide.)Également noter que les deux cols sont à privilégier chaque fois que possible. C'est mieux sur tous les fronts, y compris l'encodage le plus rapide dans l'ensemble.
Avec ces paramètres, un 73-deuxième clip à la résolution 4K a pris environ 16 heures pour encoder — c'est à l'aide de l'un de base, que j'ai oublié de préciser
-threads
. Bien que lente, FFmpeg l'utilisation de la mémoire ne suis allé jusqu'à environ 0,6 GO. Le fichier résultant est de 300 MO, et je ne vois aucune perte de qualité par rapport aux formats images (donc-crf 20
peut-être été un peu trop faible).La vérité est l'encodage vidéo d'une CPU et de la mémoire de travail intensif. Si vous voulez le faire vous avez besoin de donner de la mémoire nécessaires pour cela.
Puisque vous voulez convertir un 1080p .mov pour un .mp4 de même qualité que je suis en supposant que vous simplement voulez modifier le format du fichier et réencode pas.
ffmpeg -i input.mov -acodec copy-vcodec copy out.mp4
le fera en un tour de main et sans aucun de la mémoire de frais généraux
Si vous voulez que votre codec audio seulement changé de ne pas donner la acodec partie.
Si l'entrée codec vidéo ne fonctionne pas pour vous [si la copie n'est pas une option] essayez de faire encodage mpeg4 pour vcodec. Moins cher pour coder, mais je ne peux pas vous assurer qu'il ira parfaitement dans votre mémoire les exigences toujours.