我在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()
此类正在使用^{subprocess
模块
我在输入和输出中都使用管道,这样我就不会使用存储空间并避免接收R-14错误(超出内存配额)
这在本地运行时可以正常工作,但是当我尝试在Heroku服务器上运行脚本时,它仍然返回R-14错误
有什么方法可以避免这些错误吗
存储(磁盘)和内存(RAM)是不同的东西。此错误与内存有关
管道可能会阻止您写入磁盘,但它们不会减少内存使用。事实上,它们可能会增加内存使用率。数据必须存在某处,如果无法写入磁盘,则需要保留在内存中
如果您在Heroku上遇到内存问题,您只有两个选择:
视频转换通常会占用大量内存,除了使用非常短的视频剪辑外,我不知道有什么好的方法可以减少内存。这就给你留下了一个真正的选择:投资更大的动力
相关问题 更多 >
编程相关推荐