我制作了一个处理 gif 文件的机器人,并尝试将其上传到 heroku。
所以我安装了这个 buildpack https://elements.heroku.com/buildpacks/jonathanong/heroku-buildpack-ffmpeg-latest
我将此代码作为子进程运行:
id_name = "je4d" (is actually randomized bc it downloads different gifs)
path = "./media/%s.gif" % (id_name)
subprocess.run('ffmpeg -y -ignore_loop 0 -i %s -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -t 15 %s' % (path, path.replace(".gif", ".mp4")), shell=True)
因此,如果我在计算机上运行它,它会将 je4d.gif 转换为 .mp4 并且可以正常工作
如果我尝试通过执行
heroku run bash
在 heroku 上测试 ffmpeg然后输入命令
ffmpeg -y -ignore_loop 0 -i ./media/je4d.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -t 15 ./media/je4d.mp4
它也可以正常工作并制作 .mp4但是,如果我从 python 在 heroku 上运行代码,它会这样做:
[Errno 2] No such file or directory: 'ffmpeg -y -i ./media/3s1m8cw09sl11.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" ./media/3s1m8cw09sl11.mp4': 'ffmpeg -y -i ./media/3s1m8cw09sl11.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" ./media/3s1m8cw09sl11.mp4'
所以我认为下载可能有错误,所以我将路径更改为服务器上的静态文件,它仍然给我同样的错误。
有小费吗?
最佳答案
我认为在 Heroku 上进行转换的最佳方法是使用 FFmpeg 的纯 python 包装器。
点赞ffmpy .
这是一个例子:
第一:
pip install ffmpy
那么你可以像这样使用它:
from ffmpy import FFmpeg
ff = FFmpeg(
inputs={'je4d.gif': None},
outputs={'je4d.mp4': None}
)
ff.run()
关于python ffmpeg子进程在heroku上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52355653/