Ubuntu中安装最新FFmpeg及使用FFmpeg进行视频图片数据帧的提取
标签: FFmpeg
Ubuntu中安装最新FFmpeg及视频图片数据帧的提取
如题所述本文是关于在Ubuntu中安装FFmpeg,如何之为最新版,那是因为是直接从FFmpeg 源码download官网 下载的源码进行编译安装的。本文中安装FFmpeg的方法援引这位博主分享的博文
https://blog.csdn.net/qq_38863413/article/details/105017775
依赖库的安装
在进行FFmpeg的编译安装之前需要对其所依赖的一些库安装,如:yams, sdl1.2, sdl2.0,如下所示:
sudo apt-get install yasm
sudo apt-get install libsdl1.2-dev
sudo apt-get install libstdl2-dev
但是在安装第三个依赖库:libstdl2-dev时出现状况:
无法通过apt找到安装包,但是Ubuntu的库有更新过,无奈之下只能从其官网下载源码编译安装了,传送门:libstdl2-dev源码下载。
解压后,进行编译安装:
1. ./configure
2. make
3. sudo make install
OK,依赖库安装好之后,接下来就是安装FFmpeg了。
同样下载好源码的压缩包之后,解压进入该文件目录,编译安装:
1. ./configure
2. make
3. sudo make install
安装的时间有点长,安装好之后检查安装情况,可使用以下命令进行FFmpeg的版本的查询,从而判断是否安装成功。

OK,FFmpeg安装好了,solosolo进入正题,此次安装FFmpeg的主要目的之一就是提取视频中的图片帧。不知道各位有没遇到过这样的情况,就是在视频中忽然出现某一帧图片是你很想拿来做壁纸的,但是用电脑截屏的话总是感觉没有原视频看起来清晰,不过这也和你屏幕的分辨率有关。AE这样强大的视频编辑处理软件又吃笔记本内存,所以,本人选择使用了FFmpeg这一强大的开源流媒体处理工具(库)。所以我要做的就是在视频中提取我想要的图片帧保存起来。这样的操作使用FFmpeg就是一句命令就能够解决的事。

