我正在用django开发一个像youtube这样的视频流应用,用于学习。我想实现上传视频的功能,用户和查看它在不同的分辨率,如360 p,480 p等。我不知道如何实现这一点。我应该保存所有版本的视频吗??那不是多余的吗??如何将视频转换为不同的分辨率!我想用AWS S3来做这件事。
slwdgvem1#
是的,我认为你必须保存你的视频的所有版本。我不认为你可以从Python中调整视频的大小。也许你应该使用一个子进程,比如ffmpeg:示例(此示例更改大小并删除原始视频,假设视频是models.FileField):
import subprocess def do_video_resize(video): filename = video.file.path.split('/')[-1] if ffmpeg('-v', '-8', '-i', video.file.path, '-vf', 'scale=-2:480', '-preset', 'slow', '-c:v', 'libx264', '-strict', 'experimental', '-c:a', 'aac', '-crf', '20', '-maxrate', '500k', '-bufsize', '500k', '-r', '25', '-f', 'mp4', ('/tmp/'+ filename ), '-y'): resized_video = open('/tmp/' + filename) video.file.save(filename ,File(resized_video)) resized_video.close() os.remove('/tmp/'+ filename) return video def ffmpeg(*cmd): try: subprocess.check_output(['ffmpeg'] + list(cmd)) except subprocess.CalledProcessError: return False return True
1条答案
按热度按时间slwdgvem1#
是的,我认为你必须保存你的视频的所有版本。我不认为你可以从Python中调整视频的大小。也许你应该使用一个子进程,比如ffmpeg:
示例(此示例更改大小并删除原始视频,假设视频是models.FileField):