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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 的…