基于Linux的ffmpeg python的关键帧抽取

1.FFmpeg的环境配置

首先强调,ffmpeg-python包与ffmpeg包不一样。

1) 创建一个虚拟环境env

conda create -n yourenv python=3.x
conda activate yourenv

2) ffmpeg-python包的安装

pip install ffmpeg-python

3) 安装系统级别的 FFmpeg 工具

虽然安装了 ffmpeg-python 包(也就是 Python 的 wrapper),但是系统里没有安装实际的 FFmpeg 可执行程序,会导致程序无法执行 ffmpeg 工具。

🧪在系统中安装 FFmpeg 二进制文件

cd ./your_env_path
conda install -c conda-forge ffmpeg

🔁安装完成后,验证 FFmpeg 是否可用

ffmpeg -version

4) FFmpeg 添加到系统变量

首先,在终端确认 FFmpeg 安装位置

which ffmpeg

你应该会看到类似的输出结果:

/usr/bin/ffmpeg
# 如果是在 Conda 环境下安装的,则输出:
/your_env_path/envs/yourenv/bin/ffmpeg  
# 例如:/home/zrw/anaconda3/envs/condetect/bin/ffmpeg

第二步,临时验证 PATH 设置
在 Python 脚本中 运行前添加如下代码,确保 FFmpeg 所在路径加入环境变量:

import os# 添加 FFmpeg 路径(改成你实际的 ffmpeg 路径)
os.environ["PATH"] += os.pathsep + "/your_env_path/envs/yourenv/bin/ffmpeg"
# 例如:os.environ["PATH"] += os.pathsep + "/home/zrw/anaconda3/envs/condetect/bin/ffmpeg"

放在程序中调用 ffmpeg之前就可以了。

第三步(可选):永久添加到 PATH

export PATH=$PATH:/yourenv_path/envs/yourenv/bin

然后运行:

source ~/.bashrc

5) 验证安装是否成功

建立一个python文件,输入以下代码,正确输出即可。

import ffmpeg
print(ffmpeg.__file__)  # 应该输出路径,比如 .../site-packages/ffmpeg/__init__.py
print(dir(ffmpeg))      # 应该能看到 ['input', 'output', 'run', ...]

打印结果如下:

在这里插入图片描述

2.主程序

🚀引入环境

import os
import ffmpeg
import numpy as np
from PIL import Image# 添加 FFmpeg 路径(改成你实际的 ffmpeg 路径)
os.environ["PATH"] += os.pathsep + "/home/zrw/anaconda3/envs/condetect/bin"

按固定帧数间隔抽帧

def extract_keyframes(video_path, output_dir, frame_interval=120):
os.makedirs(output_dir, exist_ok=True)(ffmpeg.input(video_path).filter("select", f"not(mod(n,{frame_interval}))")  # 每N帧取1帧.output(os.path.join(output_dir, "frame_%04d.png")).run(quiet=True)
)return sorted([f for f in os.listdir(output_dir) if f.endswith(".png")])

按固定时间间隔(秒)抽帧

