基于Python和Django压缩用户上传照片视频以节省存储空间的工具推荐问询
适用于Django应用的照片与视频压缩工具推荐
图片压缩工具
- Pillow:Python生态中最常用的图像处理库,支持JPG、PNG等主流格式的压缩。可以通过调整质量参数、转换色彩模式来平衡体积与画质,直接集成到Django的文件上传流程中。示例代码:
from PIL import Image import io def compress_image(image_file, quality=70): img = Image.open(image_file) # 转换RGBA/PNG为RGB以兼容JPG压缩 if img.mode in ("RGBA", "P"): img = img.convert("RGB") output_buffer = io.BytesIO() # 启用优化参数进一步减小体积 img.save(output_buffer, format="JPEG", quality=quality, optimize=True) output_buffer.seek(0) return output_buffer - pngquant-python:专门针对PNG格式的压缩工具,通过有损压缩算法在视觉损失极小的前提下大幅降低文件体积,是pngquant命令行工具的Python封装,适合处理用户上传的PNG图片。
视频压缩工具
- ffmpeg-python:FFmpeg的Python绑定库,支持几乎所有视频格式的压缩与转码。可以灵活调整比特率、分辨率、编码格式等参数来控制压缩效果,需要先在服务器上安装FFmpeg本体。示例代码:
import ffmpeg def compress_video(input_path, output_path, bitrate="1M"): ( ffmpeg .input(input_path) .output(output_path, vcodec="libx264", b=bitrate, acodec="aac") .overwrite_output() .run(capture_stdout=True, capture_stderr=True) ) - moviepy:基于FFmpeg的高阶视频处理库,API更简洁友好,适合快速实现视频压缩、裁剪等操作,同样依赖FFmpeg环境。示例代码:
from moviepy.editor import VideoFileClip def compress_video_moviepy(input_path, output_path, target_resolution=(1280, 720)): with VideoFileClip(input_path) as clip: resized_clip = clip.resize(target_resolution) resized_clip.write_videofile(output_path, codec="libx264", audio_codec="aac")
集成建议
- 在Django中,可以通过重写模型的
save方法、使用django-signals监听文件上传事件,在文件保存到存储前完成压缩。 - 增加文件类型判断逻辑,自动为图片/视频匹配对应的压缩工具。
- 可添加前置检查,对小于阈值的文件跳过压缩,减少服务器资源消耗。
内容的提问来源于stack exchange,提问作者Topher76
相关产品推荐
相关产品推荐

