【工具】如何提取一个mp4文件的关键帧

ops/2024/10/20 4:03:11/

文章目录

  • 怎么做
  • 如何安装ffmepg
      • Ubuntu 或 Debian
      • CentOS 或 Fedora
      • macOS
      • Windows
      • 其他 Linux 发行版
  • 实践
  • 什么是关键帧

怎么做

你可以使用ffmpeg这个强大的多媒体处理工具来提取mp4文件中的关键帧。以下是一个示例命令,可以使用ffmpeg从mp4文件中提取关键帧

ffmpeg -i input.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr output_%03d.jpg

这个命令将会从名为input.mp4的文件中提取所有的关键帧,并将它们保存为output_001.jpg、output_002.jpg等等。你可以根据需要修改输出文件名的格式。

如果你想使用Python来执行这个操作,可以使用subprocess模块来调用ffmpeg。以下是一个简单的Python脚本示例:

import subprocessdef extract_keyframes(input_file, output_pattern):command = ["ffmpeg","-i", input_file,"-vf", "select=eq(pict_type\,I)","-vsync", "vfr",output_pattern]subprocess.call(command)input_file = "input.mp4"
output_pattern = "output_%03d.jpg"
extract_keyframes(input_file, output_pattern)

这个脚本将会执行与上面的命令相同的操作,只不过是通过Python代码来调用。确保你的系统上已经安装了ffmpeg,以及Python的subprocess模块。

如何安装ffmepg

安装FFmpeg通常可以通过系统的软件包管理器完成,具体的安装方法取决于你使用的操作系统。以下是一些常见操作系统的安装方法:

Ubuntu 或 Debian

在 Ubuntu 或 Debian 系统上,你可以使用 apt 包管理器来安装 FFmpeg。在终端中执行以下命令:

sudo apt update
sudo apt install ffmpeg

CentOS 或 Fedora

在 CentOS 或 Fedora 系统上,你可以使用 dnf 或 yum 包管理器来安装 FFmpeg。执行以下命令:

sudo dnf install ffmpeg   # 如果你使用的是 Fedora

或者

sudo yum install ffmpeg   # 如果你使用的是 CentOS

macOS

在 macOS 上,你可以使用 Homebrew 来安装 FFmpeg。如果你还没有安装 Homebrew,请先安装它,然后执行以下命令:

brew install ffmpeg

Windows

在 Windows 上,你可以从 FFmpeg 官网下载预编译的可执行文件,并按照说明进行安装。你可以在以下链接找到 Windows 版本的 FFmpeg:FFmpeg 官网

其他 Linux 发行版

对于其他的 Linux 发行版,你可以尝试使用该发行版的包管理器来安装 FFmpeg。如果无法通过包管理器安装,你还可以从 FFmpeg 官网获取源代码并进行编译安装。

安装完成后,你可以在终端中执行 ffmpeg -version 命令来验证是否成功安装了 FFmpeg,并且会显示安装的版本信息。

实践

ffmpeg -i /mnt/f/宫崎骏电影/1986天空之城.h265.1080P.AC5.1.默认日语音频/1986天空之城.h265.1080P.AC5.1.默认日语音频.mp4  -vf "select=
eq(pict_type\,I)" -vsync vfr output_%05d.jpg

在这里插入图片描述

什么是关键帧

在视频压缩和编码中,关键帧(Key Frame)是一种特殊的帧,它们可以独立地解码而不依赖于其他帧。关键帧通常包含完整的图像信息,而不是只存储变化的部分。这些关键帧在视频中起到重要的作用,因为它们是视频解码和播放的起点。

当你播放一个视频时,视频播放器会首先显示关键帧,然后根据后续的帧(通常是预测帧或者插入帧)进行补充。关键帧与非关键帧(例如预测帧或者插入帧)的区别在于,后者通常只存储了与前一帧之间的差异,而不是完整的图像信息。因此,如果视频流中没有关键帧,视频解码器将无法正确解码视频。

关键帧通常出现在视频的场景切换或者关键动作发生的地方。在视频编码中,合理设置关键帧的间隔可以影响视频的压缩率和解码质量。较小的关键帧间隔可以提高视频的快进和快退速度,但会增加视频文件的大小。

在视频编辑和处理中,提取关键帧可以用于生成视频缩略图、视频摘要或者图像检索等应用。


http://www.ppmy.cn/ops/39660.html

相关文章

解决springboot项目的网站静态页面显示不全问题

在通过springboot搭建项目时,为了能够访问静态的前端页面,我们考虑到访问的优先级问题,通常选择将资源放在recourses/static的目录下,如下: 这时可能会出现类似于下面这种图片无法加载、没有按照指定位置显示的情况&am…

第九届“数维杯”大学生数学建模挑战赛(C题)深度剖析|建模完整过程+详细思路+代码全解析

问题1 问题1的建模过程如下: 设勘探区域为 D D D,勘探井位数量为 n n n,每个勘探井位的坐标为 ( x i , y i ) , i 1 , 2 , . . . , n (x_i,y_i),i1,2,...,n (xi​,yi​),i1,2,...,n。根据勘探数据,假设该区域内天然气水合物资源…

初始Linux(基础命令)

前言: 我们不能总沉浸在编程语言中,虽然代码能力提升了,但是也只是开胃小菜。我们要朝着更高的方向发展。 最近小编一直在刷力扣,以至于博客更新的比较少。今天就带各位开始学习全新的知识——Linux.至于为啥要学? Lin…

【定制化】在Android平台实现自定义的程序启动页

特别说明:以下仅适用于Android平台。 实现原理 创建安卓端自定义的Activity禁用UnityPlayerActivity的启动Logo改用自定义Activity 示例效果 参考简单步骤或详细步骤都可实现。 自定义的启动动画,效果如下: 简单步骤 三步操作实现启动动画…

Spring-Bean 作用域

作用域 作用域案例 public class BeanScopeDemo {AutowiredQualifier("singletonPerson")Person person;AutowiredQualifier("prototypePerson")Person person1;AutowiredQualifier("prototypePerson")Person person2;AutowiredSet<Person&g…

如何防止WordPress网站内容被抓取

最近在检查网站服务器的访问日志的时候&#xff0c;发现了大量来自同一个IP地址的的请求&#xff0c;用站长工具分析确认了我的网站内容确实是被他人的网站抓取了&#xff0c;我第一时间联系了对方网站的服务器提供商投诉了该网站&#xff0c;要求对方停止侵权行为&#xff0c;…

如何使用google.protobuf.Struct?

google.golang.org/protobuf/types/known/structpb 包提供了一种方式来创建和操作 google.protobuf.Struct 类型的数据。google.protobuf.Struct 是一种灵活的数据类型&#xff0c;可以表示任何结构化数据。 以下是如何使用 structpb 包的一些示例&#xff1a; 创建 Struct&a…

高斯数据库创建函数的语法

CREATE FUNCTION 语法格式 •兼容PostgreSQL风格的创建自定义函数语法。 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | : | } expression ]} [, …] ] ) [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_…