Python heroku上使用ffmpeg的内存限制错误

Python heroku上使用ffmpeg的内存限制错误,python,flask,heroku,memory,ffmpeg,Python,Flask,Heroku,Memory,Ffmpeg,我在Heroku上运行了一个Flask应用程序,我正在尝试使用FFmpeg将视频重新编码到x265。为此,我有以下路线 @app.route('/x265', methods=['POST']) def rotax265(): up_file = request.files['file'].stream in_file = tempfile.TemporaryFile() in_file.write(up_file.read()) in_file.seek(0)

我在Heroku上运行了一个Flask应用程序,我正在尝试使用FFmpeg将视频重新编码到x265。为此,我有以下路线

@app.route('/x265', methods=['POST'])
def rotax265():
    up_file = request.files['file'].stream

    in_file = tempfile.TemporaryFile()
    in_file.write(up_file.read())
    in_file.seek(0)
    out_file = tempfile.TemporaryFile()

    conv = VideoConverter(in_file, out_file)

    conv.x265()
    out_file.seek(0)
    
    return out_file.read()
它使用我创建的
VideoConverter
类:

class VideoConverter(object):
    def __init__(self, in_file, out_file):
        self.input = in_file
        self.output = out_file

    def x265(self, read_chunk_size=-1):
        args = (
            ffmpeg
            .input('pipe:', format='matroska')
            .output('pipe:', vcodec='libx265', format='matroska')
            .get_args()
        )

        p = subprocess.Popen(
            ['ffmpeg'] + args, stdin=self.input, stdout=self.output)
        p.wait()
此类正在使用和
子流程
模块

我在输入和输出中都使用管道,这样我就不会使用存储空间并避免接收R-14错误(超出内存配额)

这在本地运行时可以正常工作,但是当我尝试在Heroku服务器上运行脚本时,它仍然返回R-14错误

有什么方法可以避免这些错误吗

我在输入和输出中都使用管道,这样我就不会使用存储空间并避免接收R-14错误(超出内存配额)

存储(磁盘)和内存(RAM)是不同的东西。此错误与内存有关

管道可能会阻止您写入磁盘,但它们不会减少内存使用。事实上,它们可能会增加内存使用率—数据必须存在于某个位置,如果无法写入磁盘,则需要保留在内存中

如果您在Heroku上遇到内存问题,您只有两个选择:

  • 使用更少的内存
  • 将您的dyno升级到具有更多内存的dyno
视频转换通常会占用大量内存,除了使用非常短的视频剪辑外,我不知道有什么好的方法可以减少内存。这就给你留下了一个真正的选择:投资更大的动力