У меня есть приложение Flask на Heroku, и я пытаюсь использовать 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()
Этот класс использует ffmpeg-python
и subprocess
модулей.
Я использую канал как на входе, так и на выходе, чтобы не использовать место для хранения и не получать ошибки R-14 (превышена квота памяти).
Это работает должным образом при локальном запуске, но когда я пытаюсь запустить сценарий на сервере Heroku, он по-прежнему возвращает ошибки R-14.
Есть ли способ избежать этих ошибок?