【发布时间】:2019-02-20 15:57:18
【问题描述】:
我制作了一个处理 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'
所以我认为下载可能有错误,所以我将路径更改为服务器上的静态文件,它仍然给我同样的错误。 有什么建议吗?
【问题讨论】:
-
如果您将
subprocess.run()参数从单个字符串更改为列表,例如subprocess.run(['ffmpeg', '-y', '-ignore_loop', '0', '-i', path, '-movflags', 'faststart', '-pix_fmt', 'yuv420p', '-vf', '"scale=trunc(iw/2)*2:trunc(ih/2)*2"', '-t', '15', path.replace(".gif", ".mp4")'], shell=True)之类的东西有用吗? -
嘿@Chris 我刚试过这个(我以前试过这样做,但我从来不明白如何正确地做),它似乎是一个 path.mp4 但它是 borken (0kb),我尝试在我的 cmd 上运行相同的 ffmpeg 代码,它生成了一个 85kb 的 .mp4,所以出了点问题
-
我不知道为什么会这样,但另一个因素是 Heroku 的文件系统仅被设计用作短期暂存器。如果你得到这个工作,请确保你不依赖那些长期存储的文件。
-
是的,它从不同的来源下载文件,ffmpeg 上传它们,然后自动删除它们
标签: python python-3.x heroku video ffmpeg