我创建了一个使用 imagemagick 托管在 heroku 上的 nodejs 应用程序。我正在做这个操作:
require('child_process').exec(`convert -quiet -delay 1 output.avi ${gif}`);
这应该将 output.avi
(存在)转换为 gif 文件。在这种情况下,gif
是 "/app/temp/gifs/xstrycatdq.gif"
。此命令在我的本地 Windows 机器上完美运行。当我使用 path
模块通过 path.join
和 __dirname
获取变量时。
我已经安装了heroku buildpack:
我收到的错误是:
Command failed: convert -quiet -delay 1 output.avi /app/temp/gifs/xstrycatdq.gif
convert: DelegateFailed `'ffmpeg' -nostdin -v -1 -vframes %S -i '%i' -vcodec pam -an -f rawvideo -y '%u.pam' 2> '%Z'' @ error/delegate.c/InvokeDelegate/1919.
convert: UnableToOpenBlob `magick-93R4VJcemPz0z1.pam': No such file or directory @ error/blob.c/OpenBlob/2705.
convert: NoImagesDefined `/app/temp/gifs/xstrycatdq.gif' @ error/convert.c/ConvertImageCommand/3257.
似乎/tmp/目录无法写入或任何内容。我也试过 mkdir/tmp/
但 bash 告诉我这个目录已经存在。
我还尝试通过 export MAGICK_TMPDIR="temp"
使用环境变量更改 imagemagick 的临时目录。
有什么帮助吗?
编辑:变量现在是绝对的。
最佳答案
您确定这不是权限问题吗?你能写一个简单的文本文件到 /app/temp
吗?什么都没有被读取或写入,这听起来像是权限问题。可能不一定是ImageMagick的保护设计,而是heroku或者你的编程环境?
您正在尝试使用的这个目录,它的特殊之处在于它包含损坏或不完整的文件 - 当某些软件正在运行时,它可能有特殊的保护或防护措施。 temp
目录通常被设计(或假定)以免受用户干扰,因为它们只能由程序本身使用和使用,而不是由程序的用户命令使用。
This question is similar to yours ,或许能帮到你。
关于node.js - FFMPEG 无法读取 Heroku/tmp/on 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48308216/