視頻內存太大怎么壓縮變小一點?視頻壓縮的常用方法

視頻傳生活或者工作中很常見,如發送視頻郵件、在線視頻播放、視頻上傳下載等。未壓縮的大內存視頻文件傳輸時,不僅會消耗大量的網絡帶寬資源,還會使傳輸時間大幅增加。在網速有限的情況下,發送一個幾 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
英文地址,請注明出處:http://en.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芯片架構的算…