如何限制ffmpeg的内存使用情况(How can I limit ffmpeg memory us

2019-07-31 12:46发布

我使用的ffmpeg转换使用PHP命令一个1080p的视频到MP4。

$command = FFMPEG.' -i ' . $src . ' -sameq -strict -2 -vcodec libx264 -ar 22050 -y ' . $dest.'.mp4 2>&1'; 
exec($command,$output,$status);

问题是,该过程使用大量内存〜1600MB,这不是我的服务器允许这样的ffmpeg被终止。 我能否限制的ffmpeg的内存占用约600-700MB?

任何帮助是极大的赞赏...

Answer 1:

这不是PHP。 它是关于如何限制FFMPEG内存使用情况。

简短的回答没有!

看看这里: http://hwdmediashare.co.uk/forum/27-development-customisation/54700-limit-ffmpeg-memory-usage



Answer 2:

这将是视频编解码器,其主要负责高端内存使用。

所以这是它的内存使用需要直接解决,不FFmpeg的编码器。 我不知道如何解决x264的内存使用,但我尝试了新的X26 5,在我的情况下,它仅使用1.6 GB,而libx264被要求超过2 GB的内存限制(每个进程失败,在32位系统)。

那么,是什么工作对我来说是使用:

ffmpeg -i input -pix_fmt yuv420p -c:v hevc -x265-params crf=23 out.mp4

(省略参数取音频的服务。)

但是,一般的方法是尝试其他编码器。 我要去尝试MPEG4和VP9如果X265没有工作,也许其他人。 如果没有这样的作品,再进一步选择包括(但无明显和内存的使用直接相关的显示出来)看着编码器的设置:

ffmpeg -h encoder=mpeg4

更新:其实,事实证明,YouTube不接受HEVC(又称H.265),但(和它只是让我知道上传完成之后)。 所以,就像我上面所说,我去VP9,做与第一50帧试运行这段时间。 我用类似的设置指南 ,我发现( 质量恒定的设置,虽然我应该用更多的建议的参数):

ffmpeg.exe -i <input> -pix_fmt yuv420p -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 20 -f webm pass1.webm

ffmpeg.exe -i <input> -pix_fmt yuv420p -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 20 -f webm pass2.webm

(请注意, pass1.webm将几乎是空的。)

还要注意的是两个通道是优选只要有可能。 它是在各条战线上,其中包括整体更快更好的编码。

通过这些设置,在4K分辨率73秒的剪辑花了约16个小时的编码-这是使用一个核心,因为我忘了指定-threads 。 虽然慢,FFmpeg的内存使用只有上升到约0.6 GB。 生成的文件为300 MB,而我看不出比未压缩的帧任何质量损失(所以-crf 20可能已经有点太低了)。



Answer 3:

事实是视频编码CPU和内存密集型工作。 如果你想这样做,你需要作必要的记忆吧。

既然你想要一个1080p的.MOV转换为相同质量的.MP4我假设你仅仅指刚要更改的文件,而不是重新编码的格式。

ffmpeg的-i input.mov -acodec复制-vcodec副本out.mp4

会做在一个瞬间,没有任何内存开销

如果你希望你的音频编解码器只改不给acodec部分。

如果输入的视频编解码器不适合你的工作[复制所以不是一个选项]尝试做MPEG4编码了vcodec。 便宜编码有,但我不能向你保证,它会适合你的内存要求始终。



文章来源: How can I limit ffmpeg memory usage
标签: php ffmpeg