视频内存太大怎么压缩变小一点?视频压缩的常用方法
视频传生活或者工作中很常见,如发送视频邮件、在线视频播放、视频上传下载等。未压缩的大内存视频文件传输时,不仅会消耗大量的网络带宽资源,还会使传输时间大幅增加。在网速有限的情况下,发送一个几 GB 的未压缩视频可能需要数小时甚至更长时间;而压缩后的视频,传输时间会大幅缩短,用户体验得到显著提升。对于在线视频平台,压缩视频能降低服务器压力,使更多用户可以流畅观看视频,减少卡顿现象。
下面是一个使用 FFmpeg 压缩视频文件的 Python 脚本,你可以使用它来减小视频文件的大小。
使用说明:
1. 首先需要安装FFmpeg:
- Windows: 从浏览器中下载并添加到系统PATH
- macOS: 使用Homebrew安装 `brew install ffmpeg`
- Linux: 使用包管理器安装 `sudo apt-get install ffmpeg` 或 `sudo yum install ffmpeg`
2. 安装必要的Python依赖:
```
pip install argparse
```
示例代码:
import os
import argparse
import subprocess
import sys
from pathlib import Pathdef compress_video(input_file, output_file=None, quality=28, codec="libx264", crf_min=18, crf_max=32):"""使用FFmpeg压缩视频文件参数:input_file: 输入视频文件路径output_file: 输出视频文件路径,默认为输入文件名添加_compressed后缀quality: 视频质量,使用CRF值(18-32),值越高文件越小,默认为28codec: 视频编码格式,默认为libx264(h.264)crf_min: 最小CRF值限制crf_max: 最大CRF值限制"""# 确保输入文件存在if not os.path.isfile(input_file):print(f"错误: 输入文件不存在 - {input_file}")return False# 限制CRF值范围quality = max(crf_min, min(crf_max, quality))# 生成输出文件名(如果未指定)if not output_file:base_name, ext = os.path.splitext(input_file)output_file = f"{base_name}_compressed{ext}"# 构建FFmpeg命令cmd = ["ffmpeg","-i", input_file,"-c:v", codec,"-crf", str(quality),"-preset", "medium", # 编码速度与压缩比的平衡"-c:a", "aac", # 音频编码"-b:a", "128k", # 音频比特率"-y", # 覆盖已存在文件output_file]try:# 执行FFmpeg命令print(f"开始压缩视频: {input_file}")print(f"输出文件: {output_file}")print(f"使用CRF: {quality}")result = subprocess.run(cmd, capture_output=True, text=True, check=True)# 检查源文件和压缩后文件的大小original_size = os.path.getsize(input_file)compressed_size = os.path.getsize(output_file)reduction_percentage = (1 - compressed_size / original_size) * 100print(f"压缩完成!")print(f"原始大小: {original_size / (1024 * 1024):.2f} MB")print(f"压缩后大小: {compressed_size / (1024 * 1024):.2f} MB")print(f"减少比例: {reduction_percentage:.2f}%")return Trueexcept subprocess.CalledProcessError as e:print(f"压缩失败: {e.stderr}")return Falseexcept Exception as e:print(f"发生错误: {str(e)}")return Falsedef batch_compress(directory, quality=28, codec="libx264"):"""批量压缩目录中的所有视频文件参数:directory: 目录路径quality: 视频质量CRF值codec: 视频编码格式"""if not os.path.isdir(directory):print(f"错误: 目录不存在 - {directory}")return# 支持的视频文件扩展名video_extensions = ['.mp4', '.mkv', '.avi', '.mov', '.wmv', '.flv']compressed_count = 0total_files = 0# 统计总视频文件数for filename in os.listdir(directory):if any(filename.lower().endswith(ext) for ext in video_extensions):total_files += 1print(f"发现 {total_files} 个视频文件")# 处理每个视频文件for i, filename in enumerate(os.listdir(directory)):if any(filename.lower().endswith(ext) for ext in video_extensions):input_path = os.path.join(directory, filename)print(f"\n({i+1}/{total_files}) 处理文件: {filename}")if compress_video(input_path, quality=quality, codec=codec):compressed_count += 1print(f"\n批量压缩完成! 共处理 {total_files} 个文件,成功压缩 {compressed_count} 个文件")def main():"""命令行入口函数"""parser = argparse.ArgumentParser(description='视频压缩工具 - 使用FFmpeg压缩视频文件')parser.add_argument('--input', '-i', help='输入视频文件路径或目录')parser.add_argument('--output', '-o', help='输出视频文件路径(仅当输入为单个文件时有效)')parser.add_argument('--quality', '-q', type=int, default=28, help='视频质量(18-32),值越高文件越小,默认28')parser.add_argument('--batch', '-b', action='store_true', help='批量压缩目录中的所有视频文件')parser.add_argument('--codec', '-c', default='libx264', help='视频编码格式,默认为libx264(h.264)')args = parser.parse_args()# 检查是否安装了FFmpegtry:subprocess.run(["ffmpeg", "-version"], capture_output=True, check=True)except (subprocess.SubprocessError, FileNotFoundError):print("错误: 未找到FFmpeg。请先安装FFmpeg并确保其在系统PATH中。")print("FFmpeg下载地址: https://ffmpeg.org/download.html")sys.exit(1)if not args.input:print("错误: 必须指定输入文件或目录")parser.print_help()returnif args.batch:batch_compress(args.input, args.quality, args.codec)else:# 单文件转换if os.path.isfile(args.input):compress_video(args.input, args.output, args.quality, args.codec)else:print("错误: 输入文件不存在")if __name__ == "__main__":main()
3. 基本用法:
- 压缩单个视频:`python video_compressor.py -i input.mp4 -o output.mp4`
- 批量压缩目录中的所有视频:`python video_compressor.py -i /path/to/videos -b`
- 调整压缩质量(CRF值,18-32,值越高文件越小):`python video_compressor.py -i input.mp4 -q 30`
4. 其他选项:
- 指定视频编码格式:`-c libx265`(更高压缩率,但可能需要更长时间)
- 查看帮助信息:`python video_compressor.py --help`
脚本会自动计算并显示压缩前后的文件大小和减少比例,方便你了解压缩效果。
如果我们觉得代码的方式比较麻烦,可以使用“汇帮超级压缩器”来压缩视频文件。小白也能操作的方法。
学习视频文件压缩方法的过程,也是提升自身数字技能和数据处理能力的过程。掌握压缩方法后,能进一步理解视频编码、格式转换等相关知识,为学习更复杂的视频编辑、特效制作等技能打下基础。这种能力的提升,在数字化时代的各个领域都能发挥作用,无论是工作中的数据处理,还是个人对数字信息的管理和利用,都能更加得心应手。