当前位置: 代码迷 >> python >> python ffmpeg子进程在heroku上不起作用
  详细解决方案

python ffmpeg子进程在heroku上不起作用

热度:36   发布时间:2023-06-19 09:16:29.0

我已经制作了一个处理gif文件的机器人,并尝试将其上传到heroku。

所以我已经安装了这个buildpack

然后,我将此代码作为子进程运行:

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包装器。 像一样。 这是一个例子:

第一:

pip install ffmpy

那么您可以像这样使用它:

from ffmpy import FFmpeg
ff = FFmpeg(
    inputs={'je4d.gif': None},
    outputs={'je4d.mp4': None}
    )
ff.run()
  相关解决方案