Как на видеохостинге на Python, Flask сделать загрузку в любых форматах
У меня есть видеохостинг. В форме публикации видео можно опубликовать видео только в формате mp4, а обложку только в jpg. Хотелось бы как-нибудь расширить количество поддерживаемых форматов, но я так ничего и не надумал, как это сделать.
@app.route('/add_video', methods=['GET', 'POST'])
def add_video():
if not current_user.is_authenticated:
return forbidden('')
form = VideoForm()
params = {
'title': 'Добавление видео',
'authenticated': current_user.is_authenticated,
'current_user': current_user
}
if form.validate_on_submit():
video_file = request.files['video']
if not video_file.filename.lower().endswith('.mp4'):
return render_template(
'add_video.html',
message='Данный формат видео не поддерживается. '
'Пожалуйста, загрузите видео в формате mp4.',
form=form,
**params
)
preview_file = request.files['preview']
if not preview_file.filename.lower().endswith('.jpg'):
return render_template(
'add_video.html',
message='Данный формат обложки не поддерживается. '
'Пожалуйста, загрузите изображение в формате jpg.',
form=form,
**params
)
video = Video()
video.title = form.title.data
video.description = '<br>'.join(form.description.data.split('\n'))
video.author = current_user.id
db_sess.add(video)
db_sess.commit()
video_file.save(os.path.join('static/vid', f'{video.id}.mp4'))
preview_file.save(os.path.join('static/pre', f'{video.id}.jpg'))
with Image.open(f'static/pre/{video.id}.jpg') as preview_file:
width, height = preview_file.size
if width >= height:
new_width = height * 16 // 9
delta = (width - new_width) // 2
preview_file = preview_file.crop(
(delta, 0, new_width + delta, height)
)
else:
new_height = width * 9 // 16
delta = (height - new_height) // 2
preview_file = preview_file.crop(
(0, delta, width, new_height + delta)
)
preview_file.save(f'static/pre/{video.id}.jpg')
return redirect('/')
return render_template('add_video.html', form=form, **params)