使用FFmpeg主要是按时间进行图片帧的提取:
1、根据时间段进行图片数据帧的提取,如下在视频时间是2分53秒到2分55秒处按帧进行图片的提取。
ffmpeg -i ./xxxxx.flv -ss 02:53 -to 02:55 -f image2 ./xxxxx-%d.png
实际使用如下:
lin@Dev:~/Videos$ ffmpeg -i ./Aimer.flv -ss 02:53 -to 02:55 -f image2 ./Aimer-%d.png
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configuration:
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
Input #0, flv, from './Aimer.flv':
Metadata:
description : Codec by Bilibili XCode Worker v4.8.35(fixed_gap:False)
metadatacreator : Version 1.9
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : true
datasize : 74368157
videosize : 71083119
audiosize : 3231802
lasttimestamp : 195
lastkeyframetimestamp: 195
lastkeyframelocation: 74369555
Duration: 00:03:15.57, start: 0.080000, bitrate: 3042 kb/s
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2908 kb/s, 25.03 fps, 25 tbr, 1k tbn, 50 tbc
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to './Aimer-%d.png':
Metadata:
description : Codec by Bilibili XCode Worker v4.8.35(fixed_gap:False)
metadatacreator : Version 1.9
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : true
datasize : 74368157
videosize : 71083119
audiosize : 3231802
lasttimestamp : 195
lastkeyframetimestamp: 195
lastkeyframelocation: 74369555
encoder : Lavf58.29.100
Stream #0:0: Video: png, rgb24, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.54.100 png
frame= 50 fps=0.8 q=-0.0 Lsize=N/A time=00:00:02.00 bitrate=N/A speed=0.0327x
video:48429kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
上述运行后的结果是frame= 50,即提取了50帧的图片,图片的数量与视频的帧率相关。
2、视频逐帧提取
ffmpeg -i ./xxxxx.flv xxxxx-%d.png
3、截取某个时间点的图片帧
ffmpeg -i ./xxxxx.flv -ss 01:11 -f image2 ./xxxxx.png
上述FFmpeg使用过程中所设计的参数如下:
| 参数 | 释义 |
|---|---|
| -i | 表示输入文件,后接需要进行处理的视频文件 |
| -ss | 表示要提取的图片帧所在的或者说是起始的时间戳 |
| -to | 和其字面的意思一样,表示截取动作的终止的时间戳 |
| -f | 代表输出文件,后面需要接 image2,并指明输出文件的储存路径 |
更多详情敬请访问:ffmpeg Documentation 官网
智能推荐
Layui parent.layui.open弹框之Iframe 传值处理
Layui open弹框获取值的方法 介绍:Layui 弹框之Iframe传值处理 我的想法 解决 子页面 获取 父页面方法以及元素。 上代码,看图片 原创作品,欢迎来讨论! 介绍:Layui 弹框之Iframe传值处理 本人在使用到layui的iframe版 ,里面使用到了弹框 。 普通弹框:layui.open(); 像这种传递值都没什么问题 , 子页面获取父页面值 或者父页面获取子页面值 全...
外置Tomcat无法使用devtools实现热部署
练手的项目每次有源码或者页面更新都需要重新启动,不能忍,热部署走一波 这个项目是用外置Tomcat启动的 项目层级目录 模块依赖关系:service 依赖于 model 依赖于 api (启动类在service模块中) 引入devTools依赖,确定相关idea配置无误后,发现热部署没有生效 得出结论: devTools无法对使用对外置的tomcat运行的项目生效 于是在网上搜索外置tomcat项...
C++跨平台库QT学习7 使用UnitTest单元测试入门
C++跨平台库QT学习7 使用UnitTest单元测试入门 一、新建子目录项目 二、新建控制台项目 三、新建测试用例子目录项目 mycalctest.pro文件内容: 测试用例文件test_mycalctesttest.cpp 在子项目`mycalctest`点右键、运行 一、新建子目录项目 在QT点击菜单 文件-新建文件或项目-其他项目-子目录项目: 二、新建控制台项目 然后继续建一个子项目: ...
Python实用模块(二十五)loguru
软硬件环境 windows 10 64bits anaconda with python 3.7 loguru 0.5.3 前言 Python实用模块(十四)logging https://xugaoxiang.com/2019/12/04/python-module-logging 已 经介绍过了python内置日志模块logging。我们要使用logging,一般来讲,都是需要进行一...
Glide图片加载框架的使用简介与功能介绍
Glide图片加载框架的使用简介 . 1. 在app/build.gradle文件当中添加如下依赖: 2. 在AndroidManifest.xml中声明一下网络权限才行: 3. 开始使用Glide加载图片 with()方法的介绍 作用: 用于创建一个加载图片的实例;with()方法可以接收Context、Activity或者Fragment类型的参数 注意: with()方法中传入的实例会决定G...
猜你喜欢
编写过滤器解决全局乱码问题
过滤器编写步骤 编写一个类实现javax.servlet.Filter接口 重写接口中所有的方法,其中doFilter方法执行过滤的功能 配置过滤器 在web.xml中配置 使用注解@WebFilter 解决乱码需要添加这句代码:req.setCharacterEncoding(“utf-8”); 字符集与网页的编码要一致 EncodingFilter.java: 过滤器的...
HTML+CSS+JS做一个简易音乐播放器
先给大家看下效果: 实现功能:音乐播放,歌词跟随进度滚动,中间随着音乐播放图片360度旋转 文件目录: 做一个播放器,音乐和歌词事先要下载好,搜一些自己喜欢的封面,让图片360度旋转的样式,通过按钮增删样式达到跟音乐同步进行: 其中歌词匹配才是让我头疼的,所有JS代码部分: 需要所有源码,可以去github上自行下载: https://github.com/lzs1996/MusicPlayer....
Ecplise(jsp文件)导入css文件路径没错,但是没有样式(不生效/无效)
一、检查css文件的【路径】是否正确 1、:将页面在【浏览器】打开,按【Ctrl+u】,查看【页面源代码】(也可右键点击) 若页面进行【跳转】------>说明css路径没错 二、若路径有问题 参考链接: 1、Jsp中引入css等外部文件路径问题 https://blog.csdn.net/prospective0821/article/details/79775626?utm_medium...
自定义View——仿支付宝支付弹窗界面
上面这个是采用自定view方式实现的一个仿支付宝支付弹窗的效果; 1、自定义view并初始化自定义属性 继承自EditText的话可以用使用EditText中的一些属性和方法,在初始化完自定义属性后要记得调用recycle()方法进行回收; 2、初始化画笔 在第三个构造函数中调用就可以了, 3、在onDraw()方法中进行绘制 在绘制的时候先要计算出一个密码所占的宽度 获取到一个密码的宽度后就可以...
人工智能 一种现代方法 第11章 现实世界的规划与行动
文章目录 时间、调度和资源 车间调度问题 忽略资源约束的时间调度问题:关键路径方法 有资源约束的时间调度问题 分层规划 搜索原语解 搜索抽象解 非确定性问题的规划 无传感器规划 应急规划 资源分享 本文旨在讲明: 1)时间,调度,资源 2)分层规划 3)非确定性问题规划 时间、调度和资源 经典规划能做: 1)做什么动作 2)按什么顺序做 不能做: 1)动作何时发生 2)持续多久 3)考虑资源约束 ...
