将视频分成一帧一帧python_python ffmpeg任意提取视频帧的方法
环境准备
1、安装 FFmpeg
音/视频工具 FFmpeg 简易安装文档
2、安装 ffmpeg-python
pip3 install ffmpeg-python
3、【可选】安装 opencv-python
pip3 install opencv-python
4、【可选】安装 numpy
pip3 install numpy
视频帧提取
准备视频素材
抖音视频素材下载:https://anoyi.com/dy/top
基于视频帧数提取任意一帧
import ffmpeg import numpy import cv2 import sys import random def read_frame_as_jpeg(in_file, frame_num): """ 指定帧数读取任意帧 """ out, err = ( ffmpeg.input(in_file) .filter('select', 'gte(n,{})'.format(frame_num)) .output('pipe:', vframes=1, format='image2', vcodec='mjpeg') .run(capture_stdout=True) ) return out def get_video_info(in_file): """ 获取视频基本信息 """ try: probe = ffmpeg.probe(in_file) video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) if video_stream is None: print('No video stream found', file=sys.stderr) sys.exit(1) return video_stream except ffmpeg.Error as err: print(str(err.stderr, encoding='utf8')) sys.exit(1) if __name__ == '__main__': file_path = '/Users/admin/Downloads/拜无忧.mp4' video_info = get_video_info(file_path) total_frames = int(video_info['nb_frames']) print('总帧数:' + str(total_frames)) random_frame = random.randint(1, total_frames) print('随机帧:' + str(random_frame)) out = read_frame_as_jpeg(file_path, random_frame) image_array = numpy.asarray(bytearray(out), dtype="uint8") image = cv2.imdecode(image_array, cv2.IMREAD_COLOR) cv2.imshow('frame', image) cv2.waitKey()
基于时间提取任意一帧
import ffmpeg import numpy import cv2 import sys import random def read_frame_by_time(in_file, time): """ 指定时间节点读取任意帧 """ out, err = ( ffmpeg.input(in_file, ss=time) .output('pipe:', vframes=1, format='image2', vcodec='mjpeg') .run(capture_stdout=True) ) return out def get_video_info(in_file): """ 获取视频基本信息 """ try: probe = ffmpeg.probe(in_file) video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) if video_stream is None: print('No video stream found', file=sys.stderr) sys.exit(1) return video_stream except ffmpeg.Error as err: print(str(err.stderr, encoding='utf8')) sys.exit(1) if __name__ == '__main__': file_path = '/Users/admin/Downloads/拜无忧.mp4' video_info = get_video_info(file_path) total_duration = video_info['duration'] print('总时间:' + total_duration + 's') random_time = random.randint(1, int(float(total_duration)) - 1) + random.random() print('随机时间:' + str(random_time) + 's') out = read_frame_by_time(file_path, random_time) image_array = numpy.asarray(bytearray(out), dtype="uint8") image = cv2.imdecode(image_array, cv2.IMREAD_COLOR) cv2.imshow('frame', image) cv2.waitKey()
相关资料
https://github.com/kkroening/ffmpeg-python/tree/master/examples
将视频分成一帧一帧python_python ffmpeg任意提取视频帧的方法相关推荐
- Windows下 ffmpeg + labelImg 提取视频帧 得到图片集 并 标注图片 来 构造数据集
构造数据集的流程 视频文件 >> ffmpeg处理 >> 图片集 >> labelImg进行标注 >> 标注好的数据集 准备ffmpeg ...
- FFmpeg批量提取视频的某一帧作为封面
命令是这样的: ffmpeg -i input.flv -ss 00:00:02 -frames:v 1 out.png 说明: -i input.flv 截取的视频的名字 -ss 00:00:02 ...
- 【视频转PDF】Gleamoe Peanut 2023,轻松提取视频中的幻灯片!
目录 Gleamoe Peanut 2023:==轻松提取视频中的幻灯片==,让学习与研究更高效 一.简介 软件特点 软件优点 二.软件界面 三.安装与使用 四.技术细节 处理逻辑 定位幻灯片的两种方 ...
- python 视频 特效_ffmpeg-python 任意提取视频帧
▶ 环境准备 1.安装 FFmpeg 2.安装 ffmpeg-python pip3 install ffmpeg-python 3.[可选]安装 opencv-python pip3 install ...
- python读取视频流提取视频帧的两种方法_ffmpeg-python 任意提取视频帧
▶ 环境准备 1.安装 FFmpeg 2.安装 ffmpeg-python pip3 install ffmpeg-python 3.[可选]安装 opencv-python pip3 install ...
- shell命令 ffmpeg 批量提取视频的音频文件
ffmpeg命令提取音频,主要是for循环目录下的文件,判断是否是mp4结尾的文件,然后执行 ffmpeg命令. 下面上命令的代码 #! /bin/bash function rename() {cd ...
- transform video to frames/提取视频中的每一帧
在处理视频数据的过程中,有时我们需要提取视频的每一帧来进行后续的处理,下面是python的脚本 需要环境opencv 1.文件 2.video2frame.py代码 import cv2 import ...
- 【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )
本篇博客代码及资源下载 : https://download.csdn.net/download/han1202012/10382762 文章目录 一. 音视频基础 1. 音频基础 (1) 声音要素 ...
- python操作ffmpeg,做视频转码【上篇】
本篇博客要落地的场景是使用 python + ffmpeg 实现将 mp4 文件转换为 m3u8 格式视频. 为了更好的结合二者,我们先学习一下 ffmpeg 如何使用. 文章目录 ffmpeg 运用 ...
最新文章
- 武器化道路越走越远的无人机
- 网络编程 TCP学习
- SpringMVC级联获取前台数据
- 关于ABST2的若干问题
- ffmpeg摄像头推流
- 收到计算机工程与应用的退修通知,《计算机工程与应用》退修意见
- 与非CCR代码互操作
- 1 CO配置-企业结构-定义-创建经营组织(Operating Concern)
- android intent-filter category,android intent-filter category.DEFAULT
- 添加和更改webstorm主题
- idea给main方法附带参数
- 神经网络控制系统设计,神经网络技术及其应用
- Everything To Byte And To Tensor -- Welcome to age of AI
- clover懒人_懒人气球驱动的互联网毕竟可能不是一个愚蠢的想法
- 盘点那些被AI换脸、一键“脱”衣所滥用的AI模型
- 算24(递归)--算法学习
- 华为S9300核心交换机链路聚合配置实例
- 自用推荐,heic格式转换工具
- 深信服上网行为管理——仅用户访问某个特定网站,其他行为拒绝策略
- 基于MATLAB的条形码识别系统
热门文章
- 里加一列为1_一素一菩提 @ 素牛排薯泥amp;百香龙珠气泡饮
- 实现文本编辑器的设计与实现_ArrayList实现分析(三)——迭代器的实现
- Python安装PyOpenGL
- 《高性能JavaScript》第七章 Ajax
- MATLAB机器学习系列-12:蚁群算法优化原理及其matlab实现
- wxWidgets:wxConfigPathChanger类用法
- boost::sort模块实现spreadsort wstring 排序示例
- boost::multiprecision模块cpp_bin_float_100相关的测试程序
- boost::mpi模块sendrecv() 操作的测试
- boost::mp11::mp_append相关用法的测试程序