AVCap視頻處理成幀和音頻腳本


###############處理原視頻,使其格式和原數據一樣
import os
import cv2
import subprocess
import json
from PIL import Image
from pydub import AudioSegmentimport sys
import shutil
# === 🔹 第一步:強制檢測并設置FFmpeg路徑 🔹 ===
def get_ffmpeg_path():"""確保FFmpeg和FFprobe可用"""ffmpeg_path = shutil.which("ffmpeg")ffprobe_path = shutil.which("ffprobe")if not ffprobe_path or not ffmpeg_path:print("? 致命錯誤: FFmpeg未正確安裝")print("請按照以下步驟操作:")print("1. 訪問 https://github.com/BtbN/FFmpeg-Builds/releases")print("2. 下載 'ffmpeg-master-latest-win64-gpl.zip'")print("3. 解壓到 C:\\ffmpeg")print("4. 將 C:\\ffmpeg\\bin 添加到系統PATH變量")print("5. 重啟命令行終端")sys.exit(1)# 配置pydub使用正確的路徑AudioSegment.converter = ffmpeg_pathreturn ffmpeg_path, ffprobe_pathffmpeg_path, ffprobe_path = get_ffmpeg_path()
print(f"? FFmpeg路徑: {ffmpeg_path}")
print(f"? FFprobe路徑: {ffprobe_path}")# === 🔹【設置文件路徑】🔹 ===
original_audio_path = "waveforms/7fmOlUlwoNg_20000_30000.wav"  # 原始數據集音頻
original_image_path = "frames/frame_0/7fmOlUlwoNg_20000_30000.jpg"  # 原始數據集幀input_video = "lai.mp4"   # 你要處理的視頻
output_audio = "waveforms/lai_audio.wav"
frames_dir = "frames"os.makedirs("waveforms", exist_ok=True)
os.makedirs("frames", exist_ok=True)# === 🔹【獲取原始數據集格式】🔹 ===
def get_audio_info(audio_path):""" 獲取音頻的格式信息 """cmd = ["ffprobe", "-i", audio_path, "-show_streams", "-select_streams", "a","-of", "json"]result = subprocess.run(cmd, capture_output=True, text=True)audio_info = json.loads(result.stdout)["streams"][0]return {"sample_rate": int(audio_info["sample_rate"]),  # 采樣率"channels": int(audio_info["channels"]),  # 聲道數"bit_rate": int(audio_info["bit_rate"]),  # 比特率"duration": float(audio_info["duration"])  # 時長}def get_image_info(image_path):""" 獲取圖片的格式信息 """img = Image.open(image_path)return {"size": img.size,  # (width, height)"mode": img.mode  # "RGB" / "L" (灰度) / "CMYK" 等}# 獲取 **原始數據集** 的格式信息
original_audio_info = get_audio_info(original_audio_path)
original_image_info = get_image_info(original_image_path)print("🎯 原始音頻信息:", original_audio_info)
print("🎯 原始圖像信息:", original_image_info)# === 🔹【處理音頻】🔹 ===
def process_audio(input_audio, output_audio, ref_info):""" 將音頻轉換為和原始數據集匹配的格式 """audio = AudioSegment.from_file(input_audio)# 轉換采樣率if audio.frame_rate != ref_info["sample_rate"]:audio = audio.set_frame_rate(ref_info["sample_rate"])# 轉換聲道if audio.channels != ref_info["channels"]:audio = audio.set_channels(ref_info["channels"])# 轉換比特率(pydub 不支持直接修改比特率,但可以調整導出參數)audio.export(output_audio, format="wav", bitrate=str(ref_info["bit_rate"]) + "k")print(f"? 音頻已轉換并保存至 {output_audio}")process_audio(input_video, output_audio, original_audio_info)# === 🔹【處理視頻幀】🔹 ===
def extract_frames(video_path, output_dir, ref_info, frame_count=20):""" 從視頻中提取均勻分布的 20 幀,并匹配原始格式 """cap = cv2.VideoCapture(video_path)total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))frame_interval = max(total_frames // frame_count, 1)for i in range(frame_count):cap.set(cv2.CAP_PROP_POS_FRAMES, i * frame_interval)success, frame = cap.read()if success:# 統一尺寸frame = cv2.resize(frame, ref_info["size"])# 統一色彩模式if ref_info["mode"] == "L":  # 如果是灰度frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)else:  # 默認 RGBframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 逐幀存入 frame_0 到 frame_19frame_folder = os.path.join(output_dir, f"frame_{i}")os.makedirs(frame_folder, exist_ok=True)frame_path = os.path.join(frame_folder, "lai_frame.jpg")cv2.imwrite(frame_path, frame)cap.release()print(f"? 視頻幀已提取并存入 {output_dir}")extract_frames(input_video, frames_dir, original_image_info)print("🎉 處理完成!所有格式已匹配 ?")

直接執行腳本會報錯,解決辦法

安裝 FFmpeg(如果未安裝)

步驟一:手動下載 FFmpeg

  1. 訪問 FFmpeg 官方構建版本頁面:
    https://github.com/BtbN/FFmpeg-Builds/releases

  2. 下載最新版本:

    • 點擊?ffmpeg-master-latest-win64-gpl.zip
    • 如果該版本不可用,選擇類似名稱的文件

步驟二:解壓安裝

  1. 創建目錄:

    • 打開文件資源管理器
    • 導航到?C:\
    • 右鍵新建文件夾,命名為?ffmpeg
  2. 解壓文件:

    • 將下載的 ZIP 文件解壓到?C:\ffmpeg?目錄中
    • 結構應為?C:\ffmpeg\bin\ffmpeg.exe

🔧 解決方案二:設置環境變量(最重要的一步)

添加 FFmpeg 到系統 PATH

  1. 打開系統屬性:

    • 按?Win + R?輸入?sysdm.cpl?回車
    • 或在文件資源管理器右鍵點擊"此電腦">屬性>高級系統設置
  2. 打開環境變量:

    • 點擊"環境變量"按鈕
    • 在"系統變量"區域,找到并選擇"Path"
    • 點擊"編輯"
  3. 添加 FFmpeg 路徑:

    • 點擊"新建"
    • 輸入?C:\ffmpeg\bin
    • 確保路徑中"bin"是小寫字母(Windows 路徑不區分大小寫)
  4. 保存更改:

    • 點擊所有"確定"按鈕保存設置
    • 關閉所有窗口

驗證設置:

  1. 打開新的命令提示符:

    • 按?Win + R?輸入?cmd?回車
    • ?重要:必須是新打開的命令窗口,環境變量變更后生效?
  2. 運行測試命令:

    cmd

    ffmpeg -version

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84427.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84427.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據冗余對企業運營的隱性成本

從客戶管理到供應鏈優化,再到市場分析,數據無處不在,數據已成為企業運營的核心驅動力。然而,隨著企業IT系統的多樣化和數據量的激增,數據冗余(Data Redundancy)問題逐漸浮出水面,成為…

HTML原生日期插件增加周次顯示

<div id="app" class="box box-info" style="border-top-color:white;"><!-- // 日期部分 --><div class="date-picker-container" style="position: relative; max-width: 200px;"><!-- 日期輸入框 -…

滲透測試PortSwigger Labs:遭遇html編碼和轉義符的反射型XSS

1 處是我們輸入的標簽被服務器 html 編碼后返回&#xff0c;被瀏覽器當作字符串顯示出來&#xff0c;無法執行 javascript 2 處是唯一能控制的地方&#xff0c;正好在script標簽范圍內&#xff0c;可以嘗試構造 依然存在轉移單引號&#xff0c;我們輸入轉義符\讓服務器添加的轉…

Ansible 錯誤處理:確保高效自動化

當 Ansible 收到命令的非零返回碼或模塊故障時,默認情況下,它會停止在該主機上的執行,并在其他主機上繼續執行。但是,在某些情況下,您可能需要不同的行為。有時非零返回碼表示成功。有時您希望一臺主機上的故障導致所有主機上的執行停止。Ansible 提供了處理這些情況的工具…

【無標題】NP完全問題的拓撲對偶統一解法 ——四色問題到P=NP的普適框架

NP完全問題的拓撲對偶統一解法 ——四色問題到PNP的普適框架 **摘要** 本文提出基于**拓撲膨脹-收縮對偶性**的計算理論框架&#xff0c;突破傳統NP完全性理論局限。通過將離散組合問題轉化為連續幾何問題&#xff0c;并引入規范場量子求解機制&#xff0c;實現四色問題、子…

【Zephyr 系列 19】打造 BLE 模塊完整 SDK:AT 命令系統 + 狀態機 + NVS + OTA 一體化構建

??關鍵詞:Zephyr、BLE 模塊、SDK 構建、AT 命令框架、有限狀態機、Flash 配置、MCUboot OTA ??面向讀者:希望將 BLE 項目標準化、封裝化、支持量產使用的開發團隊與架構師 ??預計字數:5500+ 字 ?? 背景與目標 在完成多個 BLE 功能模塊后,一個企業級產品往往需要:…

機器學習核心概念速覽

機器學習基本概念 有監督學習分類、回歸無監督學習聚類、降維 一維數組 import numpy as np data np.array([1,2,3,4,5]) print(data) print(data.shape) print(len(data.shape))[1 2 3 4 5] (5,) 1二維數組 data2 np.array([[1,2,3],[4,5,6]]) print(data2) print(data2…

在 Java 中實現一個標準 Service 接口,并通過配置動態選擇具體實現類供 Controller 調用

在 Java 中實現一個標準 Service 接口&#xff0c;并通過配置動態選擇具體實現類供 Controller 調用&#xff0c;是解耦和靈活擴展的常見設計模式。 需求分析 當你需要開發一個需要靈活切換業務實現的系統&#xff0c;比如不同環境使用不同策略&#xff08;如測試環境用Mock實…

input+disabled/readonly問題

背景&#xff1a; vue2elementui <el-input v-model"inputForm.projectName" class"input-font" :disabled"projectDisabled" placeholder"請選擇" :readonly"isReadonly"><el-button slot"append"…

Office2019下載安裝教程(2025最新永久方法)(附安裝包)

文章目錄 Office2019安裝包下載Office2019一鍵安裝步驟&#xff08;超詳細&#xff01;&#xff09; 大家好&#xff01;今天給大家帶來一篇超實用的Office2019專業版安裝教程&#xff01;作為日常辦公和學習的必備軟件&#xff0c;Office的安裝對很多朋友來說可能有點復雜&…

【編譯工具】(版本控制)Git + GitHub Actions:自動化工作流如何讓我的開發效率提升200%?

目錄 引言&#xff1a;現代開發中版本控制和 CI/CD 的重要性 一、Git&#xff1a;為什么它是版本控制的首選&#xff1f; &#xff08;1&#xff09;Git 的核心優勢 &#xff08;2&#xff09;Git 高效工作流示例 ① 功能開發流程 ② 緊急修復流程 二、GitHub Acti…

碼蹄杯真題分享

我的個人主頁 我的專欄&#xff1a; 人工智能領域、java-數據結構、Javase、C語言&#xff0c;MySQL&#xff0c;希望能幫助到大家&#xff01;&#xff01;&#xff01; 點贊&#x1f44d;收藏? 1&#xff1a;房間打掃&#xff08;題目鏈接&#xff09; 思路&#xff1a;要想…

小米玄戒O1架構深度解析(二):多核任務調度策略詳解

上篇文章中&#xff0c;就提到了小米玄戒O1的多核任務調度策略&#xff0c;但講得不夠詳細&#xff0c;尤其是對于完全公平調度器和能效感知調度&#xff0c;這次我們就深度剖析一下這兩種調度策略。 目錄 1. 完全公平調度器&#xff08;CFS&#xff09;1.1 完全公平調度基本原…

【技巧】win10和ubuntu互相掛在共享文件夾

回到目錄 【技巧】win10和ubuntu互相掛在共享文件夾 1. ubuntu掛載win10共享文件夾 $ sudo apt update $ sudo apt install cifs-utils $ sudo mkdir /mnt/[這里改為ubuntu共享目錄名] $ sudo mount -t cifs -o usernameadministrator //[這里改為win10機器IP]/[這里改為win…

線程(下)【Linux操作系統】

文章目錄 線程控制線程共享進程地址空間中的所有數據線程會瓜分進程的時間片線程相關庫函數庫函數&#xff1a;pthread_create庫函數&#xff1a;pthread_self庫函數&#xff1a;pthread_join庫函數&#xff1a;pthread_exit庫函數&#xff1a;pthread_cancel[盡量少用]庫函數&…

Linux 任務調度策略

&#x1f31f; 概述 Linux 內核以線程&#xff08;任務&#xff09;為單位進行調度&#xff0c;支持 SCHED_FIFO 和 SCHED_RR&#xff08;實時調度&#xff09;以及 SCHED_OTHER&#xff08;基于 CFS&#xff0c;非實時調度&#xff09;。 &#x1f50d; 調度策略 1. SCHED_…

芯片金屬層M1、M2區別

在芯片設計中&#xff0c;M1&#xff08;第一層金屬&#xff09;和 M2&#xff08;第二層金屬&#xff09;是常見的金屬層&#xff0c;它們在用途、布線方向、設計規則和應用場景等方面存在一些主要區別。以下是詳細對比&#xff1a; 1. 用途 M1&#xff08;第一層金屬&#x…

Linux離線環境下安裝Lean 4開發環境的完整指南

文章目錄 一、準備工作1. 在線環境下載必要文件2. 傳輸文件至離線環境 二、安裝elan工具鏈管理器1. 解壓并安裝elan2. 配置環境變量3. 驗證elan安裝 三、安裝Lean 4二進制包1. 解壓Lean 4二進制文件2. 注冊工具鏈到elan 四、安裝VS Code Lean 4插件1. 使用VS Code界面安裝插件 …

ffmpeg windows 32位編譯

ffmpeg windows 32位編譯 編譯后程序下載 編譯方式 自動編譯工具套件 – https://github.com/m-ab-s/media-autobuild_suite github克隆完成后&#xff0c;雙擊bat文件打開編譯窗口&#xff0c;注意git檢出的目錄需要簡短&#xff0c;最好選一個盤的根目錄。 選擇編譯版本…

P1216 [IOI 1994] 數字三角形 Number Triangles

題目描述 觀察下面的數字金字塔。 寫一個程序來查找從最高點到底部任意處結束的路徑&#xff0c;使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。 在上面的樣例中&#xff0c;從 7 → 3 → 8 → 7 → 5 7 \to 3 \to 8 \to 7 \to 5 7→3→8→7→5 的…