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

视频传生活或者工作中很常见,如发送视频邮件、在线视频播放、视频上传下载等。未压缩的大内存视频文件传输时,不仅会消耗大量的网络带宽资源,还会使传输时间大幅增加。在网速有限的情况下,发送一个几 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.pswp.cn/web/87125.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能测试包括哪些方面?要掌握哪些知识

性能测试是软件测试中的一个重要方面,它主要关注软件在不同条件下的稳定性、可靠性和性能表现。性能测试包括多个方面,需要掌握的知识也相对广泛。以下是对性能测试包括的方面以及需要掌握的知识分析: 一、性能测试包括的方面 响应时间&…

windows的vscode无法通过ssh连接ubuntu的解决办法

现象: 最近在windows本地通过vscode登录ssh时发现不得劲,总是报错无法与”192.168.1.129“建立连接,如下图: 但是这种报错以及在输出端的信息并没有提供具体错误原因,于是换poweshell来登录,报错如下图&am…

第2章,[标签 Win32] :Windows 的字符串函数

专栏导航 上一篇:第2章 :兼容 ASCII 字符与宽字符的 Windows 函数调用 回到目录 下一篇:无 本节前言 在下面的文章链接里面,我们谈到过,使用兼容版的字符串处理函数的知识。 第2章 :编写兼容多字节字…

Java的SpringAI+Deepseek大模型实战-会话记忆【三】

文章目录 背景项目环境实现步骤第一步、定义会话存储方式方式一、定义记忆存储ChatMemory方式二、注入记忆存储ChatMemory 第二步、配置会话记忆方式一、老版本实现方式二、新版本实现 第三步、添加会话ID 异常处理1、InMemoryChatMemory 无法解析 背景 前两期搭建起大模型对话…

Python3完全新手小白的学习手册 10 文件和异常

文章目录 读取文件读取文件的全部内容 相对路径和绝对路径访问文件中的各行使用文件的内容包含100万位的大型文件圆周率值中包含你的生日吗? 写入文件写入一行写入多行 异常处理ZeroDivisionError异常使用try-except代码块else代码块处理FileNotFoundError异常分析文…

VC Spyglass:工具简介

相关阅读 VC Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828932.html?spm1001.2014.3001.5482 传统上,基于仿真的动态验证技术一直是功能验证的核心方式。随着现代SoC设计日益复杂,静态验证技术的引入变得愈发重要。 Synopsys的 VC Sp…

AWS RDS Aurora全局数据库转区域数据库实战指南:无缝迁移零停机

Aurora全局数据库是AWS提供的跨区域高可用解决方案,但在某些场景下,我们需要将其转换为普通区域数据库。本文将详细介绍这一转换过程,并分享关键技术要点和实战经验。 一、全局数据库与区域数据库概述 AWS RDS Aurora全局数据库是一种跨区域部署的数据库架构,主要用于灾备…

C++之路:函数重载与运算符重载

目录 函数重载运算符重载C运算符重载范围对照表注意事项 运算符重载语法全局运算符重载类内运算符重载下面以一个一元运算符为例,介绍特性1:下面介绍特性3:(必须类内重载的运算符‌) 函数重载 函数重载是指同一个作用域…

七、SpringCloud 项目迁移至 K8s

七、SpringCloud 项目迁移至 K8s 文章目录 七、SpringCloud 项目迁移至 K8s1、环境准备1.1 集群规划1.2 SpringCloud 项目架构及迁移需求分析 2、迁移 Eureka 集群2.1 构建及容器化2.2 部署至 K8s2.3 创建通信Service 3、迁移网关服务3.1 构建及容器化3.2 部署至 K8s3.3 创建Se…

通过具有一致性嵌入的大语言模型实现端到端乳腺癌放射治疗计划制定|文献速递-最新论文分享

Title 题目 End-to-end breast cancer radiotherapy planning via LMMs with consistency embedding 通过具有一致性嵌入的大语言模型实现端到端乳腺癌放射治疗计划制定 01 文献速递介绍 近年来,受大型语言模型(LLM)启发的新一代人工智…

