当前位置: 首页 > news >正文

视频内存太大怎么压缩变小一点?视频压缩的常用方法

视频传生活或者工作中很常见,如发送视频邮件、在线视频播放、视频上传下载等。未压缩的大内存视频文件传输时,不仅会消耗大量的网络带宽资源,还会使传输时间大幅增加。在网速有限的情况下,发送一个几 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`

脚本会自动计算并显示压缩前后的文件大小和减少比例,方便你了解压缩效果。

如果我们觉得代码的方式比较麻烦,可以使用“汇帮超级压缩器”来压缩视频文件。小白也能操作的方法。

学习视频文件压缩方法的过程,也是提升自身数字技能和数据处理能力的过程。掌握压缩方法后,能进一步理解视频编码、格式转换等相关知识,为学习更复杂的视频编辑、特效制作等技能打下基础。这种能力的提升,在数字化时代的各个领域都能发挥作用,无论是工作中的数据处理,还是个人对数字信息的管理和利用,都能更加得心应手。

http://www.dtcms.com/a/264350.html

相关文章:

  • 复现nanoGPT——train.py(详细版拆解)
  • k8s将service的IP对应的不同端口分配到不同的pod上
  • 【普通人学AI】玩转 Prompt 提示词工程 (一)
  • 使用 icinga2 写入 TDengine
  • 翻译《The Old New Thing》- 解除路径的 MAX_PATH 限制仅适用于路径本身
  • 通过http调用来访问neo4j时报错,curl -X POST 执行指令报错
  • C# 程序:查看 PageUp 热键消息映射表
  • torch.nn
  • Vue 安装使用教程
  • [Python] -基础篇8-Python中的注释与代码风格PEP8指南
  • muduo
  • SQL学习笔记6
  • OpenCV篇——项目(一)OCR识别读取银行卡号码
  • 在 Docker 容器中使用内网穿透
  • ubuntu 安装QT
  • 【python】三元表达式
  • Jeecg前端经验汇总
  • 扫描电子显微镜(SEM)夏令营面试基础题及答案
  • 五个元素一行均分三个换行且有间距,如何均分布局
  • 设计模式之上下文对象设计模式
  • 机器学习在智能金融风险评估中的应用:信用评分与欺诈检测
  • 电脑键盘不能打字了怎么解决 查看恢复方法
  • 无人机一机多控技术要点难点
  • Redis 概述及安装
  • 设计模式之组合模式
  • RabbitMQ:消息队列的轻量级王者
  • 系统安全之大模型案例分析
  • 用openCV实现基础的人脸检测与情绪识别
  • 磐维数据库panweidb3.1.0单节点多实例安装
  • 【Python】断言(assert)