Python heroku上使用ffmpeg的内存限制错误
我在Heroku上运行了一个Flask应用程序,我正在尝试使用FFmpeg将视频重新编码到x265。为此,我有以下路线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)
@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