基于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.pswp.cn/news/901633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901633.shtml
英文地址,請注明出處:http://en.pswp.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支持一、組件通信的進階之道 …