当前位置: 首页 > 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.lqws.cn/news/600697.html

相关文章:

  • Bilibili多语言字幕翻译扩展:基于上下文的实时翻译方案设计
  • Cypher 是 Neo4j 专用的查询语言
  • nanoGPT复现——prepare拆解(自己构建词表 VS tiktoken)
  • Lombok 与 Jackson 注解详解(基础 + 深入)
  • day52-硬件学习之RTC及ADC
  • 从零实现在线OJ平台
  • Y-Combinator推导的Golang描述
  • Go语言的Map
  • 编写shell脚本扫描工具,扫描服务器开放了哪些端口(再尝试用python编写一个)
  • java web2(黑马)
  • 7.1_JAVA_其他
  • Excel
  • 【前端】vue工程环境配置
  • 洛谷P1379 八数码难题【A-star】
  • LangChain4j在Java企业应用中的实战指南-3
  • uniapp 中使用路由导航守卫,进行登录鉴权
  • css函数写个loading动画 | css预编译scss使用
  • MAC环境搭建SVN,并将TOMCAT集成到IDEA
  • 地震灾害的模拟
  • Springboot整合高德地图
  • filebeat收集日志到es
  • 大模型MCP技术之一句话安装Hadoop
  • 图神经网络(篇二)-基础知识
  • 安全左移(Shift Left Security):软件安全的演进之路
  • Badoo×亚矩云手机:社交约会革命的“云端心跳加速剂“
  • 计网学习笔记第1章 计算机网络体系结构(灰灰题库)
  • 微信小程序实现table表格
  • vue+three.js 加载模型,并让模型随航线飞行
  • 服务器种类与超融合
  • CSS 安装使用教程