def extract_keyframes(video_path, output_dir, interval_seconds=8):os.makedirs(output_dir, exist_ok=True)(ffmpeg.input(video_path).filter("fps", fps=1/interval_seconds)  # 如 interval_seconds=8 表示每8秒1帧.output(os.path.join(output_dir, "frame_%04d.png")).run(quiet=True))return sorted([f for f in os.listdir(output_dir) if f.endswith(".png")])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901633.shtml

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

相关文章

C#进阶学习(四)单向链表和双向链表,循环链表(上)单向链表

目录 前置知识: 一、链表中的结点类LinkedNode 1、申明字段节点类: 2、申明属性节点类: 二、两种方式实现单向链表 ①定框架: ②增加元素的方法:因为是单链表,所以增加元素一定是只能在末尾添加元素,…

RK3588 Buildroot 串口测试工具

RK3588 Buildroot串口测试工具(含代码) 一、引言 1.1 目的 本文档旨在指导开发人员能快速测试串口功能 1.2 适用范围 本文档适用于linux 系统串口测试。 二、开发环境准备 2.1 硬件环境 开发板:RK3588开发板,确保其串口硬件连接正常,具备电源供应、调试串口等基本硬…

HOJ PZ

https://docs.hdoi.cn/deploy 单体部署 请到~/hoj-deploy/standAlone的目录下,即是与docker-compose.yml的文件同个目录下,该目录下有个叫hoj的文件夹,里面的文件夹介绍如下: hoj ├── file # 存储了上传的图片、上传的临…

EtherCAT 的优点与缺点

EtherCAT(以太网控制自动化技术)是一种高性能的工业以太网协议,广泛应用于实时自动化控制。以下是其核心优缺点分析: ​一、EtherCAT 的核心优点​ 1. ​超低延迟 & 高实时性​ ​原理​:采用"​Processing…

高并发多级缓存架构实现思路

目录 1.整体架构 3.安装环境 1.1 使用docket安装redis 1.2 配置redis缓存链接: 1.3 使用redisTemplate实现 1.4 缓存注解优化 1.4.1 常用缓存注解简绍 1.4.2 EnableCaching注解的使用 1.4.3使用Cacheable 1.4.4CachePut注解的使用 1.4.5 优化 2.安装Ngin…

Qt QML实现Windows桌面颜色提取器

前言 实现一个简单的小工具,使用Qt QML实现Windows桌面颜色提取器,实时显示鼠标移动位置的颜色值,包括十六进制值和RGB值。该功能在实际应用中比较常见,比如截图的时候,鼠标移动就会在鼠标位置实时显示坐标和颜色值&a…

vue3+vite 多个环境配置

同一套代码 再也不用在不同的环境里来回切换请求地址了 然后踩了一个坑 就是env的文件路径是在当前项目下 不是在views内 因为公司项目需求只有dev和pro两个环境 虽然我新增了3个 但是只在这两个里面配置了 .env是可以配置一些公共配置的 目前需求来说不需要 所以我也懒得配了。…

AI赋能PLC(一):三菱FX-3U编程实战初级篇

前言 在工业自动化领域,三菱PLC以其高可靠性、灵活性和广泛的应用场景,成为众多工程师的首选控制设备。然而,传统的PLC编程往往需要深厚的专业知识和经验积累,开发周期长且调试复杂。随着人工智能技术的快速发展,利用…

XSS 跨站Cookie 盗取表单劫持网络钓鱼溯源分析项目平台框架

漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射 ( 非持续 ) ,存储 ( 持续 ) , DOM-BASE 拓展类型: jquery , mxss , uxss , pdfxss , flashx…

鸿蒙应用(医院诊疗系统)开发篇2·Axios网络请求封装全流程解析

一、项目初始化与环境准备 1. 创建鸿蒙工程 src/main/ets/ ├── api/ │ ├── api.ets # 接口聚合入口 │ ├── login.ets # 登录模块接口 │ └── request.ets # 网络请求核心封装 └── pages/ └── login.ets # 登录页面逻辑…

ADAS高级驾驶辅助系统详细介绍

ADAS(高级驾驶辅助系统)核心模块,通过 “监测→预警→干预” 三层逻辑提升行车安全。用户选择车辆时,可关注传感器配置(如是否标配毫米波雷达)、功能覆盖场景(如 AEB 是否支持夜间行人&#xff…

Prometheus+Grafana+K8s构建监控告警系统

一、技术介绍 Prometheus、Grafana及K8S服务发现详解 Prometheus简介 Prometheus是一个开源的监控系统和时间序列数据库,最初由SoundCloud开发,现已成为CNCF(云原生计算基金会)的毕业项目‌。它专注于实时监控和告警,特别适合云原生和分布式…

MATLAB脚本实现了一个三自由度的通用航空运载器(CAV-H)的轨迹仿真,主要用于模拟升力体在不同飞行阶段(初始滑翔段、滑翔段、下压段)的运动轨迹

%升力体:通用航空运载器CAV-H %读取数据1 升力系数 alpha = [10 15 20]; Ma = [3.5 5 8 10 15 20 23]; alpha1 = 10:0.1:20; Ma1 = 3.5:0.1:23; [Ma1, alpha1] = meshgrid(Ma1, alpha1); CL = readmatrix(simulation.xlsx, Sheet, Sheet1, Range, B2:H4); CL1 = interp2(…

Day09【基于jieba分词和RNN实现的简单中文分词】

基于jieba分词和RNN实现的中文分词 目标数据准备主程序预测效果 目标 本文基于给定的中文词表,将输入的文本基于jieba分词分割为若干个词,词的末尾对应的标签为1,中间部分对应的标签为0,同时将分词后的单词基于中文词表做初步序列…

Linux-服务器添加审计日志功能

#查看audit软件是否在运行(状态为active而且为绿色表示已经在运行) systemctl start auditd #如果没有在运行的话,查看是否被系统禁用 (audit为0表示被禁用) cat /proc/cmdline | grep -w "audit=0" #修改/etc/default/grub里面audit=0 改为audit=1 #更新GRUB…

uniappx项目上架各手机平台

前段时间用uniappx开发的App,领导要求要在各个主要手机平台上上架了,本来不是我的任务,后来其他人没有空交给我了,上架小白一枚,哭唧唧的自己研究吧,根据领导发的账号密码登录各个平台上架,花费…

第4次课 前缀和与差分 A

课堂学习 前缀和数组 前1个收购点&#xff1a;3箱 前2个收购点&#xff1a;325箱 前3个收购点&#xff1a;32510箱 以此类推… 数组a存储10个收购点的箱数。 收购点编号从1~10&#xff0c;数组下标也从1开始使用。 下标0位置直接赋值0 #include<bits/stdc.h> using nam…

MySQL部分总结

mysql学习笔记&#xff0c;如有不足还请指出&#xff0c;谢谢。 外连接&#xff0c;内连接&#xff0c;全连接 外连接&#xff1a;左外、右外 内连接&#xff1a;自己和自己连接 全连接&#xff1a;左外连接右外链接 mysql unique字段 unique可以在数据库层面避免插入相同…

Spring MVC 请求处理流程详解

步骤1&#xff1a;用户发起请求 所有请求首先被 DispatcherServlet&#xff08;前端控制器&#xff09;拦截&#xff0c;它是整个流程的入口。 DispatcherServlet 继承自 HttpServlet&#xff0c;通过 web.xml 或 WebApplicationInitializer 配置映射路径&#xff08;如 /&…

Vue 高级技巧深度解析

Vue 高级技巧深度解析 mindmaproot(Vue2高级技巧)组件通信EventBusprovide/inject$attrs/$listeners性能优化虚拟DOM优化函数式组件按需加载状态管理Vuex模块化持久化存储严格模式高级指令自定义指令动态组件异步组件渲染控制作用域插槽渲染函数JSX支持一、组件通信的进阶之道 …