MCP Chart Server服务本地部署案例

一、MCP Chart Server介绍 MCP Chart Server是一个专业的图表生成服务,支持多种图表类型,适用于数据可视化和分析。 MCP Chart Server是一种用于生成和呈现图表的服务器端软件。它提供了一个简单而强大的方式,让开发人员和系统管理员可以轻…

复合型浪涌保护器五大核心技术重构电气防护体系

开篇:从传统防护到智能守护的技术跨越 在电气设备面临浪涌威胁的防护场景中,浪涌保护器(SPD)始终扮演着关键角色。面对传统SPD在漏电流、续流等方面的技术局限,行业领先企业通过技术整合开发出复合型SPD,以…

c# 详细分析Task.sleep和Thread.sleep 的区别、使用场景和应用示例

文章目录 Task.Delay vs Thread.Sleep 详细分析与使用场景核心区别详细分析Thread.SleepTask.Delay 性能考量综合示例高级用法组合延迟与超时实现指数退避重试 总结建议 Task.Delay vs Thread.Sleep 详细分析与使用场景 核心区别 Task.Delay 和 Thread.Sleep 都用于在代码中引…

Vue 3 中的 `h` 函数详解

h 函数是 Vue 3 中用于创建**虚拟 DOM 节点(VNode)**的核心函数,它是 Vue 渲染系统的基石。下面我将全面解释它的作用、用法和重要性。 1. h 函数的基本概念 h 是 createVNode 的简称,来源于"hyperscript"的缩写传统。它的主要作用是&#x…

SoapCore 全面介绍:在 .NET Core 中实现 SOAP 服务的现代解决方案

一、什么是 SoapCore? 在现代微服务和 REST API 成为主流的今天,SOAP(Simple Object Access Protocol)看似已经被边缘化,但在许多企业和政务系统中,SOAP 仍然是 重要的通信协议。特别是在金融、保险、医疗…

JDBC工具类和SQL 注入问题

在软件开发中,数据库安全与高效访问一直是关键课题。本文将围绕 SQL 注入问题的原理、解决方案,以及 JDBC 开发中的工具类演进和连接池技术展开探讨,结合实际代码示例,为开发者提供清晰的技术实践指南。 SQL 注入问题的核心原理与…

2022年SEVC SCI2区,分数阶蚁群算法FACA:一种基于分数阶长期记忆的合作学习方法,深度解析+性能实测

目录 1.摘要2.分数阶微积分基础知识3.分数阶蚁群算法FACA4.分数阶蚁群算法FACA数学证明与分析5.结果展示6.参考文献7.代码获取8.算法辅导应用定制读者交流 1.摘要 本文提出了一种新颖分数阶蚁群算法(Fractional-Order Ant Colony Algorithm, FACA&#…

java+vue+SpringBoo数字科技风险报告管理系统(程序+数据库+报告+部署教程+答辩指导)

源代码数据库LW文档(1万字以上)开题报告答辩稿ppt部署教程代码讲解代码时间修改工具 技术实现 开发语言:后端:Java 前端:vue框架:springboot数据库:mysql 开发工具 JDK版本:JDK1.…

YOLOv12_ultralytics-8.3.145_2025_5_27部分代码阅读笔记-augment.py

augment.py ultralytics\data\augment.py 目录 augment.py 1.所需的库和模块 2.class BaseTransform: 3.class Compose: 4.class BaseMixTransform: 5.class CutMix(BaseMixTransform): 6.class CopyPaste(BaseMixTransform): 7.def v8_transforms(dataset, img…

跨芯片 AI 算子库 FlagGems 正式加入PyTorch 基金会生态项目体系

2025年北京智源大会 PyTorch Day China 论坛上,PyTorch 基金会执行董事 Matt White 宣布高性能通用 AI 算子库 FlagGems 项目获得批准,正式加入 PyTorch 生态项目体系。Pytorch基金会于6月26日在推特上进行了官方宣布。 作为唯一支持多种AI芯片架构的算…