我使用的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?
任何帮助是极大的赞赏...
这不是PHP。 它是关于如何限制FFMPEG内存使用情况。
简短的回答没有!
看看这里: http://hwdmediashare.co.uk/forum/27-development-customisation/54700-limit-ffmpeg-memory-usage
这将是视频编解码器,其主要负责高端内存使用。
所以这是它的内存使用需要直接解决,不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
可能已经有点太低了)。
事实是视频编码CPU和内存密集型工作。 如果你想这样做,你需要作必要的记忆吧。
既然你想要一个1080p的.MOV转换为相同质量的.MP4我假设你仅仅指刚要更改的文件,而不是重新编码的格式。
ffmpeg的-i input.mov -acodec复制-vcodec副本out.mp4
会做在一个瞬间,没有任何内存开销
如果你希望你的音频编解码器只改不给acodec部分。
如果输入的视频编解码器不适合你的工作[复制所以不是一个选项]尝试做MPEG4编码了vcodec。 便宜编码有,但我不能向你保证,它会适合你的内存要求始终。