FFmpeg 简介

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。

FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。

这个项目是由 Fabrice Bellard 发起的,现在由 Michael Niedermayer 主持。

可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。

Window上FFmpeg的安装

FFmpeg下载Window版链接 : https://ffmpeg.zeranoe.com/builds/

  1. 下载Windows版本的FFmpeg,并解压到需要安装的目录
  2. 在[此电脑或者计算机]上[右键]——[属性]——[高级系统设置],在高级选项卡点击[环境变量]
  3. 在[系统变量]下找到[path],然后添加 D:\Install soft\ffmpeg20200812\bin (这是解压后我电脑上的目录)
  4. windowr+R键,运行cmd,输入ffmpeg -version

ffmpeg抽取视频的关键帧

ffmpeg -i aaa.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 540*960 -f image2 core-%04d.jpeg

各个参数解释:

-i :输入文件,这里的话其实就是视频,

-vf:是一个命令行,表示过滤图形的描述, 选择过滤器select会选择帧进行输出:包括过滤器常量

pict_type和对应的类型:PICT_TYPE_I 表示是I帧,即关键帧。

-vsync 2:阻止每个关键帧产生多余的拷贝

-f image2 name_%02d.jpeg:将视频帧写入到图片中,样式的格式一般是: “%d” 或者 “%0Nd”

-s:分辨率,1920*1080

这样保存下来的关键帧的命名顺序是从1开始的,数字表示第几个关键帧。需要保存关键帧在原始视频中的帧的位置,参考Extracting the index of key frames from a video using ffmpeg。

PS:aaa.mp4  是视频文件

ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv aaa.mp4 | grep -n I | cut -d ':' -f 1 > frame_indices.txt

会生成一个 frame_indices.txt 的文件,其中保存的即为关键帧在视频中的帧的索引位置。 再将生成的关键帧与索引对应起来:

ls -1 core*.jpeg > core.txt

paste core.txt frame_indices.txt > combine.txt

生成的 combine.txt中每一行即为{}\t{}.format(core1, frame1)。

参考文章

  1. 从视频中获取关键帧(I帧)
  2. windows下FFmpeg使用方法

 历史上的今天

  1. 2023: SystemServer的启动之一(0条评论)
  2. 2019: android.view.ViewRootImpl$CalledFromWrongThreadException(0条评论)
  3. 2019: 朱湘:海外寄霓君(节选)(0条评论)
  4. 2018: Android6.0修改默认输入法(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

[摘]List、Set、Map详解及区别

一、List接口List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。实现List接口的集合主要有:ArrayList、Li...

胡适:赠与今年的大学毕业生

这一两个星期里,各地的大学都有毕业的班次,都有很多的毕业生离开学校去开始他们的成人事业。学生的生活是一种享有特殊优待的生活,不妨幼稚一点,不妨吵吵闹闹,社会都能纵容他们,不肯严格的要他们负行为的责任。现在他们要撑起自己的肩膀来挑他们自己的担子了。在这个国难最紧急的年头,他们的担子真不轻! 我们祝他们...

MediaScanner源码JNI介绍2

前言接上文《MediaScanner源码JNI介绍》介绍register_android_media_MediaScanner的registerNativeMethods()注册是在android_media_MediaPlayer.cpp中JNI_OnLoad,上次有个疑惑,哪何时加载JNI_...

AsyncTask源码分析UML流程图

好早想学习画流程图,但一直拖着没有真正的画。最近分析了《AsyncTask源码分析》因此为这画了一个流程图,作为练习。图画得不是很好,主要是为了表达一下对AsyncTask的步骤理解。因为刚开始学画UML,有些细节没有把握好,望理解。谢谢 在SyncTask中,会调用两次PostR...

朱自清:正义

正义是在我们心理!从明哲的教训和见闻的意义中,我们不是得着大批的正义么?但白白的搁在心里,谁也不去取用,却至少是可惜的事。两石白米搁在屋里,总要吃它干净,两箱衣服堆在屋里,总要轮流穿换,一大堆正义却扔在一旁,满不理会,我们真大方,真舍得!看来正义这东西也真*,竟抵不上白米的一个尖儿,衣服的一个扣儿。...

C语言之scanf()

前言简单记录一下scanf的使用。scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数。正文scanf说明语法:#include <stdio.h> int scanf( const char *format, ... ...