FFMPEG或ImageMagick用于图像转换和调整大小(速度/内存使用)?

3

我遇到了一个情况,由于内存限制,无法使用PHP将PNG图像转换/调整大小为JPG图像。

但是,服务器上有FFMPEG可以通过shell_exec()从PHP中使用。

因此,现在使用FFMPEG来调整大小和转换PNG图像:

ffmpeg -i ".$image_png." -vf scale=1200:-1 ".$image_jpg)

不过,我想知道FFMPEG在转换时使用了多少内存?

如果考虑速度和内存使用情况,使用ImageMagick是否更好呢?


进一步的研究揭示了:

FFMpeg正在使用libswscale库来调整输入大小

2个回答

3
在Linux上,您可以使用time来测量内存使用情况。请确保以/usr/bin/time的形式运行它,以确保您获得的是time程序而不是内置于shell的time命令。使用-f设置要打印的统计信息,我通常使用%M表示峰值内存使用率,%e表示已经过时间。在这个Ubuntu 21.10桌面上,我看到:
$ vipsheader wtc.png
wtc.png: 9372x9372 uchar, 3 bands, srgb, pngload
$ /usr/bin/time -f %M:%e \
    ffmpeg -i wtc.png -vf scale=1200:-1 x.jpg
... snip
572880:3.00
$ /usr/bin/time -f %M:%e \
    magick convert wtc.png -resize 1200x1200 x.jpg
1203976:2.59
$ VIPS_CONCURRENCY=1 /usr/bin/time -f %M:%e \
    vipsthumbnail wtc.png --size 1200x1200 -o x.jpg
66992:2.51

在这张相对较大的PNG图片上,运行ffmpeg需要600MB内存且用时3秒,而运行imagemagick需要1.2GB内存且用时2.6秒,而libvips仅需70MB内存且用时2.5秒。


2

不过,我想知道FFMPEG在转换时使用了多少内存?

添加-benchmark参数,然后查看包含maxrss=的日志行以获取内存使用情况。


请问您可以澄清一下在哪里添加“-benchmark”以及是针对什么的吗?同时,能否指明一下您所说的日志是哪些以及它们可能在哪里找到?谢谢。 - Mark Setchell
它将被添加到您的帖子中的ffmpeg命令中。日志是ffmpeg在执行过程中打印在stderr上的内容。 - Gyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接